## Installation

### Server-Side via NPM

To install the Kevel Decision SDK, you must have [Node.js v10](https://nodejs.org/en/about/releases/) or higher installed.

Shell

```shell
npm install --save @adzerk/decision-sdk
```

### Client-Side via CDN

To fetch the latest version of the Decision SDK using the CDN, run the command below.

HTML

```html
<script src="https://unpkg.com/@adzerk/decision-sdk/dist/adzerk-decision-sdk.js"></script>
```

If you are using a fixed version, run the following command:

HTML

```html
<script src="https://unpkg.com/@adzerk/decision-sdk@1.0.0-beta.2/dist/adzerk-decision-sdk.js"></script>
```

## Examples

### Fetching an Ad Decision

JavaScript

```javascript
import { Client } from "@adzerk/decision-sdk";

// Demo network, site, and ad type IDs; find your own via the Adzerk UI!
let client = new Client({ networkId: 23, siteId: 667480 });

let request = {
  placements: [{ adTypes: [5] }],
  user: { key: "abc" },
  keywords: ["keyword1", "keyword2"]
};

client.decisions.get(request).then(response => {
  console.dir(response, { depth: null });
});
```

### Recording Impression & Clicks

Use with the fetch ad example above.

JavaScript

```javascript
// Impression pixel; fire when user sees the ad
client.pixels.fire({ url: decision.impressionUrl });

// Click pixel; fire when user clicks on the ad
// status: HTTP status code
// location: click target URL
client.pixels.fire({ url: decision.clickUrl }).then(r => {
  console.log(`status ${r["status"]}; location: ${r["location"]}`);
});
```

### UserDB: Reading User Record

JavaScript

```javascript
import { Client } from "@adzerk/decision-sdk";

// Demo network ID; find your own via the Adzerk UI!
let client = new Client({ networkId: 23 });
client.userDb.read("abc").then(response => console.log(response));
```

### UserDB: Setting Custom Properties

JavaScript

```javascript
import { Client } from "@adzerk/decision-sdk";

// Demo network ID; find your own via the Adzerk UI!
let client = new Client({ networkId: 23 });

let props = {
  favoriteColor: "blue",
  favoriteNumber: 42,
  favoriteFoods: ["strawberries", "chocolate"]
};

client.userDb.setCustomProperties("abc", props);
```

### UserDB: Forgetting User Record

JavaScript

```javascript
import { Client } from "@adzerk/decision-sdk";

const apiKey = process.env.ADZERK_API_KEY;

// Demo network ID and API key; find your own via the Adzerk UI!
let client = new Client({ networkId: 23, apiKey });
client.userDb.forget("abc");
```

### Decision Explainer

JavaScript

```javascript
import { Client } from "@adzerk/decision-sdk";

const apiKey = process.env.ADZERK_API_KEY;

// Demo network, site, and ad type IDs; find your own via the Adzerk UI!
let client = new Client({ networkId: 23, siteId: 667480 });

let request = {
  placements: [{ adTypes: [5] }],
  user: { key: "abc" },
  keywords: ["keyword1", "keyword2"]
};

const options = {
  includeExplanation: true,
  apiKey
};

client.decisions.get(request, options).then(response => {
  console.dir(response, { depth: null });
});
```

### Using CNAME

When using CNAME, you can use this syntax, where your CNAME is `engine.yourdomain.com`:

JavaScript

```javascript
let client = new AdzerkDecisionSdk.Client({ networkId: 10328, siteId: 1157752, host: "engine.yourdomain.com" });
```

### Sending User Agent When Firing Impression Pixels

When you want to send a user agent when firing impression pixels, use the command below.

JavaScript

```javascript
client.pixels.fire(
  { url: 'pixel url here' },
  { userAgent: navigator.userAgent }
)
```
