# https://nerd.vision node agent

This is the official nerd.vision node agent. We're constantly looking to improve, so please send us feedback on it's usability and if you find any issues! You can see the **known issues** at the bottom of this readme.

### Requirements

 * Node 10+

### Documentation

You can find the documentation at [docs.nerd.vision](https://docs.nerd.vision/node/install)

### Installation

```bash
npm i @nerdvision/agent
```

### Configuration Properties

All configuration properties are defined in [NerdVisionConfig](src/models/NerdVisionConfig.ts)

```typescript
interface NerdVisionConfig {
	api_key: string;
	name?: string; // default: my-node-app
	debug?: boolean; // default: false
	tags?: { [key: string]: string }; // default: {}
}
```

##### ⚠ Breaking change in v1.0.0: ️`apiKey` has been renamed to `api_key`

### Usage

Both `init` and `wrap` accept an API key, or the configuration object. The example below is typescript, but nerd.vision works perfectly with normal javascript as well.

```typescript
const {nerdvision, NerdVisionConfig} = require('@nerdvision/agent');

const config: NerdVisionConfig = {
	api_key: 'API_KEY', // you can find yours at https://account.nerd.vision/account/apikeys
};

//
// THEN
//

nerdvision.init('API_KEY').then(() => {
	// application code
});

//
// OR
//

nerdvision.init(config).then(() => {
	// application code
});
```

When Node exits, nerd.vision should automatically disconnect. If you want to ensure that it has disconnected, you can explicitly call `close` in your shutdown handler:
```typescript
nerdvision.close();
```

You can also use `.wrap` to automatically disconnect after your code has run. This is more useful for applications that shut down after processing.
```
nerdvision.wrap(config, async () => {
	// application code
	
	// this function must return a promise
	// when it resolves, nerd.vision will disconnect automatically
});
```

### Examples

There are two example node applications for nerd.vision.

* [Node sample applications](https://gitlab.com/nerd-vision/test-apps/node)

### Troubleshooting

> I get the error `TS7016: Could not find a declaration file for module 'google-protobuf'`
* You need to install types for google-protobuf: `npm i -D @types/google-protobuf`

> I get errors when i use `import` on nerd.vision
* Please use the `require` syntax above for now, we're actively looking into fixing this

### Known issues

* When using a pre-processor for JavaScript, like TypeScript, files that are lazy loaded may not trigger until they are run for a second time.
* **ts-node** is not supported yet. As a work around, you can build your code with `tsc` and run it directly with node for tracepoints to fire
