npm package: @preprio/nodejs-sdk
Description: The official Prepr SDK for Node.js
Author: Prepr.io
Latest version: 1.2.0

# Node.js Prepr Content Delivery SDK

- [Source code](https://github.com/preprio/nodejs-sdk) on GitHub.

## About Prepr

Hi there, nice to meet you. We are Prepr, and we are the world’s first data-driven headless content management system. With just one solution, we offer you all the tools you need to publish impactful content.

## Getting started

### Installation

Get started by installing the SDK in your application, simply open a terminal and enter

```bash
npm i @preprio/nodejs-sdk
```

### Creating a client

We don't want to repeat our configuration for every api call, that's why we suggest you create a client from which you make requests. Let's make a client by creating `services/prepr.js` with the following code

```js
// services/prepr.js

const { createPreprClient } = require('@preprio/nodejs-sdk')

const prepr = createPreprClient({
  token: '<your access token>', // required
  timeout: 4000, // default value
  baseUrl: 'https://cdn.prepr.io', // default value (REST API), for GraphQL API use https://graphql.prepr.io/graphql
  userId: null, // optional, used for AB testing
})

module.exports = { prepr }
```

Great, now we have the configuration in one place. Now, we can import our configured prepr client to perform requests.

## Usage GraphQL API

To perform API requests you can make use of our fluent builder, this is how it looks like

```js
// We created this earlier
const { prepr } = require('./services/prepr')

const result = await prepr
  .graphqlQuery(`GraphQL Query`) // https://prepr.dev/docs/graphql/v1/collection-introduction
  .graphqlVariables({JSON_VARIABLE_PAYLOAD})
  .timeout(8000) // Override globally set timeout for request cancellation
  .userId('...') // Override globally set userId for ab testing
  .token('xx-xx') // Update the Token used by the SDK for example when previewing staged content   
  .fetch() // Fetch the collections
```

Let's request all Pages in our Prepr environment.

```js
    // We created this earlier
    const {prepr} = require('./services/prepr')
    
    const result = await prepr
    .graphqlQuery(`{
        Pages {
            items {
                _id
                title
                summary
            }
        }
    }`)
    .fetch()
```

To help you querying our API we've added multiple examples to our [GraphQL Reference](https://prepr.dev/docs/graphql/v1/introduction).

## Usage REST API

To perform API requests you can make use of our fluent builder, this is how it looks like

```js
// We created this earlier
const { prepr } = require('./services/prepr')

const result = await prepr
  .path('/publications') // request path `https://cdn.prepr.io/publications`
  .query({
      'model' : {
          'eq' : 'x-x-x-x-x'
      }
  }) // query data https://prepr.dev/docs/rest/v1/introduction
  .timeout(8000) // Override globally set timeout for request cancellation
  .userId('...') // Override globally set userId for ab testing
  .token('xx-xx') // Update the Token used by the SDK for example when previewing staged content
  .sort('created_at') // Sort data
  .limit(8) // Limit the amount collections being returned
  .skip(0) // Skip the first x amount collections before returning resources
  .fetch() // Fetch the collections
```

To help you querying our API we've added multiple examples to our [REST Reference](https://prepr.dev/docs/rest/v1/introduction).

## Reach out to us

You have questions about how to use this library or the Prepr API?
Contact our support team at support@prepr.io or join us on [Slack](https://slack.prepr.io).

**You found a bug or want to propose a feature?**. 
File an issue here on GitHub. Don't share any authentication info in any code before sharing it.