From 607ccf5a8efcef96a18c5e0afb76f0573b232b3d Mon Sep 17 00:00:00 2001 From: Hans-Peter Herzog Date: Wed, 12 Dec 2018 14:13:48 +0100 Subject: [PATCH] TT#48636 JanusClient: Create new major release 4.x.x (Revert) This reverts commit ecd28bc Change-Id: I321a3ea7485e24e927d0e1808a9e3c7ce27f0f8a --- npm-shrinkwrap.json | 232 +++++++++++++++++++---------- package.json | 15 +- src/client/index.js | 85 ++++------- src/client/response.js | 4 +- src/errors.js | 4 +- src/mock/janus-server.js | 12 +- src/mock/websocket.js | 8 +- src/plugins/handle.js | 27 ++-- src/plugins/plugin.js | 8 +- src/plugins/videoroom/handle.js | 49 +++--- src/plugins/videoroom/index.js | 97 ++++-------- src/plugins/videoroom/listener.js | 5 +- src/plugins/videoroom/publisher.js | 7 +- src/session.js | 19 ++- src/transaction.js | 20 +-- t/Dockerfile | 2 +- test/plugin-handle-spec.js | 4 +- 17 files changed, 293 insertions(+), 305 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 418359e..23b5715 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,16 +1,11 @@ { "name": "janus-videoroom-client", - "version": "4.0.0", + "version": "3.2.6", "dependencies": { "assertion-error": { - "version": "1.1.0", - "from": "assertion-error@>=1.1.0 <2.0.0", - "resolved": "https://npm-registry.sipwise.com/assertion-error/-/assertion-error-1.1.0.tgz" - }, - "async-limiter": { - "version": "1.0.0", - "from": "async-limiter@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz" + "version": "1.0.2", + "from": "assertion-error@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz" }, "balanced-match": { "version": "1.0.0", @@ -18,32 +13,32 @@ "resolved": "https://npm-registry.sipwise.com/balanced-match/-/balanced-match-1.0.0.tgz", "dev": true }, + "bluebird": { + "version": "3.4.1", + "from": "bluebird@3.4.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.1.tgz" + }, "brace-expansion": { - "version": "1.1.11", + "version": "1.1.8", "from": "brace-expansion@>=1.1.7 <2.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "resolved": "https://npm-registry.sipwise.com/brace-expansion/-/brace-expansion-1.1.8.tgz", "dev": true }, "browser-stdout": { - "version": "1.3.1", - "from": "browser-stdout@1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "version": "1.3.0", + "from": "browser-stdout@1.3.0", + "resolved": "https://npm-registry.sipwise.com/browser-stdout/-/browser-stdout-1.3.0.tgz", "dev": true }, "chai": { - "version": "4.2.0", - "from": "chai@latest", - "resolved": "https://npm-registry.sipwise.com/chai/-/chai-4.2.0.tgz" - }, - "check-error": { - "version": "1.0.2", - "from": "check-error@>=1.0.2 <2.0.0", - "resolved": "https://npm-registry.sipwise.com/check-error/-/check-error-1.0.2.tgz" + "version": "3.5.0", + "from": "chai@3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz" }, "commander": { - "version": "2.15.1", - "from": "commander@2.15.1", - "resolved": "https://npm-registry.sipwise.com/commander/-/commander-2.15.1.tgz", + "version": "2.9.0", + "from": "commander@2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "dev": true }, "concat-map": { @@ -59,18 +54,25 @@ }, "debug-logger": { "version": "0.4.1", - "from": "debug-logger@latest", + "from": "debug-logger@0.4.1", "resolved": "https://registry.npmjs.org/debug-logger/-/debug-logger-0.4.1.tgz" }, "deep-eql": { - "version": "3.0.1", - "from": "deep-eql@>=3.0.1 <4.0.0", - "resolved": "https://npm-registry.sipwise.com/deep-eql/-/deep-eql-3.0.1.tgz" + "version": "0.1.3", + "from": "deep-eql@>=0.1.3 <0.2.0", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "dependencies": { + "type-detect": { + "version": "0.1.1", + "from": "type-detect@0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz" + } + } }, "diff": { - "version": "3.5.0", - "from": "diff@3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "version": "1.4.0", + "from": "diff@1.4.0", + "resolved": "https://npm-registry.sipwise.com/diff/-/diff-1.4.0.tgz", "dev": true }, "escape-string-regexp": { @@ -85,33 +87,28 @@ "resolved": "https://npm-registry.sipwise.com/fs.realpath/-/fs.realpath-1.0.0.tgz", "dev": true }, - "get-func-name": { - "version": "2.0.0", - "from": "get-func-name@>=2.0.0 <3.0.0", - "resolved": "https://npm-registry.sipwise.com/get-func-name/-/get-func-name-2.0.0.tgz" - }, "glob": { - "version": "7.1.2", - "from": "glob@7.1.2", - "resolved": "https://npm-registry.sipwise.com/glob/-/glob-7.1.2.tgz", + "version": "7.0.5", + "from": "glob@7.0.5", + "resolved": "https://npm-registry.sipwise.com/glob/-/glob-7.0.5.tgz", "dev": true }, - "growl": { - "version": "1.10.5", - "from": "growl@1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "graceful-readlink": { + "version": "1.0.1", + "from": "graceful-readlink@>=1.0.0", + "resolved": "https://npm-registry.sipwise.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "dev": true }, - "has-flag": { - "version": "3.0.0", - "from": "has-flag@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "growl": { + "version": "1.9.2", + "from": "growl@1.9.2", + "resolved": "https://npm-registry.sipwise.com/growl/-/growl-1.9.2.tgz", "dev": true }, - "he": { - "version": "1.1.1", - "from": "he@1.1.1", - "resolved": "https://npm-registry.sipwise.com/he/-/he-1.1.1.tgz", + "has-flag": { + "version": "1.0.0", + "from": "has-flag@>=1.0.0 <2.0.0", + "resolved": "https://npm-registry.sipwise.com/has-flag/-/has-flag-1.0.0.tgz", "dev": true }, "inflight": { @@ -126,14 +123,74 @@ "resolved": "https://npm-registry.sipwise.com/inherits/-/inherits-2.0.3.tgz", "dev": true }, + "json3": { + "version": "3.3.2", + "from": "json3@3.3.2", + "resolved": "https://npm-registry.sipwise.com/json3/-/json3-3.3.2.tgz", + "dev": true + }, "lodash": { - "version": "4.17.11", - "from": "lodash@latest", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz" + "version": "4.14.1", + "from": "lodash@4.14.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.14.1.tgz" + }, + "lodash._baseassign": { + "version": "3.2.0", + "from": "lodash._baseassign@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "from": "lodash._basecopy@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "from": "lodash._basecreate@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "from": "lodash._getnative@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "from": "lodash._isiterateecall@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "from": "lodash.create@3.1.1", + "resolved": "https://npm-registry.sipwise.com/lodash.create/-/lodash.create-3.1.1.tgz", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "from": "lodash.isarguments@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "from": "lodash.isarray@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "from": "lodash.keys@>=3.0.0 <4.0.0", + "resolved": "https://npm-registry.sipwise.com/lodash.keys/-/lodash.keys-3.1.2.tgz", + "dev": true }, "minimatch": { "version": "3.0.4", - "from": "minimatch@3.0.4", + "from": "minimatch@>=3.0.2 <4.0.0", "resolved": "https://npm-registry.sipwise.com/minimatch/-/minimatch-3.0.4.tgz", "dev": true }, @@ -150,15 +207,21 @@ "dev": true }, "mocha": { - "version": "5.2.0", - "from": "mocha@5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "version": "3.0.1", + "from": "mocha@3.0.1", + "resolved": "https://npm-registry.sipwise.com/mocha/-/mocha-3.0.1.tgz", "dev": true, "dependencies": { "debug": { - "version": "3.1.0", - "from": "debug@3.1.0", - "resolved": "https://npm-registry.sipwise.com/debug/-/debug-3.1.0.tgz", + "version": "2.2.0", + "from": "debug@2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "dev": true + }, + "ms": { + "version": "0.7.1", + "from": "ms@0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", "dev": true } } @@ -174,37 +237,42 @@ "resolved": "https://npm-registry.sipwise.com/once/-/once-1.4.0.tgz", "dev": true }, + "options": { + "version": "0.0.6", + "from": "options@>=0.0.5", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz" + }, "path-is-absolute": { "version": "1.0.1", "from": "path-is-absolute@>=1.0.0 <2.0.0", "resolved": "https://npm-registry.sipwise.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "dev": true }, - "pathval": { - "version": "1.1.0", - "from": "pathval@>=1.1.0 <2.0.0", - "resolved": "https://npm-registry.sipwise.com/pathval/-/pathval-1.1.0.tgz" - }, "supports-color": { - "version": "5.4.0", - "from": "supports-color@5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "version": "3.1.2", + "from": "supports-color@3.1.2", + "resolved": "https://npm-registry.sipwise.com/supports-color/-/supports-color-3.1.2.tgz", "dev": true }, "type-detect": { - "version": "4.0.8", - "from": "type-detect@>=4.0.5 <5.0.0", - "resolved": "https://npm-registry.sipwise.com/type-detect/-/type-detect-4.0.8.tgz" + "version": "1.0.0", + "from": "type-detect@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz" + }, + "ultron": { + "version": "1.0.2", + "from": "ultron@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" }, "uuid": { - "version": "3.3.2", - "from": "uuid@latest", - "resolved": "https://npm-registry.sipwise.com/uuid/-/uuid-3.3.2.tgz" + "version": "2.0.2", + "from": "uuid@2.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz" }, "validator": { - "version": "10.9.0", - "from": "validator@latest", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.9.0.tgz" + "version": "6.1.0", + "from": "validator@6.1.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-6.1.0.tgz" }, "wrappy": { "version": "1.0.2", @@ -213,9 +281,9 @@ "dev": true }, "ws": { - "version": "6.1.2", - "from": "ws@latest", - "resolved": "https://npm-registry.sipwise.com/ws/-/ws-6.1.2.tgz" + "version": "1.1.1", + "from": "ws@1.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz" } } } diff --git a/package.json b/package.json index 8d5c2bf..146aa42 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "janus-videoroom-client", - "version": "4.0.0", + "version": "3.2.8", "main": "src/janus.js", "scripts": { "test": "mocha -R spec --full-trace test/*-spec.js" @@ -16,14 +16,15 @@ "url": "https://github.com/sipwise/janus-client.git" }, "dependencies": { - "chai": "4.2.0", + "bluebird": "3.4.1", + "chai": "3.5.0", "debug-logger": "0.4.1", - "lodash": "4.17.11", - "uuid": "3.3.2", - "validator": "10.9.0", - "ws": "6.1.2" + "lodash": "4.14.1", + "uuid": "2.0.2", + "validator": "6.1.0", + "ws": "1.1.1" }, "devDependencies": { - "mocha": "5.2.0" + "mocha": "3.0.1" } } diff --git a/src/client/index.js b/src/client/index.js index 4d05bf6..157d4d6 100644 --- a/src/client/index.js +++ b/src/client/index.js @@ -1,22 +1,23 @@ 'use strict'; -const _ = require('lodash'); -const WebSocket = require('ws'); -const EventEmitter = require('events').EventEmitter; -const Transaction = require('../transaction').Transaction; -const logger = require('debug-logger')('janus:client'); -const ClientResponse = require('./response').ClientResponse; -const Session = require('../session').Session; -const ResponseError = require('../errors').ResponseError; -const assert = require('chai').assert; -const JanusEvents = require('../constants').JanusEvents; - -const ConnectionState = { +var _ = require('lodash'); +var WebSocket = require('ws'); +var EventEmitter = require('events').EventEmitter; +var Promise = require('bluebird'); +var Transaction = require('../transaction').Transaction; +var logger = require('debug-logger')('janus:client'); +var ClientResponse = require('./response').ClientResponse; +var Session = require('../session').Session; +var ResponseError = require('../errors').ResponseError; +var assert = require('chai').assert; +var JanusEvents = require('../constants').JanusEvents; + +var ConnectionState = { connected: 'connected', disconnected: 'disconnected' }; -const ClientEvent = { +var ClientEvent = { connected: 'connected', disconnected: 'disconnected', object: 'object', @@ -25,14 +26,13 @@ const ClientEvent = { event: 'event' }; -const WebSocketEvent = { +var WebSocketEvent = { open: 'open', message: 'message', error: 'error', close: 'close' }; - /** * @class */ @@ -109,8 +109,8 @@ class Client { } close(options) { - let connect = _.get(options, 'connect', false); - let closeHandler = ()=>{ + var connect = _.get(options, 'connect', false); + var closeHandler = ()=>{ this.stopConnectionTimeout(); if(this.webSocket !== null) { this.webSocket.removeAllListeners(WebSocketEvent.open); @@ -140,7 +140,7 @@ class Client { message(message) { this.startConnectionTimeout(); - let parsedMessage = message; + var parsedMessage = message; try { if(_.isString(message)) { parsedMessage = JSON.parse(message); @@ -183,9 +183,9 @@ class Client { } dispatchObject(obj) { - let transactionId = _.get(obj, 'transaction', null); - let transaction; - let response; + var transactionId = _.get(obj, 'transaction', null); + var transaction; + var response; if(transactionId !== null && this.transactions[transactionId] instanceof Transaction) { transaction = this.transactions[obj.transaction]; response = new ClientResponse(transaction.getRequest(), obj); @@ -198,7 +198,7 @@ class Client { } delegateEvent(event) { - let sessionId = _.get(event, 'session_id', null); + var sessionId = _.get(event, 'session_id', null); if(sessionId !== null && this.hasSession(sessionId)) { switch(event.janus) { case JanusEvents.timeout: @@ -238,15 +238,15 @@ class Client { if(this.apiSecret !== null) { options.request.apisecret = this.apiSecret; } - let transaction = new Transaction(options); + var transaction = new Transaction(options); this.transactions[transaction.getId()] = transaction; return transaction; } request(req, options) { return new Promise((resolve, reject)=>{ - let ack = _.get(options, 'ack', false); - let transaction = this.createTransaction({ + var ack = _.get(options, 'ack', false); + var transaction = this.createTransaction({ request: req, client: this, ack: ack @@ -279,7 +279,7 @@ class Client { return new Promise((resolve, reject)=>{ this.request({ janus: 'create' }).then((res)=>{ if(res.isSuccess()) { - let session = new Session(res.getResponse().data.id, this); + var session = new Session(res.getResponse().data.id, this); this.addSession(session); this.logger.info('Created session=%s',session.getId()); session.onKeepAlive((result)=>{ @@ -303,40 +303,9 @@ class Client { }); } - claimSession(sessionId) { - return new Promise((resolve, reject)=>{ - this.request({ - janus: 'claim', - session_id: sessionId - }).then((res)=>{ - if(res.isSuccess()) { - let session = new Session(res.getResponse().session_id, this); - this.addSession(session); - this.logger.info('Claimed session=%s',session.getId()); - session.onKeepAlive((result)=>{ - if(result) { - this.logger.debug('KeepAlive session=%s', session.getId()); - } else { - this.logger.warn('KeepAlive failed session=%s', session.getId()); - } - }); - session.onTimeout(()=>{ - this.logger.info('Timeout session=%s',session.getId()); - this.deleteSession(session.getId()); - }); - resolve(session); - } else { - reject(new ResponseError(res)); - } - }).catch((err)=>{ - reject(err); - }); - }); - } - destroySession(id) { return new Promise((resolve, reject)=>{ - this.request({ + this.request({ janus: 'destroy', session_id: id }).then((res)=>{ diff --git a/src/client/response.js b/src/client/response.js index 3fe9962..03c1b67 100644 --- a/src/client/response.js +++ b/src/client/response.js @@ -1,7 +1,7 @@ 'use strict'; -const assert = require('chai').assert; -const _ = require('lodash'); +var assert = require('chai').assert; +var _ = require('lodash'); /** * @class diff --git a/src/errors.js b/src/errors.js index e7dff7c..f14f106 100644 --- a/src/errors.js +++ b/src/errors.js @@ -1,7 +1,7 @@ 'use strict'; -const assert = require('chai').assert; -const _ = require('lodash'); +var assert = require('chai').assert; +var _ = require('lodash'); /** * @class diff --git a/src/mock/janus-server.js b/src/mock/janus-server.js index e69f660..8cbbd7e 100644 --- a/src/mock/janus-server.js +++ b/src/mock/janus-server.js @@ -1,10 +1,10 @@ 'use strict'; -const _ = require('lodash'); -const http = require('http'); -const WebSocketServer = require('ws').Server; -const JanusResponse = require('../mock/janus-response'); -const logger = require('debug-logger')('mock:janus-server'); +var _ = require('lodash'); +var http = require('http'); +var WebSocketServer = require('ws').Server; +var JanusResponse = require('../mock/janus-response'); +var logger = require('debug-logger')('mock:janus-server'); /** * @class @@ -88,7 +88,7 @@ class JanusServer { this.send(webSocket, JanusResponse.handle.trickle(object)); break; case 'message': - let plugin = this.handlesById[object.handle_id]; + var plugin = this.handlesById[object.handle_id]; switch(plugin) { case 'janus.plugin.videoroom': this.dispatchVideoRoom(webSocket, object); diff --git a/src/mock/websocket.js b/src/mock/websocket.js index bdd8ef9..3bf3847 100644 --- a/src/mock/websocket.js +++ b/src/mock/websocket.js @@ -1,8 +1,8 @@ 'use strict'; -const _ = require('lodash'); -const EventEmitter = require('events').EventEmitter; -const JanusResponse = require('../mock/janus-response'); +var _ = require('lodash'); +var EventEmitter = require('events').EventEmitter; +var JanusResponse = require('../mock/janus-response'); const Plugins = { janus_plugin_videoroom: 'janus.plugin.videoroom' @@ -41,7 +41,7 @@ class WebSocketMock { send(message, cb) { console.log(message); - let parsedMessage = message; + var parsedMessage = message; if(_.isString(message)) { parsedMessage = JSON.parse(message); } diff --git a/src/plugins/handle.js b/src/plugins/handle.js index 5b3ed9c..c94aa7d 100644 --- a/src/plugins/handle.js +++ b/src/plugins/handle.js @@ -1,11 +1,12 @@ 'use strict'; -const _ = require('lodash'); -const EventEmitter = require('events').EventEmitter; -const JanusEvents = require('../constants').JanusEvents; -const logger = require('debug-logger')('janus:handle'); -const PluginError = require('../errors').PluginError; -const PluginResponse = require('../client/response').PluginResponse; +var _ = require('lodash'); +var Promise = require('bluebird'); +var EventEmitter = require('events').EventEmitter; +var JanusEvents = require('../constants').JanusEvents; +var logger = require('debug-logger')('janus:handle'); +var PluginError = require('../errors').PluginError; +var PluginResponse = require('../client/response').PluginResponse; const ConnectionState = { connected: 'connected', @@ -19,7 +20,6 @@ class PluginHandle { constructor(options) { this.id = options.id; - this.opaqueId = options.opaqueId; this.plugin = options.plugin; this.emitter = new EventEmitter(); this.connectionState = ConnectionState.disconnected; @@ -75,13 +75,6 @@ class PluginHandle { }); } - trickles(candidates) { - return this.request({ - janus: 'trickle', - candidates: candidates - }); - } - trickleCompleted() { return this.request({ janus: 'trickle', @@ -136,8 +129,8 @@ class PluginHandle { requestMessage(body, options) { return new Promise((resolve, reject)=>{ options = options || {}; - let jsep = _.get(body, 'jsep', null); - let req = { + var jsep = _.get(body, 'jsep', null); + var req = { janus: 'message', body: body }; @@ -146,7 +139,7 @@ class PluginHandle { delete body.jsep; } this.request(req, options).then((res)=>{ - let pluginResponse = new PluginResponse(res.getRequest(), res.getResponse()); + var pluginResponse = new PluginResponse(res.getRequest(), res.getResponse()); if(pluginResponse.isError()) { reject(new PluginError(res, this)); } else { diff --git a/src/plugins/plugin.js b/src/plugins/plugin.js index 0e7ce51..721f5b0 100644 --- a/src/plugins/plugin.js +++ b/src/plugins/plugin.js @@ -1,6 +1,7 @@ 'use strict'; -const _ = require('lodash'); +var _ = require('lodash'); +var Promise = require('bluebird'); class Plugin { @@ -44,10 +45,9 @@ class Plugin { this.handles.delete(id); } - createHandle(options) { + createHandle() { return new Promise((resolve, reject)=>{ - this.getSession().createPluginHandle(this.getFullName(), options) - .then((handleId)=>{ + this.getSession().createPluginHandle(this.getFullName()).then((handleId)=>{ resolve(handleId); }).catch((err)=>{ reject(err); diff --git a/src/plugins/videoroom/handle.js b/src/plugins/videoroom/handle.js index f2564b2..b16f7e6 100644 --- a/src/plugins/videoroom/handle.js +++ b/src/plugins/videoroom/handle.js @@ -1,13 +1,14 @@ 'use strict'; -const _ = require('lodash'); -const assert = require('chai').assert; -const PluginHandle = require('../handle').PluginHandle; -const logger = require('debug-logger')('janus:videoroom:handle'); +var _ = require('lodash'); +var assert = require('chai').assert; +var Promise = require('bluebird'); +var PluginHandle = require('../handle').PluginHandle; +var logger = require('debug-logger')('janus:videoroom:handle'); -const ParticipantType = { +var ParticipantType = { publisher: 'publisher', - listener: 'subscriber' + listener: 'listener' }; /** @@ -22,7 +23,7 @@ class VideoRoomHandle extends PluginHandle { create(options) { return new Promise((resolve, reject)=>{ options = options || {}; - let message = _.merge({ + var message = _.merge({ request: 'create' }, options); this.requestMessage(message).then((res)=>{ @@ -39,7 +40,7 @@ class VideoRoomHandle extends PluginHandle { destroy(options) { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); - let message = _.merge({ + var message = _.merge({ request: 'destroy' }, options); this.requestMessage(message).then((res)=>{ @@ -55,7 +56,7 @@ class VideoRoomHandle extends PluginHandle { exists(options) { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); - let message = _.merge({ + var message = _.merge({ request: 'exists' }, options); this.requestMessage(message).then((res)=>{ @@ -87,7 +88,7 @@ class VideoRoomHandle extends PluginHandle { listParticipants(options) { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); - let message = _.merge({ + var message = _.merge({ request: 'listparticipants' }, options); this.requestMessage(message).then((res)=>{ @@ -105,7 +106,7 @@ class VideoRoomHandle extends PluginHandle { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); assert.property(options, 'ptype'); - let message = _.merge({ + var message = _.merge({ request: 'join' }, options); this.requestMessage(message, { @@ -125,7 +126,7 @@ class VideoRoomHandle extends PluginHandle { joinPublisher(options) { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); - let joinOptions = _.merge({ + var joinOptions = _.merge({ ptype: ParticipantType.publisher }, options); this.join(joinOptions, { @@ -142,7 +143,7 @@ class VideoRoomHandle extends PluginHandle { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); assert.property(options, 'feed'); - let joinOptions = _.merge({ + var joinOptions = _.merge({ ptype: ParticipantType.listener }, options); this.join(joinOptions, { @@ -159,7 +160,7 @@ class VideoRoomHandle extends PluginHandle { return new Promise((resolve, reject)=>{ options.audio = _.get(options, 'audio', true); options.video = _.get(options, 'video', true); - let message = _.merge({ + var message = _.merge({ request: 'configure' }, options); this.requestMessage(message, { @@ -180,7 +181,7 @@ class VideoRoomHandle extends PluginHandle { assert.property(options, 'jsep'); options.audio = _.get(options, 'audio', true); options.video = _.get(options, 'video', true); - let message = _.merge({ + var message = _.merge({ request: 'joinandconfigure', ptype: 'publisher' }, options); @@ -202,7 +203,7 @@ class VideoRoomHandle extends PluginHandle { publish(options) { return new Promise((resolve, reject)=>{ assert.property(options, 'jsep'); - let message = _.merge({ + var message = _.merge({ request: 'publish' }, options); this.requestMessage(message, { @@ -219,7 +220,7 @@ class VideoRoomHandle extends PluginHandle { unpublish(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'unpublish' }, options); this.requestMessage(message, { @@ -238,7 +239,7 @@ class VideoRoomHandle extends PluginHandle { return new Promise((resolve, reject)=>{ assert.property(options, 'room'); assert.property(options, 'jsep'); - let message = _.merge({ + var message = _.merge({ request: 'start' }, options); this.requestMessage(message, { @@ -260,7 +261,7 @@ class VideoRoomHandle extends PluginHandle { */ pause(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'pause' }, options); this.requestMessage(message, { @@ -277,7 +278,7 @@ class VideoRoomHandle extends PluginHandle { switch(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'switch' }, options); this.requestMessage(message, { @@ -299,7 +300,7 @@ class VideoRoomHandle extends PluginHandle { */ stop(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'stop' }, options); this.requestMessage(message, { @@ -316,7 +317,7 @@ class VideoRoomHandle extends PluginHandle { add(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'add' }, options); this.requestMessage(message, { @@ -333,7 +334,7 @@ class VideoRoomHandle extends PluginHandle { remove(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'remove' }, options); this.requestMessage(message, { @@ -350,7 +351,7 @@ class VideoRoomHandle extends PluginHandle { leave(options) { return new Promise((resolve, reject)=>{ - let message = _.merge({ + var message = _.merge({ request: 'leave' }, options); this.requestMessage(message, { diff --git a/src/plugins/videoroom/index.js b/src/plugins/videoroom/index.js index 77ceb15..2863b2e 100644 --- a/src/plugins/videoroom/index.js +++ b/src/plugins/videoroom/index.js @@ -1,13 +1,13 @@ 'use strict'; -const _ = require('lodash'); -const assert = require('chai').assert; -const Plugin = require('../plugin').Plugin; -const VideoRoomHandle = require('./handle').VideoRoomHandle; -const VideoRoomPublisher = require('./publisher').VideoRoomPublisher; -const VideoRoomListener = require('./listener').VideoRoomListener; - -const AudioCodec = { +var _ = require('lodash'); +var assert = require('chai').assert; +var Plugin = require('../plugin').Plugin; +var VideoRoomHandle = require('./handle').VideoRoomHandle; +var VideoRoomPublisher = require('./publisher').VideoRoomPublisher; +var VideoRoomListener = require('./listener').VideoRoomListener; + +var AudioCodec = { opus: 'opus', isac32: 'isac32', isac16: 'isac16', @@ -16,7 +16,7 @@ const AudioCodec = { g722: 'g722' }; -const VideoCodec = { +var VideoCodec = { vp8: 'vp8', vp9: 'vp9', h264: 'h264' @@ -32,11 +32,10 @@ class VideoRoomPlugin extends Plugin { this.$defaultHandle = null; } - defaultHandle(options) { + defaultHandle() { return new Promise((resolve, reject)=>{ if(this.$defaultHandle === null) { - this.createVideoRoomHandle(options) - .then((handle)=>{ + this.createVideoRoomHandle().then((handle)=>{ this.$defaultHandle = handle; resolve(this.$defaultHandle); }).catch((err)=>{ @@ -48,10 +47,9 @@ class VideoRoomPlugin extends Plugin { }); } - createVideoRoomHandle(options) { + createVideoRoomHandle() { return new Promise((resolve, reject)=>{ - this.createHandle(options) - .then((id)=>{ + this.createHandle().then((id)=>{ this.addHandle(new VideoRoomHandle({ id: id, plugin: this @@ -63,28 +61,13 @@ class VideoRoomPlugin extends Plugin { }); } - attachVideoRoomHandle(handleId, opaqueId) { - return new Promise((resolve)=>{ - this.addHandle(new VideoRoomHandle({ - id: handleId, - plugin: this, - opaqueId: opaqueId - })); - let defaultHandle = this.getHandle(handleId); - this.$defaultHandle = defaultHandle; - resolve(defaultHandle); - }); - } - - createPublisherHandle(room, opaqueId) { - let options = { opaqueId: opaqueId }; + createPublisherHandle(room) { return new Promise((resolve, reject)=>{ - this.createHandle(options).then((id)=>{ + this.createHandle().then((id)=>{ this.addHandle(new VideoRoomPublisher({ id: id, plugin: this, - room: room, - opaqueId: opaqueId + room: room })); resolve(this.getHandle(id)); }).catch((err)=>{ @@ -93,29 +76,14 @@ class VideoRoomPlugin extends Plugin { }); } - attachPublisherHandle(handleId, room, opaqueId) { - return new Promise((resolve)=>{ - this.addHandle(new VideoRoomPublisher({ - id: handleId, - plugin: this, - room: room, - opaqueId: opaqueId - })); - resolve(this.getHandle(handleId)); - }); - } - - createListenerHandle(room, feed, opaqueId) { - let options = { opaqueId: opaqueId }; + createListenerHandle(room, feed) { return new Promise((resolve, reject)=>{ - this.createHandle(options) - .then((id)=>{ + this.createHandle().then((id)=>{ this.addHandle(new VideoRoomListener({ id: id, plugin: this, room: room, - feed: feed, - opaqueId: opaqueId + feed: feed })); resolve(this.getHandle(id)); }).catch((err)=>{ @@ -124,24 +92,11 @@ class VideoRoomPlugin extends Plugin { }); } - attachListenerHandle(handleId, room, feed, opaqueId) { - return new Promise((resolve)=>{ - this.addHandle(new VideoRoomListener({ - id: handleId, - plugin: this, - room: room, - feed: feed, - opaqueId: opaqueId - })); - resolve(this.getHandle(handleId)); - }); - } - - publishFeed(room, offer, opaqueId) { + publishFeed(room, offer) { return new Promise((resolve, reject)=>{ - let handle = null; + var handle = null; Promise.resolve().then(()=>{ - return this.createPublisherHandle(room, opaqueId); + return this.createPublisherHandle(room); }).then((createdHandle)=>{ handle = createdHandle; return handle.createAnswer(offer); @@ -153,11 +108,11 @@ class VideoRoomPlugin extends Plugin { }); } - listenFeed(room, feed, opaqueId) { + listenFeed(room, feed) { return new Promise((resolve, reject)=>{ - let handle = null; + var handle = null; Promise.resolve().then(()=>{ - return this.createListenerHandle(room, feed, opaqueId); + return this.createListenerHandle(room, feed); }).then((createdHandle)=>{ handle = createdHandle; return handle.createOffer(); @@ -177,7 +132,7 @@ class VideoRoomPlugin extends Plugin { getFeeds(room) { return new Promise((resolve, reject)=>{ assert.isNumber(room, 'Missing room id'); - let feeds = []; + var feeds = []; Promise.resolve().then(()=>{ return this.defaultHandle(); }).then((handle)=>{ diff --git a/src/plugins/videoroom/listener.js b/src/plugins/videoroom/listener.js index 4f0c02b..d0d949e 100644 --- a/src/plugins/videoroom/listener.js +++ b/src/plugins/videoroom/listener.js @@ -1,7 +1,8 @@ 'use strict'; -const logger = require('debug-logger')('janus:videoroom:listener'); -const VideoRoomHandle = require('./handle').VideoRoomHandle; +var Promise = require('bluebird'); +var logger = require('debug-logger')('janus:videoroom:listener'); +var VideoRoomHandle = require('./handle').VideoRoomHandle; /** * @class diff --git a/src/plugins/videoroom/publisher.js b/src/plugins/videoroom/publisher.js index 04c06e3..eaf399c 100644 --- a/src/plugins/videoroom/publisher.js +++ b/src/plugins/videoroom/publisher.js @@ -1,8 +1,9 @@ 'use strict'; -const _ = require('lodash'); -const logger = require('debug-logger')('janus:videoroom:publisher'); -const VideoRoomHandle = require('./handle').VideoRoomHandle; +var _ = require('lodash'); +var Promise = require('bluebird'); +var logger = require('debug-logger')('janus:videoroom:publisher'); +var VideoRoomHandle = require('./handle').VideoRoomHandle; /** * @class diff --git a/src/session.js b/src/session.js index e685a0b..5467ebd 100644 --- a/src/session.js +++ b/src/session.js @@ -1,11 +1,12 @@ 'use strict'; -const _ = require('lodash'); -const EventEmitter = require('events').EventEmitter; -const logger = require('debug-logger')('janus:session'); -const VideoRoomPlugin = require('./plugins/videoroom').VideoRoomPlugin; +var _ = require('lodash'); +var Promise = require('bluebird'); +var EventEmitter = require('events').EventEmitter; +var logger = require('debug-logger')('janus:session'); +var VideoRoomPlugin = require('./plugins/videoroom').VideoRoomPlugin; -const State = { +var State = { alive: 'alive', dying: 'dying', dead: 'dead' @@ -67,15 +68,13 @@ class Session { return this.janus.request(obj, options); } - createPluginHandle(plugin, options) { - let opaqueId = options ? options.opaqueId : undefined; + createPluginHandle(plugin) { return new Promise((resolve, reject)=>{ this.request({ janus: 'attach', - plugin: plugin, - opaque_id: opaqueId + plugin: plugin }).then((res)=>{ - let handleId = _.get(res.getResponse(), 'data.id', null); + var handleId = _.get(res.getResponse(), 'data.id', null); if(handleId !== null) { logger.info('Created handle plugin=%s handle=%s', plugin, handleId); resolve(handleId); diff --git a/src/transaction.js b/src/transaction.js index 42eb7ed..64f7ce5 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -1,14 +1,14 @@ 'use strict'; -const path = require('path'); -const _ = require('lodash'); -const createId = require('uuid'); -const EventEmitter = require('events').EventEmitter; -const ResponseError = require('./errors').ResponseError; -const assert = require('chai').assert; -const ClientResponse = require('./client/response').ClientResponse; - -const State = { +var path = require('path'); +var _ = require('lodash'); +var createId = require('uuid'); +var EventEmitter = require('events').EventEmitter; +var ResponseError = require('./errors').ResponseError; +var assert = require('chai').assert; +var ClientResponse = require('./client/response').ClientResponse; + +var State = { new: 'new', started: 'started', sent: 'sent', @@ -16,7 +16,7 @@ const State = { ended: 'ended' }; -const Event = { +var Event = { response: 'response', ack: 'ack', end: 'end', diff --git a/t/Dockerfile b/t/Dockerfile index 6363792..72e358e 100644 --- a/t/Dockerfile +++ b/t/Dockerfile @@ -5,7 +5,7 @@ FROM docker.mgm.sipwise.com/sipwise-stretch:latest # is updated with the current date. It will force refresh of all # of the base images and things like `apt-get update` won't be using # old cached versions when the Dockerfile is built. -ENV REFRESHED_AT 2018-12-12 +ENV REFRESHED_AT 2017-09-25 # files that get-code generates COPY t/sources.list.d/builddeps.list /etc/apt/sources.list.d/ diff --git a/test/plugin-handle-spec.js b/test/plugin-handle-spec.js index 685c8e3..8f9347e 100644 --- a/test/plugin-handle-spec.js +++ b/test/plugin-handle-spec.js @@ -160,8 +160,8 @@ describe('PluginHandle', function(){ assert.equal(res.response.getData().videoroom, 'attached'); assert.equal(res.response.getData().room, 123); assert.isNumber(res.response.getData().id); - assert.nestedProperty(res.response.getResponse(), 'jsep.type'); - assert.nestedProperty(res.response.getResponse(), 'jsep.sdp'); + assert.deepProperty(res.response.getResponse(), 'jsep.type'); + assert.deepProperty(res.response.getResponse(), 'jsep.sdp'); done(); }).catch((err)=>{ done(err);