From 6afda4f7d69e90776f5237df51884194e3f970d6 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 6 Nov 2019 16:18:32 +0100 Subject: [PATCH] openvidu-node-client: support for OpenVidu URL with no port --- openvidu-node-client/package-lock.json | 118 +++++++++++++++---------- openvidu-node-client/package.json | 12 +-- openvidu-node-client/src/OpenVidu.ts | 31 ++++--- openvidu-node-client/src/Session.ts | 12 +-- 4 files changed, 97 insertions(+), 76 deletions(-) diff --git a/openvidu-node-client/package-lock.json b/openvidu-node-client/package-lock.json index 90dc77cf..744a50ad 100644 --- a/openvidu-node-client/package-lock.json +++ b/openvidu-node-client/package-lock.json @@ -31,9 +31,9 @@ "dev": true }, "@types/node": { - "version": "12.6.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", - "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "version": "12.12.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.6.tgz", + "integrity": "sha512-FjsYUPzEJdGXjwKqSpE0/9QEh6kzhTAeObA54rn6j3rR4C/mzpI9L0KNfoeASSPMMdxIsoJuCLDWcM/rVjIsSA==", "dev": true }, "abbrev": { @@ -168,18 +168,18 @@ "dev": true }, "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", + "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", "dev": true, "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", + "browserslist": "^4.7.2", + "caniuse-lite": "^1.0.30001006", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" + "postcss": "^7.0.21", + "postcss-value-parser": "^4.0.2" } }, "axios": { @@ -324,20 +324,20 @@ } }, "browserslist": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", - "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz", + "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000984", - "electron-to-chromium": "^1.3.191", - "node-releases": "^1.1.25" + "caniuse-lite": "^1.0.30001004", + "electron-to-chromium": "^1.3.295", + "node-releases": "^1.1.38" } }, "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -395,9 +395,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000989", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", - "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "version": "1.0.30001008", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001008.tgz", + "integrity": "sha512-b8DJyb+VVXZGRgJUa30cbk8gKHZ3LOZTBLaUEEVr2P4xpmFigOCc62CO4uzquW641Ouq1Rm9N+rWLWdSYDaDIw==", "dev": true }, "chalk": { @@ -698,9 +698,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.221", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.221.tgz", - "integrity": "sha512-YbNA7KgCvLq9ZaEa7wpYP7IP4LrJ4+b36oeF1lYBSJ0zVGVN7uo3Ct9qDUm/M3VDOWj03RVgsMFF8PdL8UjhzA==", + "version": "1.3.304", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.304.tgz", + "integrity": "sha512-a5mqa13jCdBc+Crgk3Gyr7vpXCiFWfFq23YDCEmrPYeiDOQKZDVE6EX/Q4Xdv97n3XkcjiSBDOY0IS19yP2yeA==", "dev": true }, "error": { @@ -2752,12 +2752,20 @@ "dev": true }, "node-releases": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", - "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", + "version": "1.1.39", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.39.tgz", + "integrity": "sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "nopt": { @@ -3050,9 +3058,9 @@ "dev": true }, "postcss": { - "version": "7.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", - "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -3517,9 +3525,9 @@ } }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -3717,9 +3725,9 @@ "dev": true }, "ts-node": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", - "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.4.1.tgz", + "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==", "dev": true, "requires": { "arg": "^4.1.0", @@ -3744,16 +3752,16 @@ "dev": true }, "tslint": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", - "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", @@ -3764,10 +3772,16 @@ "tsutils": "^2.29.0" }, "dependencies": { + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3806,6 +3820,14 @@ "shelljs": "^0.8.3", "typedoc-default-themes": "^0.6.0", "typescript": "3.5.x" + }, + "dependencies": { + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "dev": true + } } }, "typedoc-default-themes": { @@ -3821,9 +3843,9 @@ } }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", "dev": true }, "uglify-js": { diff --git a/openvidu-node-client/package.json b/openvidu-node-client/package.json index 4992c0ec..6cc92ce7 100644 --- a/openvidu-node-client/package.json +++ b/openvidu-node-client/package.json @@ -2,12 +2,12 @@ "author": "OpenVidu", "dependencies": { "axios": "0.19.0", - "buffer": "5.2.1" + "buffer": "5.4.3" }, "description": "OpenVidu Node Client", "devDependencies": { - "autoprefixer": "9.6.1", - "@types/node": "12.6.8", + "autoprefixer": "9.7.1", + "@types/node": "12.12.6", "grunt": "1.0.4", "grunt-cli": "1.3.2", "grunt-contrib-copy": "1.0.0", @@ -17,10 +17,10 @@ "grunt-postcss": "0.9.0", "grunt-string-replace": "1.3.1", "grunt-ts": "6.0.0-beta.22", - "ts-node": "8.3.0", - "tslint": "5.18.0", + "ts-node": "8.4.1", + "tslint": "5.20.1", "typedoc": "0.15.0", - "typescript": "3.5.3" + "typescript": "3.7.2" }, "license": "Apache-2.0", "main": "lib/index.js", diff --git a/openvidu-node-client/src/OpenVidu.ts b/openvidu-node-client/src/OpenVidu.ts index 5023ef63..ed5ec5d3 100644 --- a/openvidu-node-client/src/OpenVidu.ts +++ b/openvidu-node-client/src/OpenVidu.ts @@ -171,7 +171,7 @@ export class OpenVidu { } axios.post( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_RECORDINGS + OpenVidu.API_RECORDINGS_START, + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_RECORDINGS + OpenVidu.API_RECORDINGS_START, data, { headers: { @@ -225,7 +225,7 @@ export class OpenVidu { return new Promise((resolve, reject) => { axios.post( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_RECORDINGS + OpenVidu.API_RECORDINGS_STOP + '/' + recordingId, + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_RECORDINGS + OpenVidu.API_RECORDINGS_STOP + '/' + recordingId, undefined, { headers: { @@ -277,7 +277,7 @@ export class OpenVidu { return new Promise((resolve, reject) => { axios.get( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_RECORDINGS + '/' + recordingId, + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_RECORDINGS + '/' + recordingId, { headers: { 'Authorization': this.basicAuth, @@ -319,7 +319,7 @@ export class OpenVidu { return new Promise((resolve, reject) => { axios.get( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_RECORDINGS, + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_RECORDINGS, { headers: { Authorization: this.basicAuth @@ -371,7 +371,7 @@ export class OpenVidu { return new Promise((resolve, reject) => { axios.delete( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_RECORDINGS + '/' + recordingId, + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_RECORDINGS + '/' + recordingId, { headers: { 'Authorization': this.basicAuth, @@ -414,7 +414,7 @@ export class OpenVidu { public fetch(): Promise { return new Promise((resolve, reject) => { axios.get( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_SESSIONS, + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_SESSIONS, { headers: { Authorization: this.basicAuth @@ -584,7 +584,7 @@ export class OpenVidu { return new Promise<{ changes: boolean, sessionChanges: ObjMap }>((resolve, reject) => { axios.get( - 'https://' + this.hostname + ':' + this.port + OpenVidu.API_SESSIONS + '?webRtcStats=true', + 'https://' + this.hostname + (!!this.port ? (':' + this.port) : '') + OpenVidu.API_SESSIONS + '?webRtcStats=true', { headers: { Authorization: this.basicAuth @@ -685,16 +685,15 @@ export class OpenVidu { } private setHostnameAndPort(): void { - const 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, '')); - } else if (urlSplitted.length === 2) { // URL has format: hostname + :port - this.hostname = this.urlOpenViduServer.split(':')[0].replace(/\//g, ''); - this.port = parseInt(this.urlOpenViduServer.split(':')[1].replace(/\//g, '')); - } else { - console.error("URL format incorrect: it must contain hostname and port (current value: '" + this.urlOpenViduServer + "')"); + let url: URL; + try { + url = new URL(this.urlOpenViduServer); + } catch (error) { + console.error("URL format incorrect", error); + return; } + this.hostname = url.hostname; + this.port = !!url.port ? parseInt(url.port) : undefined; } } diff --git a/openvidu-node-client/src/Session.ts b/openvidu-node-client/src/Session.ts index cad8028c..d9ecdf15 100644 --- a/openvidu-node-client/src/Session.ts +++ b/openvidu-node-client/src/Session.ts @@ -108,7 +108,7 @@ export class Session { }); axios.post( - 'https://' + this.ov.hostname + ':' + this.ov.port + OpenVidu.API_TOKENS, + 'https://' + this.ov.hostname + (!!this.ov.port ? (':' + this.ov.port) : '') + OpenVidu.API_TOKENS, data, { headers: { @@ -152,7 +152,7 @@ export class Session { public close(): Promise { return new Promise((resolve, reject) => { axios.delete( - 'https://' + this.ov.hostname + ':' + this.ov.port + OpenVidu.API_SESSIONS + '/' + this.sessionId, + 'https://' + this.ov.hostname + (!!this.ov.port ? (':' + this.ov.port) : '') + OpenVidu.API_SESSIONS + '/' + this.sessionId, { headers: { 'Authorization': this.ov.basicAuth, @@ -202,7 +202,7 @@ export class Session { return new Promise((resolve, reject) => { const beforeJSON: string = JSON.stringify(this, this.removeCircularOpenViduReference); axios.get( - 'https://' + this.ov.hostname + ':' + this.ov.port + OpenVidu.API_SESSIONS + '/' + this.sessionId, + 'https://' + this.ov.hostname + (!!this.ov.port ? (':' + this.ov.port) : '') + OpenVidu.API_SESSIONS + '/' + this.sessionId, { headers: { 'Authorization': this.ov.basicAuth, @@ -254,7 +254,7 @@ export class Session { return new Promise((resolve, reject) => { const connectionId: string = typeof connection === 'string' ? connection : (connection).connectionId; axios.delete( - 'https://' + this.ov.hostname + ':' + this.ov.port + OpenVidu.API_SESSIONS + '/' + this.sessionId + '/connection/' + connectionId, + 'https://' + this.ov.hostname + (!!this.ov.port ? (':' + this.ov.port) : '') + OpenVidu.API_SESSIONS + '/' + this.sessionId + '/connection/' + connectionId, { headers: { 'Authorization': this.ov.basicAuth, @@ -333,7 +333,7 @@ export class Session { return new Promise((resolve, reject) => { const streamId: string = typeof publisher === 'string' ? publisher : (publisher).streamId; axios.delete( - 'https://' + this.ov.hostname + ':' + this.ov.port + OpenVidu.API_SESSIONS + '/' + this.sessionId + '/stream/' + streamId, + 'https://' + this.ov.hostname + (!!this.ov.port ? (':' + this.ov.port) : '') + OpenVidu.API_SESSIONS + '/' + this.sessionId + '/stream/' + streamId, { headers: { 'Authorization': this.ov.basicAuth, @@ -405,7 +405,7 @@ export class Session { }); axios.post( - 'https://' + this.ov.hostname + ':' + this.ov.port + OpenVidu.API_SESSIONS, + 'https://' + this.ov.hostname + (!!this.ov.port ? (':' + this.ov.port) : '') + OpenVidu.API_SESSIONS, data, { headers: {