diff --git a/.travis.yml b/.travis.yml
index a58f74b6..788fdb20 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,6 +4,9 @@ node_js:
- 5
- 6
- 7
+- 8
+- 9
+- 10
before_script:
- npm install -g grunt-cli
notifications:
diff --git a/README.md b/README.md
index eae89b60..569a65e2 100644
--- a/README.md
+++ b/README.md
@@ -310,6 +310,24 @@ You can also call the `stop()` method of the Broadcast object to stop a broadcas
Call the `Opentok.getBroadcast()` method, passing in a broadcast ID, to get a Broadcast object.
+You can also get a list of all the Broadcasts you've created (up to 1000) with your API Key. This is
+done using the `OpenTok.listBroadcasts(options, callback)` method. The parameter `options` is an
+optional object used to specify an `offset`, `count`, and `sessionId` to help you paginate through the results.
+The callback has a signature `function(err, broadcasts, totalCount)`. The `broadcasts` returned from
+the callback is an array of `Broadcast` instances. The `totalCount` returned from the callback is
+the total number of broadcasts your API Key has generated.
+
+```javascript
+opentok.listBroadcasts({offset:100, count:50}, function(error, broadcasts, totalCount) {
+ if (error) return console.log("error:", error);
+
+ console.log(totalCount + " broadcasts");
+ for (var i = 0; i < broadcasts.length; i++) {
+ console.log(broadcasts[i].id);
+ }
+});
+```
+
To change the broadcast layout, call the `OpenTok.setBroadcastLayout()` method,
passing in the broadcast ID and the [layout
type](https://tokbox.com/developer/guides/broadcast/live-streaming/#configuring-video-layout-for-opentok-live-streaming-broadcasts).
diff --git a/lib/client.js b/lib/client.js
index bf1c03d7..b404b2d5 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -4,6 +4,7 @@ var _ = require('lodash');
var generateJwt = require('./generateJwt');
var pkg = require('../package.json');
var Stream = require('./stream');
+var Broadcast = require('./broadcast');
var defaultConfig = {
apiKey: null,
apiSecret: null,
@@ -18,7 +19,8 @@ var defaultConfig = {
startBroadcast: '/v2/project/<%apiKey%>/broadcast',
stopBroadcast: '/v2/project/<%apiKey%>/broadcast/<%broadcastId%>/stop',
getBroadcast: '/v2/project/<%apiKey%>/broadcast/<%broadcastId%>',
- setBroadcastLayout: '/v2/project/<%apiKey%>/broadcast/<%broadcastId%>/layout'
+ setBroadcastLayout: '/v2/project/<%apiKey%>/broadcast/<%broadcastId%>/layout',
+ listBroadcasts: '/v2/project/<%apiKey%>/broadcast'
},
request: {
timeout: 20000 // 20 seconds
@@ -167,6 +169,27 @@ Client.prototype.getBroadcast = function getBroadcast(broadcastId, cb) {
});
};
+Client.prototype.listBroadcasts = function listBroadcasts(queryString, cb) {
+ var baseUrl = this.c.apiUrl + this.c.endpoints.listBroadcasts.replace(/<%apiKey%>/g, this.c.apiKey);
+ var url = queryString.length > 0 ? baseUrl + '?' + queryString : baseUrl;
+ var parsedBody;
+ request.get({
+ url: url,
+ headers: this.generateHeaders()
+ }, function requestCallback(err, resp, body) {
+ if (err) {
+ return cb(new Error('The request failed: ' + err));
+ }
+ if (resp.statusCode === 200) {
+ parsedBody = JSON.parse(body);
+ return cb(null, parsedBody.items.map(function itemIterator(item) {
+ return new Broadcast(Client, JSON.stringify(item));
+ }), parsedBody.count);
+ }
+ return cb(new Error('(' + resp.statusCode + ') ' + body ? body.message : ''));
+ });
+};
+
Client.prototype.setBroadcastLayout = function setBroadcastLayout(opts, cb) {
var url = this.c.apiUrl + this.c.endpoints.setBroadcastLayout
.replace(/<%apiKey%>/g, this.c.apiKey)
diff --git a/lib/opentok.js b/lib/opentok.js
index 1d61c7cc..41a09918 100644
--- a/lib/opentok.js
+++ b/lib/opentok.js
@@ -288,8 +288,8 @@ OpenTok = function (apiKey, apiSecret, env) {
*
*
*
- * sessionId
— Specify the id of a session in order to retrieve archives
- * specifically for that session. This property is optional. When no sessionId is specified,
+ * sessionId
— Specify the ID of a session in order to retrieve archives
+ * specifically for that session. This property is optional. When no session ID is specified,
* then the method will return archives from any session created with your API key.
*
*
@@ -418,7 +418,7 @@ OpenTok = function (apiKey, apiSecret, env) {
* startBroadcast()
method and the
* {@link OpenTok#getBroadcast OpenTok.getBroadcast()} method. OpenTok streams
* the session to each RTMP URL you specify. Note that OpenTok live streaming
- * does not support RTMPS.
+ * supports RTMP and RTMPS.
*
*
* For HLS, include a single hls
property of the outputs
object.
@@ -542,6 +542,81 @@ OpenTok = function (apiKey, apiSecret, env) {
});
};
+ /**
+ * Retrieves a List of {@link Broadcast} objects, representing broadcasts that are both
+ * completed and in-progress, for your API key.
+ *
+ * @param options {Object} An options parameter with three properties:
+ *
+ *
+ *
+ * -
+ *
count
— The maximum number of broadcasts to return. The default number of
+ * broadcasts returned is 50 (or fewer, if there are fewer than 50 broadcasts).
+ * The method returns a maximum of 1000 broadcasts.
+ *
+ *
+ * -
+ *
offset
— The offset for the first broadcast to list (starting with the
+ * first broadcast recorded as offset 0). 1 is the offset of the broadcast that started prior
+ * to the most recent broadcast. This property is optional; the default is 0.
+ *
+ *
+ * -
+ *
sessionId
— Specify the ID of a session in order to retrieve broadcasts
+ * specifically for that session. This property is optional. When no session ID is specified,
+ * then the method will return broadcasts from any session created with your API key.
+ *
+ *
+ *
+ *
+ * If you don't pass in an options
argument,
+ * the method returns up to 1000 broadcasts starting with the first broadcast recorded.
+ *
+ * @param callback {Function} The function to call upon completing the operation. Two arguments
+ * are passed to the function:
+ *
+ *
+ *
+ * -
+ *
error
— An error object (if the call to the method fails).
+ *
+ *
+ * -
+ *
broadcasts
— An array of {@link Broadcast} objects.
+ *
+ *
+ *
+ *
+ * @method #listBroadcasts
+ * @memberof OpenTok
+ */
+ this.listBroadcasts = function listBroadcasts(options, callback) {
+ var query = [];
+ var queryString = null;
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+ if (typeof callback !== 'function') {
+ throw (new errors.ArgumentError('No callback given to listBroadcasts'));
+ }
+ if (options.offset) {
+ query.push('offset=' + parseInt(options.offset, 10));
+ }
+ if (options.count) {
+ query.push('count=' + parseInt(options.count, 10));
+ }
+ if (options.sessionId) {
+ query.push('sessionId=' + options.sessionId);
+ }
+ queryString = query.join('&');
+ return this.client.listBroadcasts(queryString, function cb(err, json, totalCount) {
+ if (err) { return callback(err); }
+ return callback(null, json, totalCount);
+ });
+ };
+
/**
* Sets (or updates) the layout of the broadcast. See
*
@@ -819,7 +894,8 @@ OpenTok = function (apiKey, apiSecret, env) {
*
* @param sipUri The sip URI the SIP Interconnect feature will dial.
*
- * @param options {Object} An optional options object with the following properties (all of which are optional):
+ * @param options {Object} An optional options object with the following properties
+ * (all of which are optional):
*
*
* -
@@ -840,10 +916,15 @@ OpenTok = function (apiKey, apiSecret, env) {
* encrypted or not.
*
* -
- *
from
(String) — The number or string that will be sent to the final SIP number as the caller. It must be a string in the form of
- * from@example.com
, where from
can be a string or a number.
- * If from
is set to a number (for example, "14155550101@example.com"
), it will show up as the incoming number on PSTN phones.
- * If from
is undefined or set to a string (for example, "joe@example.com"
), +00000000
will show up as the incoming number on PSTN phones.
+ * from
(String) — The number or string that will be sent
+ * to the final SIP number as the caller. It must be a string in the form of
+ * from@example.com
, where from
can be a string or a number.
+ * If from
is set to a number (for example,
+ * "14155550101@example.com"
),
+ * it will show up as the incoming number on PSTN phones.
+ * If from
is undefined or set to a string (for example,
+ * "joe@example.com"
),
+ * +00000000
will show up as the incoming number on PSTN phones.
*
*
*
diff --git a/package-lock.json b/package-lock.json
index f6f05213..147becfd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "opentok",
- "version": "2.8.1",
+ "version": "2.9.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -22,7 +22,7 @@
"integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
"dev": true,
"requires": {
- "acorn": "3.3.0"
+ "acorn": "^3.0.4"
},
"dependencies": {
"acorn": {
@@ -38,10 +38,10 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.1.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
}
},
"ajv-keywords": {
@@ -74,7 +74,7 @@
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
- "sprintf-js": "1.0.3"
+ "sprintf-js": "~1.0.2"
}
},
"array-find-index": {
@@ -89,7 +89,7 @@
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
- "array-uniq": "1.0.3"
+ "array-uniq": "^1.0.1"
}
},
"array-uniq": {
@@ -147,9 +147,9 @@
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
},
"dependencies": {
"chalk": {
@@ -158,11 +158,11 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
}
},
"strip-ansi": {
@@ -171,7 +171,7 @@
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
}
}
@@ -199,7 +199,7 @@
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
+ "tweetnacl": "^0.14.3"
}
},
"bluebird": {
@@ -213,7 +213,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"requires": {
- "hoek": "4.2.1"
+ "hoek": "4.x.x"
}
},
"brace-expansion": {
@@ -222,7 +222,7 @@
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
@@ -249,7 +249,7 @@
"integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
"dev": true,
"requires": {
- "callsites": "0.2.0"
+ "callsites": "^0.2.0"
}
},
"callsites": {
@@ -270,8 +270,8 @@
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dev": true,
"requires": {
- "camelcase": "2.1.1",
- "map-obj": "1.0.1"
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
}
},
"caseless": {
@@ -285,7 +285,7 @@
"integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
"dev": true,
"requires": {
- "underscore-contrib": "0.3.0"
+ "underscore-contrib": "~0.3.0"
}
},
"chai": {
@@ -294,12 +294,12 @@
"integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
"dev": true,
"requires": {
- "assertion-error": "1.1.0",
- "check-error": "1.0.2",
- "deep-eql": "3.0.1",
- "get-func-name": "2.0.0",
- "pathval": "1.1.0",
- "type-detect": "4.0.8"
+ "assertion-error": "^1.0.1",
+ "check-error": "^1.0.1",
+ "deep-eql": "^3.0.0",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.0.0",
+ "type-detect": "^4.0.0"
}
},
"chalk": {
@@ -308,9 +308,9 @@
"integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.1",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.3.0"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
},
"dependencies": {
"ansi-styles": {
@@ -319,7 +319,7 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "1.9.1"
+ "color-convert": "^1.9.0"
}
},
"supports-color": {
@@ -328,7 +328,7 @@
"integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
"dev": true,
"requires": {
- "has-flag": "3.0.0"
+ "has-flag": "^3.0.0"
}
}
}
@@ -357,7 +357,7 @@
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
"dev": true,
"requires": {
- "restore-cursor": "2.0.0"
+ "restore-cursor": "^2.0.0"
}
},
"cli-width": {
@@ -383,7 +383,7 @@
"integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
"dev": true,
"requires": {
- "color-name": "1.1.3"
+ "color-name": "^1.1.1"
}
},
"color-name": {
@@ -403,7 +403,7 @@
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
"commander": {
@@ -424,9 +424,9 @@
"integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.5",
- "typedarray": "0.0.6"
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"contains-path": {
@@ -446,9 +446,9 @@
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
- "lru-cache": "4.1.2",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
"cryptiles": {
@@ -456,7 +456,7 @@
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"requires": {
- "boom": "5.2.0"
+ "boom": "5.x.x"
},
"dependencies": {
"boom": {
@@ -464,7 +464,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"requires": {
- "hoek": "4.2.1"
+ "hoek": "4.x.x"
}
}
}
@@ -475,7 +475,7 @@
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
"dev": true,
"requires": {
- "array-find-index": "1.0.2"
+ "array-find-index": "^1.0.1"
}
},
"dashdash": {
@@ -483,7 +483,7 @@
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
}
},
"dateformat": {
@@ -492,8 +492,8 @@
"integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
"dev": true,
"requires": {
- "get-stdin": "4.0.1",
- "meow": "3.7.0"
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
}
},
"debug": {
@@ -525,7 +525,7 @@
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
- "type-detect": "4.0.8"
+ "type-detect": "^4.0.0"
}
},
"deep-equal": {
@@ -546,13 +546,13 @@
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
"dev": true,
"requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
}
},
"delayed-stream": {
@@ -572,7 +572,7 @@
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"requires": {
- "esutils": "2.0.2"
+ "esutils": "^2.0.2"
}
},
"ecc-jsbn": {
@@ -581,7 +581,7 @@
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "jsbn": "~0.1.0"
}
},
"ecdsa-sig-formatter": {
@@ -589,8 +589,8 @@
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz",
"integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=",
"requires": {
- "base64url": "2.0.0",
- "safe-buffer": "5.1.1"
+ "base64url": "^2.0.0",
+ "safe-buffer": "^5.0.1"
}
},
"error-ex": {
@@ -599,7 +599,7 @@
"integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
"dev": true,
"requires": {
- "is-arrayish": "0.2.1"
+ "is-arrayish": "^0.2.1"
}
},
"escape-string-regexp": {
@@ -614,43 +614,43 @@
"integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==",
"dev": true,
"requires": {
- "ajv": "5.5.2",
- "babel-code-frame": "6.26.0",
- "chalk": "2.3.2",
- "concat-stream": "1.6.1",
- "cross-spawn": "5.1.0",
- "debug": "3.1.0",
- "doctrine": "2.1.0",
- "eslint-scope": "3.7.1",
- "eslint-visitor-keys": "1.0.0",
- "espree": "3.5.4",
- "esquery": "1.0.0",
- "esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
- "functional-red-black-tree": "1.0.1",
- "glob": "7.1.2",
- "globals": "11.3.0",
- "ignore": "3.3.7",
- "imurmurhash": "0.1.4",
- "inquirer": "3.3.0",
- "is-resolvable": "1.1.0",
- "js-yaml": "3.11.0",
- "json-stable-stringify-without-jsonify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.5",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "natural-compare": "1.4.0",
- "optionator": "0.8.2",
- "path-is-inside": "1.0.2",
- "pluralize": "7.0.0",
- "progress": "2.0.0",
- "require-uncached": "1.0.3",
- "semver": "5.5.0",
- "strip-ansi": "4.0.0",
- "strip-json-comments": "2.0.1",
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.2",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
"table": "4.0.2",
- "text-table": "0.2.0"
+ "text-table": "~0.2.0"
}
},
"eslint-config-airbnb-base": {
@@ -659,7 +659,7 @@
"integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==",
"dev": true,
"requires": {
- "eslint-restricted-globals": "0.1.1"
+ "eslint-restricted-globals": "^0.1.1"
}
},
"eslint-import-resolver-node": {
@@ -668,8 +668,8 @@
"integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "resolve": "1.5.0"
+ "debug": "^2.6.9",
+ "resolve": "^1.5.0"
},
"dependencies": {
"debug": {
@@ -695,8 +695,8 @@
"integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
"dev": true,
"requires": {
- "debug": "2.6.9",
- "pkg-dir": "1.0.0"
+ "debug": "^2.6.8",
+ "pkg-dir": "^1.0.0"
},
"dependencies": {
"debug": {
@@ -722,16 +722,16 @@
"integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=",
"dev": true,
"requires": {
- "builtin-modules": "1.1.1",
- "contains-path": "0.1.0",
- "debug": "2.6.9",
+ "builtin-modules": "^1.1.1",
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.8",
"doctrine": "1.5.0",
- "eslint-import-resolver-node": "0.3.2",
- "eslint-module-utils": "2.1.1",
- "has": "1.0.1",
- "lodash": "4.17.5",
- "minimatch": "3.0.4",
- "read-pkg-up": "2.0.0"
+ "eslint-import-resolver-node": "^0.3.1",
+ "eslint-module-utils": "^2.1.1",
+ "has": "^1.0.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.3",
+ "read-pkg-up": "^2.0.0"
},
"dependencies": {
"debug": {
@@ -749,8 +749,8 @@
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
"ms": {
@@ -773,8 +773,8 @@
"integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
"dev": true,
"requires": {
- "esrecurse": "4.2.1",
- "estraverse": "4.2.0"
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
}
},
"eslint-visitor-keys": {
@@ -789,8 +789,8 @@
"integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
"dev": true,
"requires": {
- "acorn": "5.5.3",
- "acorn-jsx": "3.0.1"
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
}
},
"esprima": {
@@ -805,7 +805,7 @@
"integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
"dev": true,
"requires": {
- "estraverse": "4.2.0"
+ "estraverse": "^4.0.0"
}
},
"esrecurse": {
@@ -814,7 +814,7 @@
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
- "estraverse": "4.2.0"
+ "estraverse": "^4.1.0"
}
},
"estraverse": {
@@ -852,9 +852,9 @@
"integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
"dev": true,
"requires": {
- "chardet": "0.4.2",
- "iconv-lite": "0.4.19",
- "tmp": "0.0.33"
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
}
},
"extsprintf": {
@@ -884,7 +884,7 @@
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
- "escape-string-regexp": "1.0.5"
+ "escape-string-regexp": "^1.0.5"
}
},
"file-entry-cache": {
@@ -893,8 +893,8 @@
"integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
"dev": true,
"requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
}
},
"fileset": {
@@ -903,8 +903,8 @@
"integrity": "sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E=",
"dev": true,
"requires": {
- "glob": "3.2.11",
- "minimatch": "0.4.0"
+ "glob": "3.x",
+ "minimatch": "0.x"
},
"dependencies": {
"glob": {
@@ -913,8 +913,8 @@
"integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimatch": "0.3.0"
+ "inherits": "2",
+ "minimatch": "0.3"
},
"dependencies": {
"minimatch": {
@@ -923,8 +923,8 @@
"integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
"dev": true,
"requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
}
}
}
@@ -941,8 +941,8 @@
"integrity": "sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs=",
"dev": true,
"requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
}
}
}
@@ -953,8 +953,8 @@
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"requires": {
- "path-exists": "2.1.0",
- "pinkie-promise": "2.0.1"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"findup-sync": {
@@ -963,7 +963,7 @@
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
"dev": true,
"requires": {
- "glob": "5.0.15"
+ "glob": "~5.0.0"
},
"dependencies": {
"glob": {
@@ -972,11 +972,11 @@
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
}
}
@@ -987,10 +987,10 @@
"integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
"dev": true,
"requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
}
},
"forever-agent": {
@@ -1003,9 +1003,9 @@
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"requires": {
- "asynckit": "0.4.0",
+ "asynckit": "^0.4.0",
"combined-stream": "1.0.6",
- "mime-types": "2.1.18"
+ "mime-types": "^2.1.12"
}
},
"fs.realpath": {
@@ -1032,8 +1032,8 @@
"integrity": "sha1-X5S92gr+U7xxCWm81vKCVI1gwnk=",
"dev": true,
"requires": {
- "fileset": "0.1.8",
- "minimatch": "0.2.14"
+ "fileset": "~0.1.5",
+ "minimatch": "~0.2.9"
},
"dependencies": {
"lru-cache": {
@@ -1048,8 +1048,8 @@
"integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
"dev": true,
"requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
}
}
}
@@ -1077,7 +1077,7 @@
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
}
},
"glob": {
@@ -1086,12 +1086,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"globals": {
@@ -1106,12 +1106,12 @@
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
"dev": true,
"requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"graceful-fs": {
@@ -1132,22 +1132,22 @@
"integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=",
"dev": true,
"requires": {
- "coffeescript": "1.10.0",
- "dateformat": "1.0.12",
- "eventemitter2": "0.4.14",
- "exit": "0.1.2",
- "findup-sync": "0.3.0",
- "glob": "7.0.6",
- "grunt-cli": "1.2.0",
- "grunt-known-options": "1.1.0",
- "grunt-legacy-log": "1.0.1",
- "grunt-legacy-util": "1.0.0",
- "iconv-lite": "0.4.19",
- "js-yaml": "3.5.5",
- "minimatch": "3.0.4",
- "nopt": "3.0.6",
- "path-is-absolute": "1.0.1",
- "rimraf": "2.2.8"
+ "coffeescript": "~1.10.0",
+ "dateformat": "~1.0.12",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.1",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.0.0",
+ "grunt-cli": "~1.2.0",
+ "grunt-known-options": "~1.1.0",
+ "grunt-legacy-log": "~1.0.0",
+ "grunt-legacy-util": "~1.0.0",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.5.2",
+ "minimatch": "~3.0.2",
+ "nopt": "~3.0.6",
+ "path-is-absolute": "~1.0.0",
+ "rimraf": "~2.2.8"
},
"dependencies": {
"esprima": {
@@ -1162,12 +1162,12 @@
"integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"grunt-cli": {
@@ -1176,10 +1176,10 @@
"integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
"dev": true,
"requires": {
- "findup-sync": "0.3.0",
- "grunt-known-options": "1.1.0",
- "nopt": "3.0.6",
- "resolve": "1.1.7"
+ "findup-sync": "~0.3.0",
+ "grunt-known-options": "~1.1.0",
+ "nopt": "~3.0.6",
+ "resolve": "~1.1.0"
}
},
"js-yaml": {
@@ -1188,8 +1188,8 @@
"integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
"dev": true,
"requires": {
- "argparse": "1.0.10",
- "esprima": "2.7.3"
+ "argparse": "^1.0.2",
+ "esprima": "^2.6.0"
}
},
"resolve": {
@@ -1212,8 +1212,8 @@
"integrity": "sha1-ypuOX1hKR9cBEm4IBknJVGsRNOA=",
"dev": true,
"requires": {
- "coffee-script": "1.6.3",
- "jasmine-node": "1.14.5"
+ "coffee-script": "~1.6.2",
+ "jasmine-node": "^1.14.5"
},
"dependencies": {
"coffee-script": {
@@ -1230,9 +1230,9 @@
"integrity": "sha512-33QZYBYjv2Ph3H2ygqXHn/o0ttfptw1f9QciOTgvzhzUeiPrnvzMNUApTPtw22T6zgReE5FZ1RR58U2wnK/l+w==",
"dev": true,
"requires": {
- "cross-spawn": "3.0.1",
- "jsdoc": "3.5.5",
- "marked": "0.3.17"
+ "cross-spawn": "^3.0.1",
+ "jsdoc": "~3.5.5",
+ "marked": "^0.3.9"
},
"dependencies": {
"cross-spawn": {
@@ -1241,8 +1241,8 @@
"integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
"dev": true,
"requires": {
- "lru-cache": "4.1.2",
- "which": "1.3.0"
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
}
}
}
@@ -1259,11 +1259,11 @@
"integrity": "sha512-rwuyqNKlI0IPz0DvxzJjcEiQEBaBNVeb1LFoZKxSmHLETFUwhwUrqOsPIxURTKSwNZHZ4ht1YLBYmVU0YZAzHQ==",
"dev": true,
"requires": {
- "colors": "1.1.2",
- "grunt-legacy-log-utils": "1.0.0",
- "hooker": "0.2.3",
- "lodash": "4.17.5",
- "underscore.string": "3.3.4"
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~1.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.5",
+ "underscore.string": "~3.3.4"
}
},
"grunt-legacy-log-utils": {
@@ -1272,8 +1272,8 @@
"integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "lodash": "4.3.0"
+ "chalk": "~1.1.1",
+ "lodash": "~4.3.0"
},
"dependencies": {
"chalk": {
@@ -1282,11 +1282,11 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
}
},
"lodash": {
@@ -1301,7 +1301,7 @@
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
}
}
@@ -1312,13 +1312,13 @@
"integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=",
"dev": true,
"requires": {
- "async": "1.5.2",
- "exit": "0.1.2",
- "getobject": "0.1.0",
- "hooker": "0.2.3",
- "lodash": "4.3.0",
- "underscore.string": "3.2.3",
- "which": "1.2.14"
+ "async": "~1.5.2",
+ "exit": "~0.1.1",
+ "getobject": "~0.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.3.0",
+ "underscore.string": "~3.2.3",
+ "which": "~1.2.1"
},
"dependencies": {
"lodash": {
@@ -1339,7 +1339,7 @@
"integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
"dev": true,
"requires": {
- "isexe": "2.0.0"
+ "isexe": "^2.0.0"
}
}
}
@@ -1350,8 +1350,8 @@
"integrity": "sha512-zQGEsi3d+ViPPi7/4jcj78afKKAKiAA5n61pknQYi25Ugik+aNOuRmiOkmb8mN2CeG8YxT+YdT1H1Q7B/eNkoQ==",
"dev": true,
"requires": {
- "hooker": "0.2.3",
- "mkdirp": "0.5.1"
+ "hooker": "^0.2.3",
+ "mkdirp": "^0.5.0"
}
},
"har-schema": {
@@ -1364,8 +1364,8 @@
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"requires": {
- "ajv": "5.5.2",
- "har-schema": "2.0.0"
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
}
},
"has": {
@@ -1374,7 +1374,7 @@
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
"dev": true,
"requires": {
- "function-bind": "1.1.1"
+ "function-bind": "^1.0.2"
}
},
"has-ansi": {
@@ -1383,7 +1383,7 @@
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"has-flag": {
@@ -1397,10 +1397,10 @@
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"requires": {
- "boom": "4.3.1",
- "cryptiles": "3.1.2",
- "hoek": "4.2.1",
- "sntp": "2.1.0"
+ "boom": "4.x.x",
+ "cryptiles": "3.x.x",
+ "hoek": "4.x.x",
+ "sntp": "2.x.x"
}
},
"he": {
@@ -1431,9 +1431,9 @@
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.14.1"
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"iconv-lite": {
@@ -1460,7 +1460,7 @@
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
"dev": true,
"requires": {
- "repeating": "2.0.1"
+ "repeating": "^2.0.0"
}
},
"inflight": {
@@ -1469,8 +1469,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -1485,20 +1485,20 @@
"integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
"dev": true,
"requires": {
- "ansi-escapes": "3.0.0",
- "chalk": "2.3.2",
- "cli-cursor": "2.1.0",
- "cli-width": "2.2.0",
- "external-editor": "2.1.0",
- "figures": "2.0.0",
- "lodash": "4.17.5",
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
"mute-stream": "0.0.7",
- "run-async": "2.3.0",
- "rx-lite": "4.0.8",
- "rx-lite-aggregates": "4.0.8",
- "string-width": "2.1.1",
- "strip-ansi": "4.0.0",
- "through": "2.3.8"
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
}
},
"is-arrayish": {
@@ -1513,7 +1513,7 @@
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true,
"requires": {
- "builtin-modules": "1.1.1"
+ "builtin-modules": "^1.0.0"
}
},
"is-finite": {
@@ -1522,7 +1522,7 @@
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-fullwidth-code-point": {
@@ -1543,7 +1543,7 @@
"integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
"dev": true,
"requires": {
- "is-path-inside": "1.0.1"
+ "is-path-inside": "^1.0.0"
}
},
"is-path-inside": {
@@ -1552,7 +1552,7 @@
"integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
"requires": {
- "path-is-inside": "1.0.2"
+ "path-is-inside": "^1.0.1"
}
},
"is-promise": {
@@ -1601,7 +1601,7 @@
"integrity": "sha1-uHrlUeNZ0orVIXdl6u9sB7dj9sg=",
"dev": true,
"requires": {
- "growl": "1.7.0"
+ "growl": "~1.7.0"
}
},
"jasmine-node": {
@@ -1610,14 +1610,14 @@
"integrity": "sha1-GOg5e4VpJO53ADZmw3MbWupQw50=",
"dev": true,
"requires": {
- "coffee-script": "1.12.7",
- "gaze": "0.3.4",
- "jasmine-growl-reporter": "0.0.3",
- "jasmine-reporters": "1.0.2",
- "mkdirp": "0.3.5",
- "requirejs": "2.3.5",
- "underscore": "1.8.3",
- "walkdir": "0.0.12"
+ "coffee-script": ">=1.0.1",
+ "gaze": "~0.3.2",
+ "jasmine-growl-reporter": "~0.0.2",
+ "jasmine-reporters": "~1.0.0",
+ "mkdirp": "~0.3.5",
+ "requirejs": ">=0.27.1",
+ "underscore": ">= 1.3.1",
+ "walkdir": ">= 0.0.1"
},
"dependencies": {
"coffee-script": {
@@ -1640,7 +1640,7 @@
"integrity": "sha1-q2E+1Zd9x0h+hbPBL2qOqNsq3jE=",
"dev": true,
"requires": {
- "mkdirp": "0.3.5"
+ "mkdirp": "~0.3.5"
},
"dependencies": {
"mkdirp": {
@@ -1663,8 +1663,8 @@
"integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
"dev": true,
"requires": {
- "argparse": "1.0.10",
- "esprima": "4.0.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
"js2xmlparser": {
@@ -1673,7 +1673,7 @@
"integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
"dev": true,
"requires": {
- "xmlcreate": "1.0.2"
+ "xmlcreate": "^1.0.1"
}
},
"jsbn": {
@@ -1689,17 +1689,17 @@
"dev": true,
"requires": {
"babylon": "7.0.0-beta.19",
- "bluebird": "3.5.1",
- "catharsis": "0.8.9",
- "escape-string-regexp": "1.0.5",
- "js2xmlparser": "3.0.0",
- "klaw": "2.0.0",
- "marked": "0.3.17",
- "mkdirp": "0.5.1",
- "requizzle": "0.2.1",
- "strip-json-comments": "2.0.1",
+ "bluebird": "~3.5.0",
+ "catharsis": "~0.8.9",
+ "escape-string-regexp": "~1.0.5",
+ "js2xmlparser": "~3.0.0",
+ "klaw": "~2.0.0",
+ "marked": "~0.3.6",
+ "mkdirp": "~0.5.1",
+ "requizzle": "~0.2.1",
+ "strip-json-comments": "~2.0.1",
"taffydb": "2.6.2",
- "underscore": "1.8.3"
+ "underscore": "~1.8.3"
}
},
"json-schema": {
@@ -1728,16 +1728,16 @@
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.0.tgz",
"integrity": "sha512-1Wxh8ADP3cNyPl8tZ95WtraHXCAyXupgc0AhMHjU9er98BV+UcKsO7OJUjfhIu0Uba9A40n1oSx8dbJYrm+EoQ==",
"requires": {
- "jws": "3.1.4",
- "lodash.includes": "4.3.0",
- "lodash.isboolean": "3.0.3",
- "lodash.isinteger": "4.0.4",
- "lodash.isnumber": "3.0.3",
- "lodash.isplainobject": "4.0.6",
- "lodash.isstring": "4.0.1",
- "lodash.once": "4.1.1",
- "ms": "2.1.1",
- "xtend": "4.0.1"
+ "jws": "^3.1.4",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "xtend": "^4.0.1"
}
},
"jsprim": {
@@ -1759,7 +1759,7 @@
"base64url": "2.0.0",
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.9",
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.0.1"
}
},
"jws": {
@@ -1767,9 +1767,9 @@
"resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz",
"integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=",
"requires": {
- "base64url": "2.0.0",
- "jwa": "1.1.5",
- "safe-buffer": "5.1.1"
+ "base64url": "^2.0.0",
+ "jwa": "^1.1.4",
+ "safe-buffer": "^5.0.1"
}
},
"klaw": {
@@ -1778,7 +1778,7 @@
"integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11"
+ "graceful-fs": "^4.1.9"
}
},
"levn": {
@@ -1787,8 +1787,8 @@
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2"
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
}
},
"load-json-file": {
@@ -1797,10 +1797,10 @@
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "strip-bom": "3.0.0"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
}
},
"locate-path": {
@@ -1809,8 +1809,8 @@
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
- "p-locate": "2.0.0",
- "path-exists": "3.0.0"
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
},
"dependencies": {
"path-exists": {
@@ -1867,8 +1867,8 @@
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"dev": true,
"requires": {
- "currently-unhandled": "0.4.1",
- "signal-exit": "3.0.2"
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
}
},
"lru-cache": {
@@ -1877,8 +1877,8 @@
"integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
"dev": true,
"requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
}
},
"map-obj": {
@@ -1899,16 +1899,16 @@
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true,
"requires": {
- "camelcase-keys": "2.1.0",
- "decamelize": "1.2.0",
- "loud-rejection": "1.6.0",
- "map-obj": "1.0.1",
- "minimist": "1.2.0",
- "normalize-package-data": "2.4.0",
- "object-assign": "4.1.1",
- "read-pkg-up": "1.0.1",
- "redent": "1.0.0",
- "trim-newlines": "1.0.0"
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
},
"dependencies": {
"load-json-file": {
@@ -1917,11 +1917,11 @@
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "strip-bom": "2.0.0"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
}
},
"minimist": {
@@ -1936,9 +1936,9 @@
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"read-pkg": {
@@ -1947,9 +1947,9 @@
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"requires": {
- "load-json-file": "1.1.0",
- "normalize-package-data": "2.4.0",
- "path-type": "1.1.0"
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
}
},
"read-pkg-up": {
@@ -1958,8 +1958,8 @@
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dev": true,
"requires": {
- "find-up": "1.1.2",
- "read-pkg": "1.1.0"
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
}
},
"strip-bom": {
@@ -1968,7 +1968,7 @@
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
"dev": true,
"requires": {
- "is-utf8": "0.2.1"
+ "is-utf8": "^0.2.0"
}
}
}
@@ -1983,7 +1983,7 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"requires": {
- "mime-db": "1.33.0"
+ "mime-db": "~1.33.0"
}
},
"mimic-fn": {
@@ -1998,7 +1998,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
@@ -2052,7 +2052,7 @@
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "^2.0.0"
}
}
}
@@ -2080,15 +2080,15 @@
"integrity": "sha512-4XYNSJDJ/PvNoH+cCRWcGOOFsq3jtZdNTRIlPIBA7CopGWJO56m5OaPEjjJ3WddxNYfe5HL9sQQAtMt8oyR9AA==",
"dev": true,
"requires": {
- "chai": "4.1.2",
- "debug": "3.1.0",
- "deep-equal": "1.0.1",
- "json-stringify-safe": "5.0.1",
- "lodash": "4.17.5",
- "mkdirp": "0.5.1",
- "propagate": "1.0.0",
- "qs": "6.5.1",
- "semver": "5.5.0"
+ "chai": "^4.1.2",
+ "debug": "^3.1.0",
+ "deep-equal": "^1.0.0",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.17.5",
+ "mkdirp": "^0.5.0",
+ "propagate": "^1.0.0",
+ "qs": "^6.5.1",
+ "semver": "^5.5.0"
}
},
"nonce": {
@@ -2102,7 +2102,7 @@
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
- "abbrev": "1.1.1"
+ "abbrev": "1"
}
},
"normalize-package-data": {
@@ -2111,10 +2111,10 @@
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": {
- "hosted-git-info": "2.6.0",
- "is-builtin-module": "1.0.0",
- "semver": "5.5.0",
- "validate-npm-package-license": "3.0.3"
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
"number-is-nan": {
@@ -2140,7 +2140,7 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"onetime": {
@@ -2149,7 +2149,7 @@
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
"dev": true,
"requires": {
- "mimic-fn": "1.2.0"
+ "mimic-fn": "^1.0.0"
}
},
"opentok-token": {
@@ -2157,9 +2157,9 @@
"resolved": "https://registry.npmjs.org/opentok-token/-/opentok-token-1.1.0.tgz",
"integrity": "sha1-8BdOSV5q9LJVos/+nDTUgCPokq8=",
"requires": {
- "lodash": "3.10.1",
- "nonce": "1.0.4",
- "unix-timestamp": "0.1.2"
+ "lodash": "^3.2.0",
+ "nonce": "^1.0.3",
+ "unix-timestamp": "^0.1.2"
},
"dependencies": {
"lodash": {
@@ -2175,12 +2175,12 @@
"integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
"dev": true,
"requires": {
- "deep-is": "0.1.3",
- "fast-levenshtein": "2.0.6",
- "levn": "0.3.0",
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2",
- "wordwrap": "1.0.0"
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
}
},
"os-tmpdir": {
@@ -2195,7 +2195,7 @@
"integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
"dev": true,
"requires": {
- "p-try": "1.0.0"
+ "p-try": "^1.0.0"
}
},
"p-locate": {
@@ -2204,7 +2204,7 @@
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
- "p-limit": "1.2.0"
+ "p-limit": "^1.1.0"
}
},
"p-try": {
@@ -2219,7 +2219,7 @@
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": {
- "error-ex": "1.3.1"
+ "error-ex": "^1.2.0"
}
},
"path-exists": {
@@ -2228,7 +2228,7 @@
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"dev": true,
"requires": {
- "pinkie-promise": "2.0.1"
+ "pinkie-promise": "^2.0.0"
}
},
"path-is-absolute": {
@@ -2255,7 +2255,7 @@
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
"dev": true,
"requires": {
- "pify": "2.3.0"
+ "pify": "^2.0.0"
}
},
"pathval": {
@@ -2287,7 +2287,7 @@
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
- "pinkie": "2.0.4"
+ "pinkie": "^2.0.0"
}
},
"pkg-dir": {
@@ -2296,7 +2296,7 @@
"integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
"dev": true,
"requires": {
- "find-up": "1.1.2"
+ "find-up": "^1.0.0"
}
},
"pluralize": {
@@ -2351,9 +2351,9 @@
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
"dev": true,
"requires": {
- "load-json-file": "2.0.0",
- "normalize-package-data": "2.4.0",
- "path-type": "2.0.0"
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
}
},
"read-pkg-up": {
@@ -2362,8 +2362,8 @@
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
"dev": true,
"requires": {
- "find-up": "2.1.0",
- "read-pkg": "2.0.0"
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
},
"dependencies": {
"find-up": {
@@ -2372,7 +2372,7 @@
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
- "locate-path": "2.0.0"
+ "locate-path": "^2.0.0"
}
}
}
@@ -2383,13 +2383,13 @@
"integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3",
+ "util-deprecate": "~1.0.1"
}
},
"redent": {
@@ -2398,8 +2398,8 @@
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"dev": true,
"requires": {
- "indent-string": "2.1.0",
- "strip-indent": "1.0.1"
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
}
},
"repeating": {
@@ -2408,7 +2408,7 @@
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
- "is-finite": "1.0.2"
+ "is-finite": "^1.0.0"
}
},
"request": {
@@ -2416,28 +2416,28 @@
"resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
"integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
"requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.6.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.3.2",
- "har-validator": "5.0.3",
- "hawk": "6.0.2",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.18",
- "oauth-sign": "0.8.2",
- "performance-now": "2.1.0",
- "qs": "6.5.1",
- "safe-buffer": "5.1.1",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.4",
- "tunnel-agent": "0.6.0",
- "uuid": "3.2.1"
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "hawk": "~6.0.2",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "stringstream": "~0.0.5",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
}
},
"require-uncached": {
@@ -2446,8 +2446,8 @@
"integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
"dev": true,
"requires": {
- "caller-path": "0.1.0",
- "resolve-from": "1.0.1"
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
}
},
"requirejs": {
@@ -2462,7 +2462,7 @@
"integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
"dev": true,
"requires": {
- "underscore": "1.6.0"
+ "underscore": "~1.6.0"
},
"dependencies": {
"underscore": {
@@ -2479,7 +2479,7 @@
"integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "path-parse": "^1.0.5"
}
},
"resolve-from": {
@@ -2494,8 +2494,8 @@
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
"dev": true,
"requires": {
- "onetime": "2.0.1",
- "signal-exit": "3.0.2"
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
}
},
"rimraf": {
@@ -2504,7 +2504,7 @@
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
- "glob": "7.1.2"
+ "glob": "^7.0.5"
}
},
"run-async": {
@@ -2513,7 +2513,7 @@
"integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
"dev": true,
"requires": {
- "is-promise": "2.1.0"
+ "is-promise": "^2.1.0"
}
},
"rx-lite": {
@@ -2528,7 +2528,7 @@
"integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
"dev": true,
"requires": {
- "rx-lite": "4.0.8"
+ "rx-lite": "*"
}
},
"safe-buffer": {
@@ -2548,7 +2548,7 @@
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
- "shebang-regex": "1.0.0"
+ "shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
@@ -2575,7 +2575,7 @@
"integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "2.0.0"
+ "is-fullwidth-code-point": "^2.0.0"
}
},
"sntp": {
@@ -2583,7 +2583,7 @@
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"requires": {
- "hoek": "4.2.1"
+ "hoek": "4.x.x"
}
},
"spdx-correct": {
@@ -2592,8 +2592,8 @@
"integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"dev": true,
"requires": {
- "spdx-expression-parse": "3.0.0",
- "spdx-license-ids": "3.0.0"
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
@@ -2608,8 +2608,8 @@
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"dev": true,
"requires": {
- "spdx-exceptions": "2.1.0",
- "spdx-license-ids": "3.0.0"
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
@@ -2629,14 +2629,14 @@
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
"integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
}
},
"string-width": {
@@ -2645,8 +2645,8 @@
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
}
},
"string_decoder": {
@@ -2655,7 +2655,7 @@
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "~5.1.0"
}
},
"stringstream": {
@@ -2669,7 +2669,7 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "3.0.0"
+ "ansi-regex": "^3.0.0"
},
"dependencies": {
"ansi-regex": {
@@ -2692,7 +2692,7 @@
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"dev": true,
"requires": {
- "get-stdin": "4.0.1"
+ "get-stdin": "^4.0.1"
}
},
"strip-json-comments": {
@@ -2713,12 +2713,12 @@
"integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
"dev": true,
"requires": {
- "ajv": "5.5.2",
- "ajv-keywords": "2.1.1",
- "chalk": "2.3.2",
- "lodash": "4.17.5",
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
"slice-ansi": "1.0.0",
- "string-width": "2.1.1"
+ "string-width": "^2.1.1"
}
},
"taffydb": {
@@ -2745,7 +2745,7 @@
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
- "os-tmpdir": "1.0.2"
+ "os-tmpdir": "~1.0.2"
}
},
"tough-cookie": {
@@ -2753,7 +2753,7 @@
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"requires": {
- "punycode": "1.4.1"
+ "punycode": "^1.4.1"
}
},
"trim-newlines": {
@@ -2767,7 +2767,7 @@
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
@@ -2782,7 +2782,7 @@
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2"
+ "prelude-ls": "~1.1.2"
}
},
"type-detect": {
@@ -2826,8 +2826,8 @@
"integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=",
"dev": true,
"requires": {
- "sprintf-js": "1.0.3",
- "util-deprecate": "1.0.2"
+ "sprintf-js": "^1.0.3",
+ "util-deprecate": "^1.0.2"
}
},
"unix-timestamp": {
@@ -2852,8 +2852,8 @@
"integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
"dev": true,
"requires": {
- "spdx-correct": "3.0.0",
- "spdx-expression-parse": "3.0.0"
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
}
},
"verror": {
@@ -2861,9 +2861,9 @@
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
- "assert-plus": "1.0.0",
+ "assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
+ "extsprintf": "^1.2.0"
}
},
"walkdir": {
@@ -2878,7 +2878,7 @@
"integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
"dev": true,
"requires": {
- "isexe": "2.0.0"
+ "isexe": "^2.0.0"
}
},
"wordwrap": {
@@ -2899,7 +2899,7 @@
"integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
"dev": true,
"requires": {
- "mkdirp": "0.5.1"
+ "mkdirp": "^0.5.1"
}
},
"xmlcreate": {
diff --git a/package.json b/package.json
index c8eb8a95..ee67e725 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "opentok",
"description": "OpenTok server-side SDK",
- "version": "2.8.1",
+ "version": "2.9.0",
"homepage": "https://github.com/opentok/opentok-node",
"repository": {
"type": "git",
@@ -35,6 +35,10 @@
{
"name": "Jeff Swartz",
"email": "swartz@tokbox.com"
+ },
+ {
+ "name": "Manik Sachdeva",
+ "url": "http://maniksach.dev"
}
],
"main": "lib/opentok.js",
diff --git a/test/opentok-test.js b/test/opentok-test.js
index d02f4b3a..0297f6af 100644
--- a/test/opentok-test.js
+++ b/test/opentok-test.js
@@ -51,8 +51,23 @@ var mockBroadcastObject = {
status: 'stopped'
};
+var mockListBroadcastsObject = {
+ count: 1,
+ items: [{
+ id: 'fooId',
+ sessionId: 'fooSessionId',
+ projectId: 1234,
+ createdAt: 1537477584724,
+ updatedAt: 1537477584725,
+ broadcastUrls: { hls: 'hlsUrl' },
+ maxDuration: 7200,
+ resolution: '1280x720',
+ event: 'broadcast',
+ status: 'stopped'
+ }]
+};
+
function validateBroadcastObject(broadcast, status) {
- expect(broadcast.id).to.equal('fooId');
expect(broadcast.id).to.equal('fooId');
expect(broadcast.sessionId).to.equal('fooSessionId');
expect(broadcast.projectId).to.equal(1234);
@@ -65,6 +80,17 @@ function validateBroadcastObject(broadcast, status) {
expect(typeof broadcast.stop).to.equal('function');
}
+function validateListBroadcastsObject(broadcastListObject) {
+ var broadcast;
+ expect(broadcastListObject).to.be.an('array');
+ broadcast = broadcastListObject[0];
+ validateBroadcastObject(broadcast);
+}
+
+function validateTotalCount(totalCount) {
+ expect(totalCount).to.be.a('number');
+}
+
function mockStreamRequest(sessId, streamId, status) {
var body;
if (!status) {
@@ -100,6 +126,22 @@ function mockListStreamsRequest(sessId, status) {
.reply(status || 200, body);
}
+function mockListBroadcastsRequest(query, status) {
+ var body;
+ if (status) {
+ body = JSON.stringify({
+ message: 'error message'
+ });
+ }
+ else {
+ body = JSON.stringify(mockListBroadcastsObject);
+ }
+ nock('https://api.opentok.com')
+ .get('/v2/project/APIKEY/broadcast')
+ .query(query)
+ .reply(status || 200, body);
+}
+
nock.disableNetConnect();
if (recording) {
@@ -1149,6 +1191,7 @@ describe('#dial', function () {
expect(sipCall.id).to.equal('CONFERENCEID');
expect(sipCall.streamId).to.equal('STREAMID');
expect(sipCall.connectionId).to.equal('CONNECTIONID');
+ scope.done();
done();
}
);
@@ -1389,6 +1432,59 @@ describe('#getBroadcast', function () {
});
});
+describe('#listBroadcasts', function () {
+ var opentok = new OpenTok('APIKEY', 'APISECRET');
+ var options = {
+ sessionId: 'SESSIONID'
+ };
+ afterEach(function () {
+ nock.cleanAll();
+ });
+ it('succeeds given valid parameters', function (done) {
+ mockListBroadcastsRequest();
+ opentok.listBroadcasts(function (err, broadcastList, totalCount) {
+ expect(err).to.be.null;
+ validateListBroadcastsObject(broadcastList);
+ validateTotalCount(totalCount);
+ done();
+ });
+ });
+
+ it('succeeds given options as valid parameters', function (done) {
+ mockListBroadcastsRequest({
+ sessionId: 'SESSIONID'
+ });
+ opentok.listBroadcasts(options, function (err, broadcastList, totalCount) {
+ expect(err).to.be.null;
+ validateListBroadcastsObject(broadcastList);
+ validateTotalCount(totalCount);
+ done();
+ });
+ });
+
+ it('results in error if no callback method provided', function (done) {
+ mockListBroadcastsRequest();
+ try {
+ opentok.listBroadcasts();
+ }
+ catch (err) {
+ expect(err.message).to.equal('No callback given to listBroadcasts');
+ done();
+ }
+ });
+
+ it('results in error a response other than 200', function (done) {
+ mockListBroadcastsRequest(400);
+ opentok.listBroadcasts(options, function (err, broadcastList, totalCount) {
+ expect(err).not.to.be.null;
+ expect(broadcastList).to.be.undefined;
+ expect(totalCount).to.be.undefined;
+ done();
+ });
+ });
+});
+
+
describe('#setBroadcastLayout', function () {
var opentok = new OpenTok('APIKEY', 'APISECRET');
var BROADCAST_ID = 'BROADCAST_ID';