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); - }); - }); - }); -});