1.1.1 • Published 7 years ago

@ingest/ingest-node-sdk v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
7 years ago

Ingest.io Node SDK

The official Ingest.io Node SDK for interfacing with Ingest.

Table of contents

Requirements

Getting Started

Getting started with the Ingest Node SDK is simple.

The Ingest Node SDK supports both callback and promise flows, and is easily integratable into your workflow. The below documentation will show usage with the callback functionality.

To use the SDK:

  1. Install the SDK via npm:
npm install @ingest/ingest-node-sdk
  1. Require it in your project:
  const IngestSDK = require('@ingest/ingest-node-sdk')
  1. Initialize the SDK:
  const Ingest = new IngestSDK({
    token: 'Bearer ..',
  })

API Documentation

All resource methods have an optional callback parameter as the last parameter. This can be omitted and a promise flow adopted instead. The following examples contain the callback approach.

Videos

Retrieving all Videos

ParameterDescription
headersAny headers you wish to send in object form
statusThe video status you wish to filter by. By default this will return all playable videos (encoded videos)
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.getAll(headers, status, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the videos you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Search Videos

ParameterDescription
inputThe search term
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.search(input, headers, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Retrieving a Video

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Creating a Video

Title is the only mandatory property, please check the main API documentation for a full list:

ParameterDescription
videoThe video object to create
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let video = {
  title: 'My video title'
}

Ingest.Videos.add(video, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Counting Videos

Returns the count of all the videos. The count will be available as a header property in the response. Resource-Count

ParameterDescription
statusThe video status you wish to filter by. By default this will return all playable videos (encoded videos)
privateWhether or not you want private videos included in the count
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.count(status, private, (error, data) => {
  if (error) {
    // handle error
  }

  let resourceCount = data.headers['resource-count']
  ...
})

Get a Video's thumbnails

ParameterDescription
idThe id of the video you wish to get thumbnails for
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.getThumbnails(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Get a Video's variants

ParameterDescription
idThe id of the video you wish to get variants for
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.getVariants(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Adding external thumbnails to a Video

ParameterDescription
idThe id of the video you wish to add thumbnails for
imagesAn array of strings, or just a string of the file image path
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.addExternalThumbnails(id, images, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Uploading a thumbnail to a Video

ParameterDescription
idThe id of the video you wish to add thumbnails for
imageObject containing all of the image information
image.dataThe image buffer
image.filenameThe name of the image file
image.contentTypeThe content type of the image being uploaded
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
  Ingest.Videos.uploadThumbnail(id, image, function(error, data) {
    if(error) {
      return res.send(error)
    }
    ...
  })

Deleting a thumbnail from a Video

ParameterDescription
idThe id of the video you wish to delete a thumbnail for
thumbnailIDThe thumbnail id you wish to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.deleteThumbnail(id, thumbnailID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Updating a Video

ParameterDescription
videoThe updated video object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.update(video, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Publishing videos

This makes videos publicly available to anyone who has the video playback url

ParameterDescription
idsAn array of video ids to publish
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.update(ids, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Deleting a Video

Deleting a video just puts the video in Ingest's trash, making it publicly inaccessible and set for permanent deletion a short time from now:

ParameterDescription
idThe video id to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.delete(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

If you wish to permanently delete the video immediately:

ParameterDescription
idThe video id to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Videos.permanentDelete(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Inputs

Retrieving all Inputs

ParameterDescription
headersAny headers you wish to send in object form
filtersA comma delimited string containing filters to match inputs against
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Inputs.getAll(headers, filters, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the inputs you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Search Inputs

ParameterDescription
inputThe search term
headersAny headers you wish to send in object form
filtersA comma delimited string containing filters to match inputs against
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Inputs.search(input, headers, filters (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Retrieving an Input

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Inputs.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Creating an Input

Filename is the only mandatory property, please check the main API documentation for a full list:

ParameterDescription
inputThe input object to create
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let input = {
  filename: 'My input filename'
}

Ingest.Inputs.add(input, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Counting Inputs

Returns the count of all the inputs. The count will be available as a header property in the response. Resource-Count

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Inputs.count((error, data) => {
  if (error) {
    // handle error
  }

  let resourceCount = data.headers['resource-count']
  ...
})

Updating an Input

ParameterDescription
inputThe updated input object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Inputs.update(input, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Deleting an Input

ParameterDescription
idThe input id to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Inputs.delete(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Profiles

Retrieving all Profiles

ParameterDescription
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Profiles.getAll(headers, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the profiles you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Search Profiles

ParameterDescription
inputThe search term
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Profiles.search(input, headers, filters (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Retrieving a Profile

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Profiles.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Creating a Profile

The following fields are mandatory when creating a profile

FieldDescription
nameThe name of the profile
typeThe type of profile, either 'MP4' or 'hls'
dataProfile data. Depends on the type of profile. Please reference the profile object documentation for more depth:
ParameterDescription
profileThe profile object to create
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let profile = {
  name: 'My Profile name',
  type: 'mp4',
  data: {}'
}

Ingest.Profiles.add(profile, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Counting Profiles

Returns the count of all the profiles. The count will be available as a header property in the response. Resource-Count

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Profiles.count((error, data) => {
  if (error) {
    // handle error
  }

  let resourceCount = data.headers['resource-count']
  ...
})

Updating a Profile

ParameterDescription
profileThe updated profile object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Profiles.update(input, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Deleting a Profile

Please note, default profiles cannot be deleted and locked profiles can only be deleted by admins.

ParameterDescription
idThe profile id to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Profiles.delete(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Jobs

Retrieving all Jobs

ParameterDescription
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Jobs.getAll(headers, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the jobs you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Retrieving a Job

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Jobs.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Creating a Job

The following fields are mandatory when creating a profile

FieldDescription
inputsAn array of input UUID's
profileThe profile UUID to encode with
videoThe video UUID to encode to
ParameterDescription
jobThe job object to create
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let job = {
  inputs: [
    'someuuid'
  ],
  profile: 'someuuid',
  video: 'someuuid'
}

Ingest.Jobs.add(job, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Counting Jobs

Returns the count of all the Jobs. The count will be available as a header property in the response. Resource-Count

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Jobs.count((error, data) => {
  if (error) {
    // handle error
  }

  let resourceCount = data.headers['resource-count']
  ...
})

Deleting a Job

ParameterDescription
idThe job id to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Jobs.delete(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Events

Everything you do in Ingest causes events to be made. These are just actions of things that have happened on your network.

Retrieving all events

ParameterDescription
headersAny headers you wish to send in object form
filterStatusA comma delimited string that allows you to filter events by status
filterTypeA comma delimited string that allows you to filter the results by type
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Events.getAll(headers, filterStatus, filterType (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the profiles you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Retrieving an Event

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Events.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Counting Events

Returns the count of all the events. The count will be available as a header property in the response. Resource-Count

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Events.count((error, data) => {
  if (error) {
    // handle error
  }

  let resourceCount = data.headers['resource-count']
  ...
})

Get Event Types

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Events.getTypes((error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Livestreams

Retrieving all Livestreams

ParameterDescription
headersAny headers you wish to send in object form
statusA comma delimited string containing livestream statuses to include
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Livestreams.getAll(headers, status, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the livestreams you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Retrieving a Livestream

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Livestreams.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Creating a Livestream

Title is the only mandatory property, please check the main API documentation for a full list:

ParameterDescription
livestreamThe livestream object to create
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let livestream = {
  title: 'My Livestream'
}

Ingest.Livestreams.add(livestream, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Updating a Livestream

Only the title is updatable.

ParameterDescription
livestreamThe updated livestream object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Livestreams.update(livestream, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Deleting a Livestream

Please note, you must end your livestream before deleting it. To do so, pass true in as the end value.

ParameterDescription
idThe input id to delete
endWhether you are ending it or deleting it
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Livestreams.delete(id, end, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Networks

Retrieving all networks

ParameterDescription
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getAll(headers, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the networks you can access.

Retrieving a Network

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Updating a Network

ParameterDescription
networkThe updated network object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.update(network, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Adding a Playback Key

Adds a Private Playback key to your network. The key must be in PKCS1 or PKCS8 format.

ParameterDescription
idThe id of the network
keyThe playback key to add. This is an object and contains the key and the key title
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let key = {
  title: 'My Playback Key',
  key: 'MY KEY HERE'
}

Ingest.Networks.addSecureKey(id, key, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Deleting a Playback Key

Deletes a Private Playback key from your network.

ParameterDescription
idThe id of the network
keyIDThe ID of the playback key
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.deleteSecureKey(id, keyID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Updating a Playback Key

Updates a Private Playback key from your network. Only the title can be updated.

ParameterDescription
idThe id of the network
keyThe playback key to update
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.updateSecureKey(id, key, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Get a Playback Key

Gets a Private Playback key from your network.

ParameterDescription
idThe id of the network
keyIDThe playback key id
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getSecureKeyById(id, keyID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Getting all Invoices

Gets all invoices for your network.

ParameterDescription
idThe id of the network
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getInvoices(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Getting an Invoice

Gets a single invoice for your network.

ParameterDescription
idThe id of the network to add the key to
invoiceIDThe ID of the invoice to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getInvoiceById(id, invoiceID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Getting your current monthly usage

Gets your current monthly usage

ParameterDescription
idThe id of the network
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getCurrentUsage(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Inviting a User to a network

Invites the user specified to your network

ParameterDescription
idThe id of the network
emailThe user being invited's email address with Ingest
nameThe user being invited's name
resendFalse if you haven't sent one yet, true to resend it
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.inviteUser(id, email, name, resend (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Get all Pending User Invites

Gets all pending user invites for your network.

ParameterDescription
idThe id of the network
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.getPendingUsers(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Delete a Pending User Invite

Gets all invoices for your network.

ParameterDescription
idThe id of the network
pendingUserIDThe id of the pending user
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.deletePendingUser(id, pendingUserID (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Linking a User to a Network

Links a specified user to the specified network

ParameterDescription
idThe id of the network to add the key to
userIDThe user id you want to link to the specified network
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.linkUser(id, userID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Unlinking a User from a Network

Unlinks a specified user to the specified network

ParameterDescription
idThe id of the network to add the key to
userIDThe user id you want to link to the specified network
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Networks.unlinkUser(id, userID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Roles

Retrieving all Roles

ParameterDescription
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Roles.getAll(headers, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the roles you can access.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument.

Retrieving a Role

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Roles.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Creating a Role

A role requires a role name, and an array of permissions.

ParameterDescription
roleThe role object to create
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
let role = {
  role_name: 'My Role name',
  permissions: []
}

Ingest.Roles.add(role, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Updating a Role

ParameterDescription
roleThe updated role object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Roles.update(role, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Deleting a Role

ParameterDescription
idThe role id to delete
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Roles.delete(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Users

Retrieving all Users

Only returns users on your currently authorized network

ParameterDescription
headersAny headers you wish to send in object form
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.getAll(headers, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

This will return a list of all the users in your authorized network.

Sometimes, the results will be paginated. In order to access the next page, pass the value that was provided to you on the Next-Range header as an argument:

Retrieving an User

ParameterDescription
idThe ID of the item to get
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.getById(id, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Updating a User

This updates the given user, only if you have permission to do so.

ParameterDescription
userThe updated user object
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.update(user, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Getting current User Info

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.getCurrentUserInfo((error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Revoking Current User

Revokes the current user's authorization token

ParameterDescription
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.revokeCurrentUser((error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Update Users Roles

You will only be able to update a user's roles if you have valid permissions.

ParameterDescription
idThe user's id to modify roles for
roleIDsAn array of role ids to be given to the user
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.updateUserRoles(id, roleIDs, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Transfer User Authorship

Transfers all of a user's content to another user.

ParameterDescription
originalIDOriginal User's ID
newIDNew User's ID
callback?This is optional if following the callback approach. Callback parameters are error and data (error, data) => {}
Ingest.Users.transferUserAuthorship(originalID, newID, (error, data) => {
  if (error) {
    // handle error
  }

  ...
})

Issues

If you encounter any issues using the Ingest Node SDK, please search the existing issues first before opening a new one.

Please include any information that may be of assistance with reproducing the issue.

Development

To modify the source of the Ingest SDK, clone the repo.

npm install

Develop in a topic/feature branch, not master.

Running Tests

To run the unit tests, use:

npm run test

To watch the unit tests, use:

npm run test:watch

License

This SDK is distributed under the MIT License, see License for more information.

1.1.1

7 years ago

1.1.0

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago