Cisco Spark API for Node JS
npm install node-sparkCisco Spark API Library for Node JS based on a Swagger definition specification.
- Rate limiting headers inspected to adjust request rates based on Cisco Spark API. These are automatically re-queued and sent after the retry-after timer expires.
- Pagination automatically invoked when requesting max results greater than the API max.
- Promises comply with A+ standards.
- Simple FIFO API queueing mechanism with adjustable delay.
- Webhook submodule.
``bash`
mkdir myproject
cd myproject
npm init
npm install --save node-spark
touch index.js
Example index.js:
`js
var CiscoSpark = require('node-spark');
var options = {
token:'OWQwOGEzMDgtZDYyTOKENjQwLWI2MTTOKEN5YmMzYTI1TOKENzVhNGNjTOKENDgx'
};
var spark = new CiscoSpark(options);
spark.connect()
.then(client => client.rooms.getRooms())
.then(res => console.log(res))
.catch(err => console.log(err.message));
`
The constructor accepts an options object. The only required object key property required is the token. Below shows the optional properties to override defaults for non-required options.
`js`
var options = {
token: 'OWQwOGEzMDgtZDYyTOKENjQwLWI2MTTOKEN5YmMzYTI1TOKENzVhNGNjTOKENDgx',
swagger: 'https://raw.githubusercontent.com/CumberlandGroup/swagger-cisco-spark/master/cisco_spark_v1.json',
delay: 600
};
Options Object:
- token : Spark API Tokenswagger
- : File path or URL to over-ride the internal swagger file definitiondelay
- : Delay in ms between outbound requests.
_Note: While this library will respect the Rate Limiting Headers, the outbound FIFO queue will help average out requests to minimize hitting the Rate Limiter. Once the API Rate Limiter is hit, the retry times returned are often in excess of 60 seconds which will cause significant delay in any real-time API interaction._
The Spark.connect() method returns a spark client object promise that includes the following methods and events.
client.
The resource and method are defined in the Swagger definition. If not specified, an internal swagger definition file is used. For more information on the resource/method/query, reference this github repository.
spark.on('
Events Types:
- request - Emitted with each API request. The callback executed with the arguments:url
- : requested URLheadersObj
- : object containing the headers of requestbodyObj
- : object containing the contents body of the requestrate-limited
- - Emitted when a response is returned that rate limit is hit. The callback executed with the arguments:retryAfter
- : seconds that Spark API is requesting to wait before resending this requesturl
- : requested URLheaderObj
- : object containing the headers of requestbodyObj
- : object containing the contents body of the requestqueued
- - callback executed with the arguments:queueDepth
- : size of queueurl
- : requested URLheadersObj
- : object containing the headers of requestbodyObj
- : object containing the contents body of the request
The webhook submodule can optionally be implemented directly from node-spark without a direct dependency on the node-spark-webhook package. For details on usage, refer to the submodule's README.md.
Project Setup:
`bash`
mkdir myproject
cd myproject
npm init
npm install --save node-spark
npm install --save express
npm install --save body-parser
touch index.js
Example index.js: (embedded into an express.js app)
`js
"use strict";
var Webhook = require('node-spark/webhook');
var express = require('express');
var bodyParser = require('body-parser');
var path = require('path');
var webhook = new Webhook();
// add events
webhook.on('request', function(hook) {
console.log('%s.%s web hook received', hook.resource, hook.event)
});
var app = express();
app.use(bodyParser.json());
// add route for path that which is listening for web hooks
app.post('/spark', webhook.listen());
// start express server
var server = app.listen('3000', function () {
console.log('Listening on port %s', '3000');
});
``
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see