From b2e5a5a4325cb99ecfcf99ac6907f575703d27ea Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Wed, 4 May 2022 22:20:56 +0200 Subject: [PATCH] TT#175000 Remove obsolete janus-admin project Starting with mr10.5 the janus-admin service is obsolete and no longer available. It is now provided natively by rtpengine. Change-Id: I11be98c2f4ee29dd01c031aa2dd7b223d7b97d59 --- .editorconfig | 12 - .gitignore | 24 - .gitreview | 4 - .npmrc | 1 - Makefile | 2 - README | 5 + README.md | 131 --- debian/.gitignore | 7 - debian/changelog | 174 ---- debian/control | 16 - debian/copyright | 23 - debian/rules | 7 - debian/source/format | 1 - package-lock.json | 1350 ------------------------------- package.json | 32 - src/admin.js | 253 ------ src/error.js | 20 - src/mock/janus-admin-server.js | 225 ------ src/response.js | 43 - t/Dockerfile | 52 -- t/sources.list.d/builddeps.list | 0 t/sources.list.d/preferences | 0 t/testrunner | 22 - test/admin-spec.js | 193 ----- 24 files changed, 5 insertions(+), 2592 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .gitignore delete mode 100644 .gitreview delete mode 100644 .npmrc delete mode 100644 Makefile create mode 100644 README delete mode 100644 README.md delete mode 100644 debian/.gitignore delete mode 100644 debian/changelog delete mode 100644 debian/control delete mode 100644 debian/copyright delete mode 100755 debian/rules delete mode 100644 debian/source/format delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 src/admin.js delete mode 100644 src/error.js delete mode 100644 src/mock/janus-admin-server.js delete mode 100644 src/response.js delete mode 100644 t/Dockerfile delete mode 100644 t/sources.list.d/builddeps.list delete mode 100644 t/sources.list.d/preferences delete mode 100755 t/testrunner delete mode 100644 test/admin-spec.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 759ec5a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -root = true - -[*.{js,ts,json,html,css,scss,less,md,gitignore,editorconfig}] -indent_style = space -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore deleted file mode 100644 index cae7c3a..0000000 --- a/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Eclipse -.classpath -.project -.settings/ - -# Intellij -.idea/ -*.iml -*.iws - -# Mac -.DS_Store - -# Maven -log/ -target/ - -# Node.js -node_modules/ -npm-debug.log - -# Bower -bower_components/ - diff --git a/.gitreview b/.gitreview deleted file mode 100644 index 3f6f2ea..0000000 --- a/.gitreview +++ /dev/null @@ -1,4 +0,0 @@ -[gerrit] -host=gerrit.mgm.sipwise.com -port=29418 -project=janus-admin diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 2295869..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -registry = https://npm-registry.sipwise.com/ diff --git a/Makefile b/Makefile deleted file mode 100644 index 8a7cbb7..0000000 --- a/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - true diff --git a/README b/README new file mode 100644 index 0000000..a2b7f85 --- /dev/null +++ b/README @@ -0,0 +1,5 @@ +Repository discontinued +----------------------- + +The repository is for historical purposes only, it was obsoleted and +no longer available starting with mr10.5. diff --git a/README.md b/README.md deleted file mode 100644 index a12e959..0000000 --- a/README.md +++ /dev/null @@ -1,131 +0,0 @@ -JanusAdmin -=========== - -JanusAdmin is a node.js http client, that implements the entire admin interface of the Janus WebRTC Gateway. - -Usage -------------- -```javascript -var JanusAdmin = require('janus-admin').JanusAdmin; - -var admin = new JanusAdmin({ - url: 'http://janus-admin:7088', - secret: '*****' -}); -``` - -Methods ---------------- - -### List sessions - -```javascript -admin.listSessions().then((res)=>{ - console.log(res.sessions) -}).catch((err)=>{ - ... -}); -``` - -### List handles - -```javascript -admin.listHandles(sessionId).then((res)=>{ - console.log(res.handles) -}).catch((err)=>{ - ... -}); -``` - -### Show single handle - -```javascript -admin.handleInfo(sessionId, handleId).then((res)=>{ - console.log(res.info) -}).catch((err)=>{ - ... -}); -``` - -### Set the log level - -```javascript -admin.setLogLevel([0...7]).then((res)=>{ - console.log(res.level) -}).catch((err)=>{ - ... -}); -``` - -### Set locking debug - -```javascript -admin.setLockingDebug([0,1]).then((res)=>{ - console.log(res.debug) -}).catch((err)=>{ - ... -}); -``` - -Methods (token based authentication) ------------------------------------- - -### Add token - -```javascript -admin.addToken(token).then((res)=>{ - console.log(res.plugins); -}).catch((err)=>{ - ... -}); -``` - -### Allow token - -```javascript -admin.allowToken(token, plugins).then((res)=>{ - console.log(res.plugins); -}).catch((err)=>{ - ... -}); -``` - -### Disallow token - -```javascript -admin.disallowToken(token, plugins).then((res)=>{ - console.log(res.plugins); -}).catch((err)=>{ - ... -}); -``` - -### List all tokens - -```javascript -admin.listTokens().then((res)=>{ - console.log(res.tokens); -}).catch((err)=>{ - ... -}); -``` - -### Remove token - -```javascript -adminClient.removeToken(token).then((res)=>{ - ... -}).catch((err)=>{ - ... -}); -``` - -### Remove all tokens - -```javascript -adminClient.removeAllTokens().then((res)=>{ - ... -}).catch((err)=>{ - ... -}); -``` diff --git a/debian/.gitignore b/debian/.gitignore deleted file mode 100644 index a088f75..0000000 --- a/debian/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.debhelper -*.log -*.substvars -/.debhelper/ -/debhelper-build-stamp -/files -/ngcp-janus-admin/ diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 80fd12e..0000000 --- a/debian/changelog +++ /dev/null @@ -1,174 +0,0 @@ -janus-admin (5.0.0.0+0~mr10.5.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Wed, 30 Mar 2022 23:58:51 +0200 - -janus-admin (5.0.0.0+0~mr10.4.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 24 Jan 2022 16:54:56 +0100 - -janus-admin (5.0.0.0+0~mr10.3.0.0) unstable; urgency=medium - - [ Guillem Jover ] - * [0314024] TT#124273 Update packaging for bullseye - - -- Sipwise Jenkins Builder Tue, 23 Nov 2021 14:17:17 +0100 - -janus-admin (5.0.0.0+0~mr10.2.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Tue, 05 Oct 2021 13:18:25 +0200 - -janus-admin (5.0.0.0+0~mr10.1.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Tue, 24 Aug 2021 16:49:50 +0200 - -janus-admin (5.0.0.0+0~mr10.0.0.0) unstable; urgency=medium - - [ Manuel Montecelo ] - * [c61fc3c] TT#118659 Switch Dockerfile from Debian buster to bullseye - - -- Sipwise Jenkins Builder Mon, 14 Jun 2021 16:35:14 +0200 - -janus-admin (5.0.0.0+0~mr9.5.0.0) unstable; urgency=medium - - [ Hans-Peter Herzog ] - * [59d867d] TT#111459 GitHub security alert for janus-admin.git: minimist/lodash/yargs-parser - - [ Manuel Montecelo ] - * [84eb9fc] TT#113853 Preparations for release mr8.5.4, missing "mocha" binary - - -- Sipwise Jenkins Builder Tue, 20 Apr 2021 11:56:51 +0200 - -janus-admin (5.0.0.0+0~mr9.4.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 15 Feb 2021 17:51:56 +0100 - -janus-admin (5.0.0.0+0~mr9.3.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Tue, 05 Jan 2021 15:30:49 +0100 - -janus-admin (5.0.0.0+0~mr9.2.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 09 Nov 2020 16:23:58 +0100 - -janus-admin (5.0.0.0+0~mr9.1.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 31 Aug 2020 21:53:28 +0200 - -janus-admin (5.0.0.0+0~mr9.0.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Tue, 21 Jul 2020 14:47:52 +0200 - -janus-admin (5.0.0.0+0~mr8.6.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Tue, 14 Jul 2020 11:51:46 +0200 - -janus-admin (5.0.0.0+0~mr8.5.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Tue, 19 May 2020 11:07:39 +0200 - -janus-admin (5.0.0.0+0~mr8.4.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 16 Mar 2020 11:12:59 +0100 - -janus-admin (5.0.0.0+0~mr8.3.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 27 Jan 2020 12:20:30 +0100 - -janus-admin (5.0.0.0+0~mr8.2.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 25 Nov 2019 14:53:54 +0100 - -janus-admin (5.0.0.0+0~mr8.1.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [0682409] TT#63759 Fix 19113071: replace removed npm-shrinkwrap.json with package-lock.json in Dockerfile - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Tue, 08 Oct 2019 09:07:14 +0200 - -janus-admin (5.0.0.0+0~mr8.0.0.0) unstable; urgency=medium - - [ Alexander Lutay ] - * [d445ec7] TT#60950 Switch janus-admin docker to buster - * [91fac1e] TT#60100 TT#44859 Update janus-admin Dockerfile (remove hardcoded release-trunk-buster) - * [d875383] TT#60100 Use npm-registry.sipwise.com in npm-shrinkwrap.json - - [ Guillem Jover ] - * [65c2d31] TT#61954 Update copyright years - * [16952ce] TT#61954 Set debhelper compat level in Build-Depends instead of debian/compat - - [ Hans-Peter Herzog ] - * [1911307] TT#63759 janus-admin: Update package dependencies and npm locking version - - [ Sipwise Jenkins Builder ] - - -- Sipwise Jenkins Builder Mon, 05 Aug 2019 20:54:06 +0200 - -janus-admin (5.0.0.0+0~mr7.5.0.0) unstable; urgency=medium - - * New release. - - -- Sipwise Jenkins Builder Mon, 17 Jun 2019 14:35:26 +0200 - -janus-admin (5.0.0.0+0~mr7.4.0.0) unstable; urgency=medium - - [ Hans-Peter Herzog ] - * [3fd7c74] TT#5036 Add entry point for package - * [53d1c92] TT#5036 Added debug logger for requests. Normalize url and path via makeUrl. - * [cfeaecd] TT#5036 Add method removeAllTokens - * [947e70e] TT#2723 Created npm shrinkwrap - * [bcd57d0] TT#2723 Javascript syntax highlighting in README - * [d7f2d97] TT#2723 Changed licence - * [cedba63] TT#2723 Added git repo url to package file - * [750ff36] TT#2723 New version - * [1a6e1d3] TT#2723 Lock npm deps - - [ Markus Danek ] - * [9f5cea5] TT#15811 Add Dockerfile and testrunner script - - [ Sergii Kipot ] - * [aef5fd2] TT#15750 Add our own npm registry cache to .npmrc - - [ Alexander Lutay ] - * [f3e1d8e] TT#22402 Switch janus-admin Dockerfile to Debian stretch - - [ Guillem Jover ] - * [018bf9a] TT#22072 Update packaging - - -- Alex Lutay Thu, 02 May 2019 16:10:37 +0200 - -janus-admin (5.0.0.0+0~mr5.0.0.0) unstable; urgency=medium - - * Initial revision - - -- Sergii Kipot Thu, 27 Oct 2016 13:48:23 +0200 - diff --git a/debian/control b/debian/control deleted file mode 100644 index 2233bc4..0000000 --- a/debian/control +++ /dev/null @@ -1,16 +0,0 @@ -Source: janus-admin -Section: admin -Priority: optional -Maintainer: Sipwise Development Team -Standards-Version: 4.5.1 -Build-Depends: - debhelper-compat (= 13), -Homepage: https://www.sipwise.com/ - -Package: ngcp-janus-admin -Architecture: all -Depends: - ${misc:Depends}, - ${perl:Depends}, -Description: JanusAdmin is a node.js http client, that implements the - entire admin interface of the Janus Web RTC Gateway diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 56e230c..0000000 --- a/debian/copyright +++ /dev/null @@ -1,23 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Source: https://www.sipwise.com/ -Upstream-Contact: Sipwise Development Team - -Files: * -Copyright: - Copyright © 2016-2021 Sipwise GmbH, Austria -License: GPL-3+ - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - . - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - . - You should have received a copy of the GNU General Public License - along with this program. If not, see . -Comment: - On Debian systems, the full text of the GNU General Public License - version 3 can be found in the file '/usr/share/common-licenses/GPL-3'. diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 8b45f98..0000000 --- a/debian/rules +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/make -f - -# Uncomment this to turn on verbose mode. -# export DH_VERBOSE=1 - -%: - dh "$@" diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 89ae9db..0000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (native) diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 32a430c..0000000 --- a/package-lock.json +++ /dev/null @@ -1,1350 +0,0 @@ -{ - "name": "janus-admin", - "version": "1.0.5", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://npm-registry.sipwise.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://npm-registry.sipwise.com/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://npm-registry.sipwise.com/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://npm-registry.sipwise.com/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://npm-registry.sipwise.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://npm-registry.sipwise.com/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://npm-registry.sipwise.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://npm-registry.sipwise.com/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://npm-registry.sipwise.com/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://npm-registry.sipwise.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://npm-registry.sipwise.com/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://npm-registry.sipwise.com/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://npm-registry.sipwise.com/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://npm-registry.sipwise.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://npm-registry.sipwise.com/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://npm-registry.sipwise.com/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://npm-registry.sipwise.com/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://npm-registry.sipwise.com/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chai": { - "version": "4.2.0", - "resolved": "https://npm-registry.sipwise.com/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "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.5" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://npm-registry.sipwise.com/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://npm-registry.sipwise.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://npm-registry.sipwise.com/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://npm-registry.sipwise.com/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://npm-registry.sipwise.com/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://npm-registry.sipwise.com/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://npm-registry.sipwise.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://npm-registry.sipwise.com/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://npm-registry.sipwise.com/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://npm-registry.sipwise.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://npm-registry.sipwise.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://npm-registry.sipwise.com/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://npm-registry.sipwise.com/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://npm-registry.sipwise.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://npm-registry.sipwise.com/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://npm-registry.sipwise.com/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://npm-registry.sipwise.com/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://npm-registry.sipwise.com/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://npm-registry.sipwise.com/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://npm-registry.sipwise.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "debug-logger": { - "version": "0.4.1", - "resolved": "https://npm-registry.sipwise.com/debug-logger/-/debug-logger-0.4.1.tgz", - "integrity": "sha1-4zhJw2njzTYbULKZ1xylIkuqGuE=", - "requires": { - "debug": "^2.1.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://npm-registry.sipwise.com/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://npm-registry.sipwise.com/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://npm-registry.sipwise.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://npm-registry.sipwise.com/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://npm-registry.sipwise.com/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://npm-registry.sipwise.com/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://npm-registry.sipwise.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://npm-registry.sipwise.com/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://npm-registry.sipwise.com/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://npm-registry.sipwise.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://npm-registry.sipwise.com/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "express": { - "version": "4.17.1", - "resolved": "https://npm-registry.sipwise.com/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://npm-registry.sipwise.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://npm-registry.sipwise.com/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://npm-registry.sipwise.com/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://npm-registry.sipwise.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://npm-registry.sipwise.com/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "form-data": { - "version": "2.5.0", - "resolved": "https://npm-registry.sipwise.com/form-data/-/form-data-2.5.0.tgz", - "integrity": "sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://npm-registry.sipwise.com/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://npm-registry.sipwise.com/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://npm-registry.sipwise.com/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://npm-registry.sipwise.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://npm-registry.sipwise.com/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://npm-registry.sipwise.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://npm-registry.sipwise.com/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://npm-registry.sipwise.com/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://npm-registry.sipwise.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://npm-registry.sipwise.com/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://npm-registry.sipwise.com/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://npm-registry.sipwise.com/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://npm-registry.sipwise.com/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://npm-registry.sipwise.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://npm-registry.sipwise.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://npm-registry.sipwise.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://npm-registry.sipwise.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://npm-registry.sipwise.com/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://npm-registry.sipwise.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://npm-registry.sipwise.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://npm-registry.sipwise.com/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://npm-registry.sipwise.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://npm-registry.sipwise.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://npm-registry.sipwise.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://npm-registry.sipwise.com/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://npm-registry.sipwise.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://npm-registry.sipwise.com/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://npm-registry.sipwise.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://npm-registry.sipwise.com/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "2.4.4", - "resolved": "https://npm-registry.sipwise.com/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://npm-registry.sipwise.com/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://npm-registry.sipwise.com/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://npm-registry.sipwise.com/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mocha": { - "version": "8.3.2", - "resolved": "https://npm-registry.sipwise.com/mocha/-/mocha-8.3.2.tgz", - "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://npm-registry.sipwise.com/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://npm-registry.sipwise.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://npm-registry.sipwise.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://npm-registry.sipwise.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://npm-registry.sipwise.com/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://npm-registry.sipwise.com/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://npm-registry.sipwise.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://npm-registry.sipwise.com/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://npm-registry.sipwise.com/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://npm-registry.sipwise.com/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://npm-registry.sipwise.com/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://npm-registry.sipwise.com/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://npm-registry.sipwise.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://npm-registry.sipwise.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://npm-registry.sipwise.com/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://npm-registry.sipwise.com/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://npm-registry.sipwise.com/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://npm-registry.sipwise.com/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://npm-registry.sipwise.com/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://npm-registry.sipwise.com/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://npm-registry.sipwise.com/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://npm-registry.sipwise.com/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://npm-registry.sipwise.com/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://npm-registry.sipwise.com/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://npm-registry.sipwise.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://npm-registry.sipwise.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://npm-registry.sipwise.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://npm-registry.sipwise.com/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://npm-registry.sipwise.com/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://npm-registry.sipwise.com/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://npm-registry.sipwise.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://npm-registry.sipwise.com/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://npm-registry.sipwise.com/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://npm-registry.sipwise.com/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://npm-registry.sipwise.com/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://npm-registry.sipwise.com/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://npm-registry.sipwise.com/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://npm-registry.sipwise.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "superagent": { - "version": "5.1.0", - "resolved": "https://npm-registry.sipwise.com/superagent/-/superagent-5.1.0.tgz", - "integrity": "sha512-7V6JVx5N+eTL1MMqRBX0v0bG04UjrjAvvZJTF/VDH/SH2GjSLqlrcYepFlpTrXpm37aSY6h3GGVWGxXl/98TKA==", - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.6", - "form-data": "^2.3.3", - "formidable": "^1.2.1", - "methods": "^1.1.2", - "mime": "^2.4.4", - "qs": "^6.7.0", - "readable-stream": "^3.4.0", - "semver": "^6.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://npm-registry.sipwise.com/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://npm-registry.sipwise.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://npm-registry.sipwise.com/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://npm-registry.sipwise.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://npm-registry.sipwise.com/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://npm-registry.sipwise.com/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://npm-registry.sipwise.com/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://npm-registry.sipwise.com/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://npm-registry.sipwise.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://npm-registry.sipwise.com/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://npm-registry.sipwise.com/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "validator": { - "version": "11.1.0", - "resolved": "https://npm-registry.sipwise.com/validator/-/validator-11.1.0.tgz", - "integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://npm-registry.sipwise.com/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://npm-registry.sipwise.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://npm-registry.sipwise.com/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "workerpool": { - "version": "6.1.0", - "resolved": "https://npm-registry.sipwise.com/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://npm-registry.sipwise.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://npm-registry.sipwise.com/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://npm-registry.sipwise.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://npm-registry.sipwise.com/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://npm-registry.sipwise.com/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://npm-registry.sipwise.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://npm-registry.sipwise.com/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://npm-registry.sipwise.com/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://npm-registry.sipwise.com/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://npm-registry.sipwise.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://npm-registry.sipwise.com/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://npm-registry.sipwise.com/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://npm-registry.sipwise.com/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://npm-registry.sipwise.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://npm-registry.sipwise.com/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 4a05b6a..0000000 --- a/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "janus-admin", - "version": "1.0.6", - "main": "src/admin.js", - "scripts": { - "test": "mocha -b --exit -R spec --full-trace test/*-spec.js", - "test-dev": "mocha -b -R spec -w test/*-spec.js" - }, - "author": "Hans-Peter Herzog ", - "license": "GPL-3.0", - "description": "JanusAdmin is a node.js http client that implements the admin interface of the Janus WebRTC Gateway", - "keywords": [ - "janus" - ], - "repository": { - "type": "git", - "url": "https://github.com/sipwise/janus-admin.git" - }, - "devDependencies": { - "body-parser": "1.19.0", - "express": "4.17.1", - "mocha": "^8.3.2" - }, - "dependencies": { - "chai": "4.2.0", - "debug-logger": "0.4.1", - "lodash": "^4.17.21", - "superagent": "5.1.0", - "uuid": "3.3.2", - "validator": "11.1.0" - } -} diff --git a/src/admin.js b/src/admin.js deleted file mode 100644 index dc6f360..0000000 --- a/src/admin.js +++ /dev/null @@ -1,253 +0,0 @@ -'use strict'; - -const url = require('url'); -const validator = require('validator'); -const _ = require('lodash'); -const createId = require('uuid').v4; -const assert = require('chai').assert; -const userAgent = require('superagent'); -const Response = require('./response').Response; -const ResponseError = require('./error').ResponseError; -const logger = require('debug-logger')('janus:admin'); - -/** - * @class - */ -class Admin { - - constructor(options) { - assert.property(options, 'url', 'Missing option url'); - assert(validator.isURL(options.url, { - require_tld: false, - require_protocol: true - }), 'Invalid url', options.url); - assert.property(options, 'secret'); - this.url = url.parse(options.url); - this.secret = options.secret; - this.userAgent = options.userAgent || userAgent; - } - - makeUrl(path) { - return this.url.format() + path.replace(/^\//g, ''); - } - - request(req, options) { - return new Promise((resolve, reject)=>{ - let path = _.get(options, 'path', '/admin'); - req.admin_secret = this.secret; - req.transaction = createId(); - logger.debug('Request', req); - this.userAgent.post(this.makeUrl(path)).type('json').send(req).end((err, res)=>{ - if(_.isObject(err)) { - return reject(err); - } - logger.debug('Response', res.body); - let response = new Response(req, res.body); - if(response.isSuccess()) { - resolve(response); - } else { - reject(new ResponseError(response)); - } - }); - }); - } - - listSessions() { - return new Promise((resolve, reject)=>{ - this.request({ - janus: 'list_sessions' - }).then((res)=>{ - resolve({ - sessions: _.get(res.getResponse(), 'sessions', []), - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - listHandles(sessionId) { - return new Promise((resolve, reject)=>{ - assert.isString(sessionId); - this.request({ - janus: 'list_handles' - }, { - path: '/admin/' + sessionId - }).then((res)=>{ - resolve({ - handles: _.get(res.getResponse(), 'handles', []), - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - handleInfo(sessionId, handleId) { - return new Promise((resolve, reject)=>{ - assert.isString(sessionId); - assert.isString(handleId); - this.request({ - janus: 'handle_info' - }, { - path: '/admin/' + sessionId + '/' + handleId - }).then((res)=>{ - resolve({ - info: _.get(res.getResponse(), 'info', {}), - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - setLogLevel(level) { - return new Promise((resolve, reject)=>{ - assert.isNumber(level); - assert(_.inRange(level, 0, 8), 'Invalid log level'); - this.request({ - janus: 'set_log_level', - level: level - }).then((res)=>{ - resolve({ - level: res.getResponse().level, - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - setLockingDebug(debug) { - return new Promise((resolve, reject)=>{ - assert.isNumber(debug); - this.request({ - janus: 'set_locking_debug', - debug: debug - }).then((res)=>{ - resolve({ - debug: res.getResponse().debug, - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - addToken(token, plugins) { - return new Promise((resolve, reject)=>{ - assert.isString(token); - let request = { - janus: 'add_token', - token: token - }; - - if(_.isArray(plugins)) { - request.plugins = plugins; - } - - this.request(request).then((res)=>{ - resolve({ - plugins: res.getResponse().data.plugins, - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - allowToken(token, plugins) { - return new Promise((resolve, reject)=>{ - assert.isString(token); - assert.isArray(plugins); - assert(plugins.length > 0, 'Need at least one plugin to allow'); - this.request({ - janus: 'allow_token', - token: token, - plugins: plugins - }).then((res)=>{ - resolve({ - plugins: res.getResponse().data.plugins, - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - disallowToken(token, plugins) { - return new Promise((resolve, reject)=>{ - assert.isString(token); - assert.isArray(plugins); - assert(plugins.length > 0, 'Need at least one plugin to disallow'); - this.request({ - janus: 'disallow_token', - token: token, - plugins: plugins - }).then((res)=>{ - resolve({ - plugins: res.getResponse().data.plugins, - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - listTokens() { - return new Promise((resolve, reject)=>{ - this.request({ - janus: 'list_tokens' - }).then((res)=>{ - resolve({ - tokens: res.getResponse().data.tokens, - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - removeToken(token) { - return new Promise((resolve, reject)=>{ - this.request({ - janus: 'remove_token', - token: token - }).then((res)=>{ - resolve({ - response: res - }); - }).catch((err)=>{ - reject(err); - }); - }); - } - - removeAllTokens() { - return new Promise((resolve, reject)=>{ - this.listTokens().then((res)=>{ - let tokenRemovePromises = []; - _.forEach(res.tokens, (token)=>{ - tokenRemovePromises.push(this.removeToken(token.token)); - }); - return Promise.all(tokenRemovePromises); - }).then(()=>{ - resolve(); - }).catch((err)=>{ - reject(err); - }); - }); - } - -} - -module.exports.JanusAdmin = Admin; diff --git a/src/error.js b/src/error.js deleted file mode 100644 index 13fd21f..0000000 --- a/src/error.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var assert = require('chai').assert; - -/** - * @class - */ -class ResponseError extends Error { - - constructor(res) { - super(); - assert.equal(res.isError(), true, 'No error found in response'); - this.name = this.constructor.name; - this.message = res.getErrorMessage(); - this.code = res.getErrorCode(); - this.response = res; - } -} - -module.exports.ResponseError = ResponseError; diff --git a/src/mock/janus-admin-server.js b/src/mock/janus-admin-server.js deleted file mode 100644 index ad8e3d6..0000000 --- a/src/mock/janus-admin-server.js +++ /dev/null @@ -1,225 +0,0 @@ -'use strict'; - -process.env.DEBUG = ''; - -var _ = require('lodash'); -var http = require('http'); -var express = require('express'); -var bodyParser = require('body-parser'); -var logger = require('debug-logger')('mock:janus-admin-server'); - -/** - * @class - */ -class JanusAdminServer { - - constructor(options) { - options = options || {}; - this.port = options.port || 9000; - this.app = express(); - this.http = null; - } - - init() { - return new Promise((resolve, reject)=>{ - var requestHandler = (req, res, next)=>{ this.dispatchRequest(req, res, next); } - this.app.use(bodyParser.json()); - this.app.use((req, res, next)=>{ - logger.info('Request', req.originalUrl, req.body); - next(); - }); - this.app.post('/admin', requestHandler); - this.app.post('/admin/:sessionId', requestHandler); - this.app.post('/admin/:sessionId/:handleId', requestHandler); - this.http = http.createServer(this.app); - this.http.listen(this.port, (err)=>{ - if(_.isObject(err)) { - reject(err); - } else { - logger.info('Started'); - resolve(); - } - }); - }); - } - - getUrl() { - return 'http://localhost:' + this.port; - } - - getAdminSecret() { - return 'master'; - } - - dispatchRequest(req, res, next) { - switch(req.body.janus) { - case 'list_sessions': - this.listSessions(req, res, next); - break; - case 'list_handles': - this.listHandles(req, res, next); - break; - case 'handle_info': - this.handleInfo(req, res, next); - break; - case 'set_log_level': - this.setLogLevel(req, res, next); - break; - case 'set_locking_debug': - this.setLockingDebug(req, res, next); - break; - case 'add_token': - this.addToken(req, res, next); - break; - case 'allow_token': - this.allowToken(req, res, next); - break; - case 'disallow_token': - this.disallowToken(req, res, next); - break; - case 'list_tokens': - this.listTokens(req, res, next); - break; - case 'remove_token': - this.removeToken(req, res, next); - break; - } - } - - listSessions(req, res, next) { - res.json({ - janus: 'success', - transaction: req.body.transaction, - session: [] - }); - } - - listHandles(req, res, next) { - res.json({ - janus: 'success', - transaction: req.body.transaction, - session_id: req.params.sessionId, - handles: [] - }); - } - - handleInfo(req, res, next) { - res.json({ - janus: 'success', - transaction: req.body.transaction, - session_id: req.params.sessionId, - handle_id: req.params.handleId, - info: { - - } - }); - } - - setLogLevel(req, res, next) { - res.json({ - janus: 'success', - transaction: req.body.transaction, - level: req.body.level - }); - } - - setLockingDebug(req, res, next) { - res.json({ - janus: 'success', - transaction: req.body.transaction, - debug: req.body.debug - }); - } - - addToken(req, res, next) { - - var plugins = [ - "janus.plugin.audiobridge", - "janus.plugin.voicemail", - "janus.plugin.echotest", - "janus.plugin.recordplay", - "janus.plugin.videoroom", - "janus.plugin.videocall", - "janus.plugin.streaming", - "janus.plugin.sip" - ]; - if(_.isArray(req.body.plugins)) { - plugins = req.body.plugins; - } - - res.json({ - "janus": "success", - "transaction": req.body.transaction, - "data": { - "plugins": plugins - } - }); - } - - allowToken(req, res, next) { - - var plugins = [ - "janus.plugin.audiobridge", - "janus.plugin.voicemail" - ]; - - plugins = req.body.plugins.concat(plugins); - - res.json({ - "janus": "success", - "transaction": req.body.transaction, - "data": { - "plugins": plugins - } - }); - } - - disallowToken(req, res, next) { - - var plugins = [ - "janus.plugin.audiobridge", - "janus.plugin.voicemail" - ]; - - res.json({ - "janus": "success", - "transaction": req.body.transaction, - "data": { - "plugins": plugins - } - }); - } - - listTokens(req, res, next) { - res.json({ - "janus": "success", - "transaction": req.body.transaction, - "data": { - "tokens": [ - { - "token": "abcdef", - "allowed_plugins": [ - "janus.plugin.audiobridge", - "janus.plugin.voicemail", - "janus.plugin.recordplay", - "janus.plugin.videocall", - "janus.plugin.streaming", - "janus.plugin.sip", - "janus.plugin.videoroom", - "janus.plugin.echotest" - ] - } - ] - } - }); - } - - removeToken(req, res, next) { - res.json({ - "janus": "success", - "transaction": req.body.transaction - }); - } -} - -module.exports.JanusAdminServer = JanusAdminServer; diff --git a/src/response.js b/src/response.js deleted file mode 100644 index 8a62162..0000000 --- a/src/response.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var _ = require('lodash'); -var assert = require('chai').assert; - -/** - * @class - */ -class Response { - - constructor(req, res) { - assert.property(res, 'janus', 'Invalid response'); - this.request = req; - this.response = res; - } - - getRequest() { - return this.request; - } - - getResponse() { - return this.response; - } - - isSuccess() { - return this.response.janus === 'success'; - } - - isError() { - return this.response.janus === 'error' && _.has(this.response, 'error'); - } - - getErrorCode() { - return _.get(this.response, 'error.code', null); - } - - - getErrorMessage() { - return _.get(this.response, 'error.reason', null); - } -} - -module.exports.Response = Response; diff --git a/t/Dockerfile b/t/Dockerfile deleted file mode 100644 index bce1ce3..0000000 --- a/t/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -# DOCKER_NAME=janus-admin-bullseye -FROM docker.mgm.sipwise.com/sipwise-bullseye:latest - -# Important! Update this no-op ENV variable when this Dockerfile -# 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 2021-05-03 - -COPY t/sources.list.d/builddeps.list /etc/apt/sources.list.d/ -COPY t/sources.list.d/preferences /etc/apt/preferences.d/ - -RUN apt-get update && \ - apt-get install --assume-yes \ - curl \ - mocha \ - nodejs \ - npm \ - && \ - apt-get clean - -ADD package.json /tmp/ -ADD package-lock.json /tmp/ -ADD README.md /tmp/ - -WORKDIR /tmp - -RUN npm install /tmp - -RUN echo "cd /code && ./t/testrunner" >/root/.bash_history - -WORKDIR /code - -################################################################################ -# Instructions for usage (from root folder of git repository) -# ---------------------- -# When you want to build the base image from scratch -# (jump to the next section if you don't want to build yourself!). -# The first you need to put the proper NGCP sources at t/sources.list.d/builddeps.list -# for instance, trunk: -# % echo "deb https://deb.sipwise.com/autobuild/ release-trunk-bullseye main" > t/sources.list.d/builddeps.list -# % docker build --tag="janus-admin-bullseye" -f ./t/Dockerfile . -# % docker run --rm -i -t -v $(pwd):/code:ro -v /results janus-admin-bullseye:latest bash -# -# Use the existing docker image: -# % docker pull docker.mgm.sipwise.com/janus-admin-bullseye -# NOTE: run the following command from root folder of git repository: -# % docker run --rm -i -t -v $(pwd):/code:ro -v /results docker.mgm.sipwise.com/janus-admin-bullseye:latest bash -# -# Inside docker: -# cd /code && ./t/testrunner -################################################################################ diff --git a/t/sources.list.d/builddeps.list b/t/sources.list.d/builddeps.list deleted file mode 100644 index e69de29..0000000 diff --git a/t/sources.list.d/preferences b/t/sources.list.d/preferences deleted file mode 100644 index e69de29..0000000 diff --git a/t/testrunner b/t/testrunner deleted file mode 100755 index 6a29c14..0000000 --- a/t/testrunner +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -if ! [ -f /.dockerenv ] && ! grep -q 'devices:/docker' /proc/1/cgroup ; then - echo "Not running inside docker, exiting to avoid data damage." >&2 - exit 1 -fi - -set -e -set -u - -echo "### Copying and moving files" -cp -Rf . /tmp/code -ln -s /tmp/node_modules /tmp/code/node_modules -cd /tmp/code/ - -echo "################################################################################" -echo "Finished main setup, now running tests ..." - -npm test - -echo "Finished test execution, test execution returned with exit code." -echo "################################################################################" diff --git a/test/admin-spec.js b/test/admin-spec.js deleted file mode 100644 index 6341d69..0000000 --- a/test/admin-spec.js +++ /dev/null @@ -1,193 +0,0 @@ -'use strict'; - -const Admin = require('../src/admin').JanusAdmin; -const assert = require('chai').assert; -const _ = require('lodash'); -const JanusAdminServer = require('../src/mock/janus-admin-server').JanusAdminServer; - -describe('Admin', function() { - - let adminServer; - let adminClient; - - before(function(done){ - adminServer = new JanusAdminServer(); - adminServer.init().then(()=>{ - done(); - }).catch((err)=>{ - done(err); - }); - }); - - beforeEach(function(){ - adminClient = new Admin({ - url: adminServer.getUrl(), - secret: adminServer.getAdminSecret() - }); - }); - - it('should make url by given path', function(done){ - let url = 'http://localhost:7088'; - let finalUrl = url + '/path'; - let adminClient1 = new Admin({ - url: url, - secret: adminServer.getAdminSecret() - }); - let adminClient2 = new Admin({ - url: url + '/', - secret: adminServer.getAdminSecret() - }); - assert(adminClient1.makeUrl('/path'), finalUrl); - assert(adminClient1.makeUrl('path'), finalUrl); - assert(adminClient2.makeUrl('/path'), finalUrl); - assert(adminClient2.makeUrl('path'), finalUrl); - done(); - }); - - it('should throw an error caused by missing option url', function(done){ - try { - adminClient = new Admin({ - secret: adminServer.getAdminSecret() - }); - } catch(err) { - done(); - } - }); - - it('should throw an error caused by invalid url', function(done){ - try { - adminClient = new Admin({ - url: 'foo', - secret: adminServer.getAdminSecret() - }); - } catch(err) { - done(); - } - }); - - it('should list all sessions', function(done){ - adminClient.listSessions().then((res)=>{ - assert.isArray(res.sessions); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should list all handles', function(done){ - adminClient.listHandles('123456').then((res)=>{ - assert.isArray(res.handles); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should fetch single handle', function(done){ - adminClient.handleInfo('123456', '123456').then((res)=>{ - assert.isObject(res.info); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should set the log level', function(done){ - adminClient.setLogLevel(7).then((res)=>{ - assert.equal(res.level, 7); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should throw an error, caused by wrong log level', function(done){ - adminClient.setLogLevel(8).then(()=>{ - done(new Error()); - }).catch(()=>{ - done(); - }); - }); - - it('should set locking debug', function(done){ - adminClient.setLockingDebug(1).then((res)=>{ - assert.equal(res.debug, 1); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - describe('Token based authentication',function(){ - - let exampleToken = 'abcdef'; - let examplePlugins = [ - 'janus.plugin.videoroom', - 'janus.plugin.echotest' - ]; - - it('should add a new token', function(done){ - adminClient.addToken(exampleToken).then((res)=>{ - assert.isArray(res.plugins); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should add a new token, that has access to a set of given plugins', function(done){ - adminClient.addToken(exampleToken, examplePlugins).then((res)=>{ - assert.isArray(res.plugins); - assert.deepEqual(examplePlugins, res.plugins); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should allow a token to access a set of given plugins', function(done){ - adminClient.allowToken(exampleToken, examplePlugins).then((res)=>{ - assert.isArray(res.plugins); - assert.deepEqual(_.intersection(res.plugins, examplePlugins), examplePlugins); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should disallow a token to access a set of given plugins', function(done){ - adminClient.disallowToken(exampleToken, examplePlugins).then((res)=>{ - assert.isArray(res.plugins); - assert.deepEqual(_.intersection(res.plugins, examplePlugins), []); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should list all tokens', function(done){ - adminClient.listTokens().then((res)=>{ - assert.isArray(res.tokens); - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should remove a token', function(done){ - adminClient.removeToken(exampleToken).then(()=>{ - done(); - }).catch((err)=>{ - done(err); - }); - }); - - it('should remove all tokens', function(done){ - adminClient.removeAllTokens().then(()=>{ - done(); - }).catch((err)=>{ - done(err); - }); - }); - }); -});