From 4a1b4617b76592f94192b00408d835206fc5f313 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Sat, 27 Jan 2018 19:39:49 +0100 Subject: [PATCH] openvidu-node-client updated to recording --- openvidu-node-client/.gitignore | 2 + openvidu-node-client/lib/OpenVidu.d.ts | 5 +- openvidu-node-client/lib/OpenVidu.js | 12 +++-- openvidu-node-client/lib/OpenVidu.js.map | 2 +- openvidu-node-client/lib/OpenViduRole.d.ts | 6 +-- openvidu-node-client/lib/OpenViduRole.js | 6 +-- openvidu-node-client/lib/OpenViduRole.js.map | 2 +- openvidu-node-client/lib/Session.d.ts | 5 +- openvidu-node-client/lib/Session.js | 24 ++++++++-- openvidu-node-client/lib/Session.js.map | 2 +- openvidu-node-client/lib/TokenOptions.js | 6 +-- openvidu-node-client/lib/TokenOptions.js.map | 2 +- openvidu-node-client/lib/index.d.ts | 4 ++ openvidu-node-client/lib/index.js | 4 ++ openvidu-node-client/lib/index.js.map | 2 +- openvidu-node-client/package.json | 12 ++--- openvidu-node-client/src/ArchiveLayout.ts | 6 +++ openvidu-node-client/src/ArchiveMode.ts | 4 ++ openvidu-node-client/src/MediaMode.ts | 4 ++ openvidu-node-client/src/OpenVidu.ts | 15 ++++-- openvidu-node-client/src/OpenViduRole.ts | 6 +-- openvidu-node-client/src/Session.ts | 41 +++++++++++----- openvidu-node-client/src/SessionProperties.ts | 48 +++++++++++++++++++ openvidu-node-client/src/TokenOptions.ts | 9 ++-- openvidu-node-client/src/index.ts | 6 ++- 25 files changed, 182 insertions(+), 53 deletions(-) create mode 100644 openvidu-node-client/src/ArchiveLayout.ts create mode 100644 openvidu-node-client/src/ArchiveMode.ts create mode 100644 openvidu-node-client/src/MediaMode.ts create mode 100644 openvidu-node-client/src/SessionProperties.ts diff --git a/openvidu-node-client/.gitignore b/openvidu-node-client/.gitignore index f845322e..7b49351b 100644 --- a/openvidu-node-client/.gitignore +++ b/openvidu-node-client/.gitignore @@ -41,3 +41,5 @@ testem.log .DS_Store Thumbs.db *.editorconfig + +/lib/ diff --git a/openvidu-node-client/lib/OpenVidu.d.ts b/openvidu-node-client/lib/OpenVidu.d.ts index 7d72cb75..ba1a5c4c 100644 --- a/openvidu-node-client/lib/OpenVidu.d.ts +++ b/openvidu-node-client/lib/OpenVidu.d.ts @@ -1,7 +1,10 @@ import { Session } from "./Session"; +import { SessionProperties } from "./SessionProperties"; export declare class OpenVidu { private urlOpenViduServer; private secret; constructor(urlOpenViduServer: string, secret: string); - createSession(): Session; + createSession(properties?: SessionProperties): Session; + startArchive(sessionId: string): void; + stopArchive(sessionId: string): void; } diff --git a/openvidu-node-client/lib/OpenVidu.js b/openvidu-node-client/lib/OpenVidu.js index 8a61fb6f..6fe6f0aa 100644 --- a/openvidu-node-client/lib/OpenVidu.js +++ b/openvidu-node-client/lib/OpenVidu.js @@ -1,13 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Session_1 = require("./Session"); -var OpenVidu = (function () { +var OpenVidu = /** @class */ (function () { function OpenVidu(urlOpenViduServer, secret) { this.urlOpenViduServer = urlOpenViduServer; this.secret = secret; } - OpenVidu.prototype.createSession = function () { - return new Session_1.Session(this.urlOpenViduServer, this.secret); + OpenVidu.prototype.createSession = function (properties) { + return new Session_1.Session(this.urlOpenViduServer, this.secret, properties); + }; + OpenVidu.prototype.startArchive = function (sessionId) { + // TODO: REST POST to start recording in OpenVidu Server + }; + OpenVidu.prototype.stopArchive = function (sessionId) { + // TODO: REST POST to end recording in OpenVidu Server }; return OpenVidu; }()); diff --git a/openvidu-node-client/lib/OpenVidu.js.map b/openvidu-node-client/lib/OpenVidu.js.map index d8c31617..d1bd3c2c 100644 --- a/openvidu-node-client/lib/OpenVidu.js.map +++ b/openvidu-node-client/lib/OpenVidu.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":";;AAAA,qCAAoC;AAEpC;IAEE,kBAAoB,iBAAyB,EAAU,MAAc;QAAjD,sBAAiB,GAAjB,iBAAiB,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAElE,gCAAa,GAApB;QACI,MAAM,CAAC,IAAI,iBAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEH,eAAC;AAAD,CAAC,AARD,IAQC;AARY,4BAAQ"} \ No newline at end of file +{"version":3,"file":"OpenVidu.js","sourceRoot":"","sources":["../src/OpenVidu.ts"],"names":[],"mappings":";;AAAA,qCAAoC;AAGpC;IAEE,kBAAoB,iBAAyB,EAAU,MAAc;QAAjD,sBAAiB,GAAjB,iBAAiB,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;IAEnE,gCAAa,GAApB,UAAqB,UAA8B;QACjD,MAAM,CAAC,IAAI,iBAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAEM,+BAAY,GAAnB,UAAoB,SAAiB;QACnC,wDAAwD;IAC1D,CAAC;IAEM,8BAAW,GAAlB,UAAmB,SAAiB;QAClC,sDAAsD;IACxD,CAAC;IAEH,eAAC;AAAD,CAAC,AAhBD,IAgBC;AAhBY,4BAAQ"} \ No newline at end of file diff --git a/openvidu-node-client/lib/OpenViduRole.d.ts b/openvidu-node-client/lib/OpenViduRole.d.ts index d3e92d58..77cc2851 100644 --- a/openvidu-node-client/lib/OpenViduRole.d.ts +++ b/openvidu-node-client/lib/OpenViduRole.d.ts @@ -1,5 +1,5 @@ export declare enum OpenViduRole { - SUBSCRIBER, - PUBLISHER, - MODERATOR, + SUBSCRIBER = "SUBSCRIBER", + PUBLISHER = "PUBLISHER", + MODERATOR = "MODERATOR", } diff --git a/openvidu-node-client/lib/OpenViduRole.js b/openvidu-node-client/lib/OpenViduRole.js index 709ac303..1c0a4465 100644 --- a/openvidu-node-client/lib/OpenViduRole.js +++ b/openvidu-node-client/lib/OpenViduRole.js @@ -2,8 +2,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); var OpenViduRole; (function (OpenViduRole) { - OpenViduRole[OpenViduRole["SUBSCRIBER"] = 'SUBSCRIBER'] = "SUBSCRIBER"; - OpenViduRole[OpenViduRole["PUBLISHER"] = 'PUBLISHER'] = "PUBLISHER"; - OpenViduRole[OpenViduRole["MODERATOR"] = 'MODERATOR'] = "MODERATOR"; + OpenViduRole["SUBSCRIBER"] = "SUBSCRIBER"; + OpenViduRole["PUBLISHER"] = "PUBLISHER"; + OpenViduRole["MODERATOR"] = "MODERATOR"; // SUBSCRIBER + PUBLIHSER permissions + can force unpublish() and disconnect() over a third-party stream or user })(OpenViduRole = exports.OpenViduRole || (exports.OpenViduRole = {})); //# sourceMappingURL=OpenViduRole.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/OpenViduRole.js.map b/openvidu-node-client/lib/OpenViduRole.js.map index 0515959c..c9115765 100644 --- a/openvidu-node-client/lib/OpenViduRole.js.map +++ b/openvidu-node-client/lib/OpenViduRole.js.map @@ -1 +1 @@ -{"version":3,"file":"OpenViduRole.js","sourceRoot":"","sources":["../src/OpenViduRole.ts"],"names":[],"mappings":";;AAAA,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,0CAAkB,YAAY,gBAAA,CAAA;IAC9B,yCAAiB,WAAW,eAAA,CAAA;IAC5B,yCAAiB,WAAW,eAAA,CAAA;AAC7B,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"} \ No newline at end of file +{"version":3,"file":"OpenViduRole.js","sourceRoot":"","sources":["../src/OpenViduRole.ts"],"names":[],"mappings":";;AAAA,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,yCAAyB,CAAA;IACzB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA,CAAE,gHAAgH;AAC1I,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"} \ No newline at end of file diff --git a/openvidu-node-client/lib/Session.d.ts b/openvidu-node-client/lib/Session.d.ts index 51faaceb..24330ac9 100644 --- a/openvidu-node-client/lib/Session.d.ts +++ b/openvidu-node-client/lib/Session.d.ts @@ -1,16 +1,19 @@ import { TokenOptions } from './TokenOptions'; +import { SessionProperties } from './SessionProperties'; export declare class Session { private urlOpenViduServer; private secret; private sessionIdURL; private tokenURL; private sessionId; + private properties; private hostname; private port; - constructor(urlOpenViduServer: string, secret: string); + constructor(urlOpenViduServer: string, secret: string, properties?: SessionProperties); getSessionId(callback: Function): void; generateToken(callback: Function): any; generateToken(tokenOptions: TokenOptions, callback: Function): any; + getProperties(): SessionProperties; private getBasicAuth(); private setHostnameAndPort(); } diff --git a/openvidu-node-client/lib/Session.js b/openvidu-node-client/lib/Session.js index 8631339d..7146d2fc 100644 --- a/openvidu-node-client/lib/Session.js +++ b/openvidu-node-client/lib/Session.js @@ -1,14 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var OpenViduRole_1 = require("./OpenViduRole"); +var SessionProperties_1 = require("./SessionProperties"); var https = require('https'); -var Session = (function () { - function Session(urlOpenViduServer, secret) { +var Session = /** @class */ (function () { + function Session(urlOpenViduServer, secret, properties) { this.urlOpenViduServer = urlOpenViduServer; this.secret = secret; this.sessionIdURL = '/api/sessions'; this.tokenURL = '/api/tokens'; this.sessionId = ""; + if (properties == null) { + this.properties = new SessionProperties_1.SessionProperties.Builder().build(); + } + else { + this.properties = properties; + } this.setHostnameAndPort(); } Session.prototype.getSessionId = function (callback) { @@ -17,13 +24,20 @@ var Session = (function () { callback(this.sessionId); return; } + var requestBody = JSON.stringify({ + 'archiveLayout': this.properties.archiveLayout(), + 'archiveMode': this.properties.archiveMode(), + 'mediaMode': this.properties.mediaMode() + }); var options = { hostname: this.hostname, port: this.port, path: this.sessionIdURL, method: 'POST', headers: { - 'Authorization': this.getBasicAuth() + 'Authorization': this.getBasicAuth(), + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(requestBody) } }; var req = https.request(options, function (res) { @@ -42,6 +56,7 @@ var Session = (function () { req.on('error', function (e) { console.error(e); }); + req.write(requestBody); req.end(); }; Session.prototype.generateToken = function (tokenOptions, callback) { @@ -90,6 +105,9 @@ var Session = (function () { req.write(requestBody); req.end(); }; + Session.prototype.getProperties = function () { + return this.properties; + }; Session.prototype.getBasicAuth = function () { return 'Basic ' + (new Buffer('OPENVIDUAPP:' + this.secret).toString('base64')); }; diff --git a/openvidu-node-client/lib/Session.js.map b/openvidu-node-client/lib/Session.js.map index 0e3c1193..d693eb67 100644 --- a/openvidu-node-client/lib/Session.js.map +++ b/openvidu-node-client/lib/Session.js.map @@ -1 +1 @@ -{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/openvidu-node-client/lib/TokenOptions.js b/openvidu-node-client/lib/TokenOptions.js index 0c5bc9d1..bdbb9d56 100644 --- a/openvidu-node-client/lib/TokenOptions.js +++ b/openvidu-node-client/lib/TokenOptions.js @@ -1,11 +1,9 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var TokenOptions = (function () { +var TokenOptions = /** @class */ (function () { function TokenOptions(data, role) { this.data = data; this.role = role; - this.data = data; - this.role = role; } TokenOptions.prototype.getData = function () { return this.data; @@ -17,7 +15,7 @@ var TokenOptions = (function () { }()); exports.TokenOptions = TokenOptions; (function (TokenOptions) { - var Builder = (function () { + var Builder = /** @class */ (function () { function Builder() { } Builder.prototype.build = function () { diff --git a/openvidu-node-client/lib/TokenOptions.js.map b/openvidu-node-client/lib/TokenOptions.js.map index 8ad14946..f74a5c0f 100644 --- a/openvidu-node-client/lib/TokenOptions.js.map +++ b/openvidu-node-client/lib/TokenOptions.js.map @@ -1 +1 @@ -{"version":3,"file":"TokenOptions.js","sourceRoot":"","sources":["../src/TokenOptions.ts"],"names":[],"mappings":";;AAEA;IAEI,sBAAoB,IAAY,EAAU,IAAkB;QAAxC,SAAI,GAAJ,IAAI,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAc;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,8BAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,8BAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IACL,mBAAC;AAAD,CAAC,AAdD,IAcC;AAdY,oCAAY;AAgBzB,WAAiB,YAAY;IACzB;QAAA;QAmBA,CAAC;QAdG,uBAAK,GAAL;YACI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAY;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAkB;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAEL,cAAC;IAAD,CAAC,AAnBD,IAmBC;IAnBY,oBAAO,UAmBnB,CAAA;IAAA,CAAC;AACN,CAAC,EArBgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAqB5B;AArCY,oCAAY"} \ No newline at end of file +{"version":3,"file":"TokenOptions.js","sourceRoot":"","sources":["../src/TokenOptions.ts"],"names":[],"mappings":";;AAEA;IAEI,sBAAoB,IAAY,EAAU,IAAkB;QAAxC,SAAI,GAAJ,IAAI,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAc;IAAI,CAAC;IAEjE,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,8BAAO,GAAP;QACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IACL,mBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,oCAAY;AAazB,WAAiB,YAAY;IACzB;QAAA;QAmBA,CAAC;QAdG,uBAAK,GAAL;YACI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAY;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,IAAkB;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAEL,cAAC;IAAD,CAAC,AAnBD,IAmBC;IAnBY,oBAAO,UAmBnB,CAAA;IAAA,CAAC;AACN,CAAC,EArBgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAqB5B;AAlCY,oCAAY"} \ No newline at end of file diff --git a/openvidu-node-client/lib/index.d.ts b/openvidu-node-client/lib/index.d.ts index 62891d7f..eb195f07 100644 --- a/openvidu-node-client/lib/index.d.ts +++ b/openvidu-node-client/lib/index.d.ts @@ -2,3 +2,7 @@ export * from './OpenVidu'; export * from './OpenViduRole'; export * from './Session'; export * from './TokenOptions'; +export * from './MediaMode'; +export * from './ArchiveLayout'; +export * from './ArchiveMode'; +export * from './SessionProperties'; diff --git a/openvidu-node-client/lib/index.js b/openvidu-node-client/lib/index.js index 19c30def..f98bdce0 100644 --- a/openvidu-node-client/lib/index.js +++ b/openvidu-node-client/lib/index.js @@ -7,4 +7,8 @@ __export(require("./OpenVidu")); __export(require("./OpenViduRole")); __export(require("./Session")); __export(require("./TokenOptions")); +__export(require("./MediaMode")); +__export(require("./ArchiveLayout")); +__export(require("./ArchiveMode")); +__export(require("./SessionProperties")); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/openvidu-node-client/lib/index.js.map b/openvidu-node-client/lib/index.js.map index 6ad1647a..39de48b5 100644 --- a/openvidu-node-client/lib/index.js.map +++ b/openvidu-node-client/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,oCAA+B"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gCAA2B;AAC3B,oCAA+B;AAC/B,+BAA0B;AAC1B,oCAA+B;AAC/B,iCAA4B;AAC5B,qCAAgC;AAChC,mCAA8B;AAC9B,yCAAoC"} \ No newline at end of file diff --git a/openvidu-node-client/package.json b/openvidu-node-client/package.json index 33fbfc7d..55870be8 100644 --- a/openvidu-node-client/package.json +++ b/openvidu-node-client/package.json @@ -15,10 +15,10 @@ }, "dependencies": {}, "devDependencies": { - "@types/node": "^6.0.78", - "codelyzer": "~2.0.0", - "ts-node": "~2.0.0", - "tslint": "~4.5.0", - "typescript": "2.3.4" + "@types/node": "9.4.0", + "codelyzer": "4.1.0", + "ts-node": "4.1.0", + "tslint": "5.9.1", + "typescript": "2.6.2" } -} +} \ No newline at end of file diff --git a/openvidu-node-client/src/ArchiveLayout.ts b/openvidu-node-client/src/ArchiveLayout.ts new file mode 100644 index 00000000..78ec4278 --- /dev/null +++ b/openvidu-node-client/src/ArchiveLayout.ts @@ -0,0 +1,6 @@ +export enum ArchiveLayout { + BEST_FIT = 'BEST_FIT', + PICTURE_IN_PICTURE = 'PICTURE_IN_PICTURE', + VERTICAL_PRESENTATION = 'VERTICAL_PRESENTATION', + HORIZONTAL_PRESENTATION = 'VERTICAL_PRESENTATION' +} diff --git a/openvidu-node-client/src/ArchiveMode.ts b/openvidu-node-client/src/ArchiveMode.ts new file mode 100644 index 00000000..41a12bf3 --- /dev/null +++ b/openvidu-node-client/src/ArchiveMode.ts @@ -0,0 +1,4 @@ +export enum ArchiveMode { + ALWAYS = 'ALWAYS', // The session is archived automatically (as soon as there are clients publishing streams to the session) + MANUAL = 'MANUAL' // The session is not archived automatically. To archive the session, you can call the OpenVidu.StartArchive() method +} diff --git a/openvidu-node-client/src/MediaMode.ts b/openvidu-node-client/src/MediaMode.ts new file mode 100644 index 00000000..9c6bf484 --- /dev/null +++ b/openvidu-node-client/src/MediaMode.ts @@ -0,0 +1,4 @@ +export enum MediaMode { + RELAYED = 'RELAYED', // The session will attempt to transmit streams directly between clients + ROUTED = 'ROUTED' // The session will transmit streams using OpenVidu Media Server +} diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index c9093161..4223fe18 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -1,11 +1,20 @@ import { Session } from "./Session"; +import { SessionProperties } from "./SessionProperties"; export class OpenVidu { - constructor(private urlOpenViduServer: string, private secret: string){ } + constructor(private urlOpenViduServer: string, private secret: string) { } - public createSession(): Session { - return new Session(this.urlOpenViduServer, this.secret); + public createSession(properties?: SessionProperties): Session { + return new Session(this.urlOpenViduServer, this.secret, properties); + } + + public startArchive(sessionId: string) { + // TODO: REST POST to start recording in OpenVidu Server + } + + public stopArchive(sessionId: string) { + // TODO: REST POST to end recording in OpenVidu Server } } \ No newline at end of file diff --git a/openvidu-node-client/src/OpenViduRole.ts b/openvidu-node-client/src/OpenViduRole.ts index 06e188a1..cfe11e14 100644 --- a/openvidu-node-client/src/OpenViduRole.ts +++ b/openvidu-node-client/src/OpenViduRole.ts @@ -1,5 +1,5 @@ export enum OpenViduRole { - SUBSCRIBER = 'SUBSCRIBER', - PUBLISHER = 'PUBLISHER', - MODERATOR = 'MODERATOR' + SUBSCRIBER = 'SUBSCRIBER', // Can subscribe to published streams of other users + PUBLISHER = 'PUBLISHER', // SUBSCRIBER permissions + can subscribe to published streams of other users and publish their own streams + MODERATOR = 'MODERATOR' // SUBSCRIBER + PUBLIHSER permissions + can force unpublish() and disconnect() over a third-party stream or user } \ No newline at end of file diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index 2d0f0dca..495c9a98 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -1,20 +1,27 @@ import { TokenOptions } from './TokenOptions'; import { OpenViduRole } from './OpenViduRole'; +import { SessionProperties } from './SessionProperties'; declare const Buffer; declare const require; -var https = require('https'); +let https = require('https'); export class Session { private sessionIdURL: string = '/api/sessions'; private tokenURL: string = '/api/tokens'; private sessionId: string = ""; + private properties: SessionProperties; private hostname: string; private port: number; - constructor(private urlOpenViduServer: string, private secret: string) { + constructor(private urlOpenViduServer: string, private secret: string, properties?: SessionProperties) { + if (properties == null) { + this.properties = new SessionProperties.Builder().build(); + } else { + this.properties = properties; + } this.setHostnameAndPort(); } @@ -25,24 +32,32 @@ export class Session { return; } + let requestBody = JSON.stringify({ + 'archiveLayout': this.properties.archiveLayout(), + 'archiveMode': this.properties.archiveMode(), + 'mediaMode': this.properties.mediaMode() + }); + let options = { hostname: this.hostname, port: this.port, path: this.sessionIdURL, method: 'POST', headers: { - 'Authorization': this.getBasicAuth() + 'Authorization': this.getBasicAuth(), + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(requestBody) } } const req = https.request(options, (res) => { - var body = ''; + let body = ''; res.on('data', (d) => { // Continuously update stream with data body += d; }); res.on('end', () => { // Data reception is done - var parsed = JSON.parse(body); + let parsed = JSON.parse(body); this.sessionId = parsed.id; callback(parsed.id); }); @@ -51,15 +66,15 @@ export class Session { req.on('error', (e) => { console.error(e); }); + req.write(requestBody); req.end(); } - public generateToken(callback: Function); public generateToken(tokenOptions: TokenOptions, callback: Function); public generateToken(tokenOptions: any, callback?: any) { - var requestBody; + let requestBody; if (callback) { requestBody = JSON.stringify({ @@ -76,7 +91,7 @@ export class Session { callback = tokenOptions; } - var options = { + let options = { hostname: this.hostname, port: this.port, path: this.tokenURL, @@ -88,14 +103,14 @@ export class Session { } }; const req = https.request(options, (res) => { - var body = ''; + let body = ''; res.on('data', (d) => { // Continuously update stream with data body += d; }); res.on('end', () => { // Data reception is done - var parsed = JSON.parse(body); + let parsed = JSON.parse(body); callback(parsed.id); }); }); @@ -107,12 +122,16 @@ export class Session { req.end(); } + public getProperties(): SessionProperties { + return this.properties; + } + private getBasicAuth() { return 'Basic ' + (new Buffer('OPENVIDUAPP:' + this.secret).toString('base64')); } private setHostnameAndPort() { - var urlSplitted = this.urlOpenViduServer.split(':'); + let urlSplitted = this.urlOpenViduServer.split(':'); if (urlSplitted.length === 3) { // URL has format: http:// + hostname + :port this.hostname = this.urlOpenViduServer.split(':')[1].replace(/\//g, ''); this.port = parseInt(this.urlOpenViduServer.split(':')[2].replace(/\//g, '')); diff --git a/openvidu-node-client/src/SessionProperties.ts b/openvidu-node-client/src/SessionProperties.ts new file mode 100644 index 00000000..0982dbfb --- /dev/null +++ b/openvidu-node-client/src/SessionProperties.ts @@ -0,0 +1,48 @@ +import { MediaMode } from "./MediaMode"; +import { ArchiveMode } from "./ArchiveMode"; +import { ArchiveLayout } from "./ArchiveLayout"; + +export class SessionProperties { + + constructor(private mediaModeProp: MediaMode, private archiveModeProp: ArchiveMode, private archiveLayoutProp: ArchiveLayout) { } + + mediaMode(): string { + return this.mediaModeProp; + } + + archiveMode(): ArchiveMode { + return this.archiveModeProp; + } + + archiveLayout(): ArchiveLayout { + return this.archiveLayoutProp; + } +} + +export namespace SessionProperties { + export class Builder { + + private mediaModeProp: MediaMode = MediaMode.ROUTED; + private archiveModeProp: ArchiveMode = ArchiveMode.MANUAL; + private archiveLayoutProp: ArchiveLayout = ArchiveLayout.BEST_FIT; + + build(): SessionProperties { + return new SessionProperties(this.mediaModeProp, this.archiveModeProp, this.archiveLayoutProp); + } + + mediaMode(mediaMode: MediaMode): Builder { + this.mediaModeProp = mediaMode; + return this; + } + + archiveMode(archiveMode: ArchiveMode): Builder { + this.archiveModeProp = archiveMode; + return this; + } + + archiveLayout(archiveLayout: ArchiveLayout): Builder { + this.archiveLayoutProp = archiveLayout; + return this; + } + }; +} diff --git a/openvidu-node-client/src/TokenOptions.ts b/openvidu-node-client/src/TokenOptions.ts index e481c770..fc74a6de 100644 --- a/openvidu-node-client/src/TokenOptions.ts +++ b/openvidu-node-client/src/TokenOptions.ts @@ -2,16 +2,13 @@ import { OpenViduRole } from "./OpenViduRole"; export class TokenOptions { - constructor(private data: string, private role: OpenViduRole) { - this.data = data; - this.role = role; - } + constructor(private data: string, private role: OpenViduRole) { } - public getData(): string { + getData(): string { return this.data; } - public getRole(): OpenViduRole { + getRole(): OpenViduRole { return this.role; } } diff --git a/openvidu-node-client/src/index.ts b/openvidu-node-client/src/index.ts index df975f07..61fe4c5b 100644 --- a/openvidu-node-client/src/index.ts +++ b/openvidu-node-client/src/index.ts @@ -1,4 +1,8 @@ export * from './OpenVidu'; export * from './OpenViduRole'; export * from './Session'; -export * from './TokenOptions'; \ No newline at end of file +export * from './TokenOptions'; +export * from './MediaMode'; +export * from './ArchiveLayout'; +export * from './ArchiveMode'; +export * from './SessionProperties'; \ No newline at end of file