├── .env ├── .gitignore ├── LICENSE ├── README.md ├── deploy.sh ├── index.js ├── package-lock.json ├── package.json ├── src ├── auth.js ├── c21request.js ├── chat21.js ├── contacts.js ├── conversations.js ├── firebaseAuth.js ├── groups.js ├── messages.js └── winston.js └── test ├── models ├── groups.js └── messages.js └── test.js /.env: -------------------------------------------------------------------------------- 1 | CHAT21_URL = https://us-central1-chat-v2-dev.cloudfunctions.net 2 | CHAT21_APPID = tilechat 3 | CHAT21_AUTH_URL = https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=AIzaSyDWMsqHBKmWVT7mWiSqBfRpS5U8YwTl7H0 4 | //CHAT21_API_KEY = eyJhbGciOiJSUzI1NiIsImtpZCI6IjhmNGQ4NmRhMDRiOGNiODhhNWVhNWVmNDAwMzI0ODJlNzY4NDExODUifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vY2hhdC12Mi1kZXYiLCJhdWQiOiJjaGF0LXYyLWRldiIsImF1dGhfdGltZSI6MTUzOTM0MTQ1MSwidXNlcl9pZCI6IjVhYWE5OTAyNGMzYjExMDAxNGI0NzhmMCIsInN1YiI6IjVhYWE5OTAyNGMzYjExMDAxNGI0NzhmMCIsImlhdCI6MTUzOTM0MTQ1MSwiZXhwIjoxNTM5MzQ1MDUxLCJlbWFpbCI6ImFuZHJlYS5sZW9AZnJvbnRpZXJlMjEuaXQiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsiYW5kcmVhLmxlb0Bmcm9udGllcmUyMS5pdCJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.NC6w0UCD_l4txdWtFd7zcKoqjMkozzfjMgPpL5lNh7dhVnX19eT0w_ntfs72vsgANz7XCXUQEpChRSJpVX4QcuizYZXyz8brFQUxHsoE3rxPjV4Z1dt0EHCJ0r4pppnL55VyFWuwKI2nJvCsm6LZywY509aFZTB0MmG9XdEx8cIe-D8_KBo1EmI8TfIBPFRUm5KtA6MlZ4zVfvxzEbKuFjQndA-FqGodr3fa-HH5aWJZWM3gWqK-bVDjnTboKjEcoxJSa9j0Q3hq0dIeaQ4ZimjFFwxVJR12E6GuEIHDIfJ-Y3st848RJG36ZuzoWaulxUt0Nt8gRvlv9bxfSboxzA 5 | 6 | 7 | FIREBASE_APIKEY = AIzaSyDWMsqHBKmWVT7mWiSqBfRpS5U8YwTl7H0 8 | FIREBASE_DATABASE = https://chat21-v2-dev.firebaseio.com 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # parcel-bundler cache (https://parceljs.org/) 61 | .cache 62 | 63 | # next.js build output 64 | .next 65 | 66 | # nuxt.js build output 67 | .nuxt 68 | 69 | # vuepress build output 70 | .vuepress/dist 71 | 72 | # Serverless directories 73 | .serverless 74 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-present Frontiere21 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # chat21-node-sdk 2 | 3 | # Test with : 4 | npm test 5 | 6 | 7 | ## Update version with : 8 | npm version 9 | 10 | ## Publish with: 11 | publish module with : 12 | 13 | npm publish --access public 14 | 15 | https://docs.npmjs.com/getting-started/publishing-npm-packages 16 | https://www.npmjs.com/docs/orgs/publishing-an-org-scoped-package.html -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | 2 | #version=`git diff HEAD^..HEAD -- "$(git rev-parse --show-toplevel)"/package.json | grep '^\+.*version' | sed -s 's/[^0-9\.]//g'` 3 | 4 | 5 | npm version patch 6 | version=`node -e 'console.log(require("./package.json").version)'` 7 | echo "version $version" 8 | 9 | if [ "$version" != "" ]; then 10 | git tag -a "v$version" -m "`git log -1 --format=%s`" 11 | echo "Created a new tag, v$version" 12 | git push --tags 13 | npm publish 14 | fi 15 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./src/chat21.js'); 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@chat21/chat21-node-sdk", 3 | "version": "1.1.8", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@dabh/diagnostics": { 8 | "version": "2.0.2", 9 | "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", 10 | "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", 11 | "requires": { 12 | "colorspace": "1.1.x", 13 | "enabled": "2.0.x", 14 | "kuler": "^2.0.0" 15 | } 16 | }, 17 | "@firebase/analytics": { 18 | "version": "0.6.2", 19 | "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.2.tgz", 20 | "integrity": "sha512-4Ceov+rPfOEPIdbjlpTim/wbcUUneIesHag4UOzvmFsRRXqbxLwQpyZQWEbTSriUeU8uTKj9yOW32hsskV9Klg==", 21 | "requires": { 22 | "@firebase/analytics-types": "0.4.0", 23 | "@firebase/component": "0.1.21", 24 | "@firebase/installations": "0.4.19", 25 | "@firebase/logger": "0.2.6", 26 | "@firebase/util": "0.3.4", 27 | "tslib": "^1.11.1" 28 | } 29 | }, 30 | "@firebase/analytics-types": { 31 | "version": "0.4.0", 32 | "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz", 33 | "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==" 34 | }, 35 | "@firebase/app": { 36 | "version": "0.6.14", 37 | "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.14.tgz", 38 | "integrity": "sha512-ZQKuiJ+fzr4tULgWoXbW+AZVTGsejOkSrlQ+zx78WiGKIubpFJLklnP3S0oYr/1nHzr4vaKuM4G8IL1Wv/+MpQ==", 39 | "requires": { 40 | "@firebase/app-types": "0.6.1", 41 | "@firebase/component": "0.1.21", 42 | "@firebase/logger": "0.2.6", 43 | "@firebase/util": "0.3.4", 44 | "dom-storage": "2.1.0", 45 | "tslib": "^1.11.1", 46 | "xmlhttprequest": "1.8.0" 47 | } 48 | }, 49 | "@firebase/app-types": { 50 | "version": "0.6.1", 51 | "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", 52 | "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" 53 | }, 54 | "@firebase/auth": { 55 | "version": "0.16.3", 56 | "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.16.3.tgz", 57 | "integrity": "sha512-0U+SJrh9K8vDv+lvWPYU9cAQBRPt8fpm3cK7yRZAwnN4jbcqfg+KBaddrDn28aIQYX+n4TrLiZ9TMJXPJfUYhQ==", 58 | "requires": { 59 | "@firebase/auth-types": "0.10.1" 60 | } 61 | }, 62 | "@firebase/auth-interop-types": { 63 | "version": "0.1.5", 64 | "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", 65 | "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==" 66 | }, 67 | "@firebase/auth-types": { 68 | "version": "0.10.1", 69 | "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz", 70 | "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==" 71 | }, 72 | "@firebase/component": { 73 | "version": "0.1.21", 74 | "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.21.tgz", 75 | "integrity": "sha512-kd5sVmCLB95EK81Pj+yDTea8pzN2qo/1yr0ua9yVi6UgMzm6zAeih73iVUkaat96MAHy26yosMufkvd3zC4IKg==", 76 | "requires": { 77 | "@firebase/util": "0.3.4", 78 | "tslib": "^1.11.1" 79 | } 80 | }, 81 | "@firebase/database": { 82 | "version": "0.9.3", 83 | "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.9.3.tgz", 84 | "integrity": "sha512-/ZxABwwknVFypPivQGRauF0WE9ZNr+WCucwCqAhxzQPgfUOaAKL5PZs9Oa/Yz42gMMfmjF+z6hPvSjW2ePlEcA==", 85 | "requires": { 86 | "@firebase/auth-interop-types": "0.1.5", 87 | "@firebase/component": "0.1.21", 88 | "@firebase/database-types": "0.7.0", 89 | "@firebase/logger": "0.2.6", 90 | "@firebase/util": "0.3.4", 91 | "faye-websocket": "0.11.3", 92 | "tslib": "^1.11.1" 93 | } 94 | }, 95 | "@firebase/database-types": { 96 | "version": "0.7.0", 97 | "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.0.tgz", 98 | "integrity": "sha512-FduQmPpUUOHgbOt7/vWlC1ntSLMEqqYessdQ/ODd7RFWm53iVa0T1mpIDtNwqd8gW3k7cajjSjcLjfQGtvLGDg==", 99 | "requires": { 100 | "@firebase/app-types": "0.6.1" 101 | } 102 | }, 103 | "@firebase/firestore": { 104 | "version": "2.1.6", 105 | "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-2.1.6.tgz", 106 | "integrity": "sha512-T7hNYP6lH3i6rqAzXvIqh30GmUvAl+6C4yUvrdHtz+RO3MeReK1TCE4mmAWBZApLCibVIZiMJ581qRB8KnON7A==", 107 | "requires": { 108 | "@firebase/component": "0.1.21", 109 | "@firebase/firestore-types": "2.1.0", 110 | "@firebase/logger": "0.2.6", 111 | "@firebase/util": "0.3.4", 112 | "@firebase/webchannel-wrapper": "0.4.1", 113 | "@grpc/grpc-js": "^1.0.0", 114 | "@grpc/proto-loader": "^0.5.0", 115 | "node-fetch": "2.6.1", 116 | "tslib": "^1.11.1" 117 | } 118 | }, 119 | "@firebase/firestore-types": { 120 | "version": "2.1.0", 121 | "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.1.0.tgz", 122 | "integrity": "sha512-jietErBWihMvJkqqEquQy5GgoEwzHnMXXC/TsVoe9FPysXm1/AeJS12taS7ZYvenAtyvL/AEJyKrRKRh4adcJQ==" 123 | }, 124 | "@firebase/functions": { 125 | "version": "0.6.1", 126 | "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.6.1.tgz", 127 | "integrity": "sha512-xNCAY3cLlVWE8Azf+/84OjnaXMoyUstJ3vwVRG0ie22QhsdQuPa1tXTiPX4Tmm+Hbbd/Aw0A/7dkEnuW+zYzaQ==", 128 | "requires": { 129 | "@firebase/component": "0.1.21", 130 | "@firebase/functions-types": "0.4.0", 131 | "@firebase/messaging-types": "0.5.0", 132 | "node-fetch": "2.6.1", 133 | "tslib": "^1.11.1" 134 | } 135 | }, 136 | "@firebase/functions-types": { 137 | "version": "0.4.0", 138 | "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.4.0.tgz", 139 | "integrity": "sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ==" 140 | }, 141 | "@firebase/installations": { 142 | "version": "0.4.19", 143 | "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.19.tgz", 144 | "integrity": "sha512-QqAQzosKVVqIx7oMt5ujF4NsIXgtlTnej4JXGJ8sQQuJoMnt3T+PFQRHbr7uOfVaBiHYhEaXCcmmhfKUHwKftw==", 145 | "requires": { 146 | "@firebase/component": "0.1.21", 147 | "@firebase/installations-types": "0.3.4", 148 | "@firebase/util": "0.3.4", 149 | "idb": "3.0.2", 150 | "tslib": "^1.11.1" 151 | } 152 | }, 153 | "@firebase/installations-types": { 154 | "version": "0.3.4", 155 | "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", 156 | "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==" 157 | }, 158 | "@firebase/logger": { 159 | "version": "0.2.6", 160 | "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", 161 | "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" 162 | }, 163 | "@firebase/messaging": { 164 | "version": "0.7.3", 165 | "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.3.tgz", 166 | "integrity": "sha512-63nOP2SmQJrj9jrhV3K96L5MRKS6AqmFVLX1XbGk6K6lz38ZC4LIoCcHxzUBXY7fCAuZvNmh/YB3pE8B2mTs8A==", 167 | "requires": { 168 | "@firebase/component": "0.1.21", 169 | "@firebase/installations": "0.4.19", 170 | "@firebase/messaging-types": "0.5.0", 171 | "@firebase/util": "0.3.4", 172 | "idb": "3.0.2", 173 | "tslib": "^1.11.1" 174 | } 175 | }, 176 | "@firebase/messaging-types": { 177 | "version": "0.5.0", 178 | "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", 179 | "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==" 180 | }, 181 | "@firebase/performance": { 182 | "version": "0.4.5", 183 | "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.5.tgz", 184 | "integrity": "sha512-oenEOaV/UzvV8XPi8afYQ71RzyrHoBesqOyXqb1TOg7dpU+i+UJ5PS8K64DytKUHTxQl+UJFcuxNpsoy9BpWzw==", 185 | "requires": { 186 | "@firebase/component": "0.1.21", 187 | "@firebase/installations": "0.4.19", 188 | "@firebase/logger": "0.2.6", 189 | "@firebase/performance-types": "0.0.13", 190 | "@firebase/util": "0.3.4", 191 | "tslib": "^1.11.1" 192 | } 193 | }, 194 | "@firebase/performance-types": { 195 | "version": "0.0.13", 196 | "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", 197 | "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" 198 | }, 199 | "@firebase/polyfill": { 200 | "version": "0.3.36", 201 | "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz", 202 | "integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==", 203 | "requires": { 204 | "core-js": "3.6.5", 205 | "promise-polyfill": "8.1.3", 206 | "whatwg-fetch": "2.0.4" 207 | } 208 | }, 209 | "@firebase/remote-config": { 210 | "version": "0.1.30", 211 | "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.30.tgz", 212 | "integrity": "sha512-LAfLDcp1AN0V/7AkxBuTKy+Qnq9fKYKxbA5clrXRNVzJbTVnF5eFGsaUOlkes0ESG6lbqKy5ZcDgdl73zBIhAA==", 213 | "requires": { 214 | "@firebase/component": "0.1.21", 215 | "@firebase/installations": "0.4.19", 216 | "@firebase/logger": "0.2.6", 217 | "@firebase/remote-config-types": "0.1.9", 218 | "@firebase/util": "0.3.4", 219 | "tslib": "^1.11.1" 220 | } 221 | }, 222 | "@firebase/remote-config-types": { 223 | "version": "0.1.9", 224 | "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", 225 | "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" 226 | }, 227 | "@firebase/storage": { 228 | "version": "0.4.2", 229 | "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.4.2.tgz", 230 | "integrity": "sha512-87CrvKrf8kijVekRBmUs8htsNz7N5X/pDhv3BvJBqw8K65GsUolpyjx0f4QJRkCRUYmh3MSkpa5P08lpVbC6nQ==", 231 | "requires": { 232 | "@firebase/component": "0.1.21", 233 | "@firebase/storage-types": "0.3.13", 234 | "@firebase/util": "0.3.4", 235 | "tslib": "^1.11.1" 236 | } 237 | }, 238 | "@firebase/storage-types": { 239 | "version": "0.3.13", 240 | "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", 241 | "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==" 242 | }, 243 | "@firebase/util": { 244 | "version": "0.3.4", 245 | "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.4.tgz", 246 | "integrity": "sha512-VwjJUE2Vgr2UMfH63ZtIX9Hd7x+6gayi6RUXaTqEYxSbf/JmehLmAEYSuxS/NckfzAXWeGnKclvnXVibDgpjQQ==", 247 | "requires": { 248 | "tslib": "^1.11.1" 249 | } 250 | }, 251 | "@firebase/webchannel-wrapper": { 252 | "version": "0.4.1", 253 | "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.4.1.tgz", 254 | "integrity": "sha512-0yPjzuzGMkW1GkrC8yWsiN7vt1OzkMIi9HgxRmKREZl2wnNPOKo/yScTjXf/O57HM8dltqxPF6jlNLFVtc2qdw==" 255 | }, 256 | "@grpc/grpc-js": { 257 | "version": "1.2.6", 258 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.2.6.tgz", 259 | "integrity": "sha512-wfYwFy7CvVEmBKzeDX1kQQYrv5NBpe8Z+VwXipFvqof3lCXKch7k+4T3grKtptaH5GQ5KP9iKwPr9hMDSynIUw==", 260 | "requires": { 261 | "@types/node": ">=12.12.47", 262 | "google-auth-library": "^6.1.1", 263 | "semver": "^6.2.0" 264 | } 265 | }, 266 | "@grpc/proto-loader": { 267 | "version": "0.5.6", 268 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.6.tgz", 269 | "integrity": "sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ==", 270 | "requires": { 271 | "lodash.camelcase": "^4.3.0", 272 | "protobufjs": "^6.8.6" 273 | } 274 | }, 275 | "@protobufjs/aspromise": { 276 | "version": "1.1.2", 277 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 278 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 279 | }, 280 | "@protobufjs/base64": { 281 | "version": "1.1.2", 282 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 283 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 284 | }, 285 | "@protobufjs/codegen": { 286 | "version": "2.0.4", 287 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 288 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 289 | }, 290 | "@protobufjs/eventemitter": { 291 | "version": "1.1.0", 292 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 293 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 294 | }, 295 | "@protobufjs/fetch": { 296 | "version": "1.1.0", 297 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 298 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 299 | "requires": { 300 | "@protobufjs/aspromise": "^1.1.1", 301 | "@protobufjs/inquire": "^1.1.0" 302 | } 303 | }, 304 | "@protobufjs/float": { 305 | "version": "1.0.2", 306 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 307 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 308 | }, 309 | "@protobufjs/inquire": { 310 | "version": "1.1.0", 311 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 312 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 313 | }, 314 | "@protobufjs/path": { 315 | "version": "1.1.2", 316 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 317 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 318 | }, 319 | "@protobufjs/pool": { 320 | "version": "1.1.0", 321 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 322 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 323 | }, 324 | "@protobufjs/utf8": { 325 | "version": "1.1.0", 326 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 327 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 328 | }, 329 | "@types/long": { 330 | "version": "4.0.1", 331 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 332 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 333 | }, 334 | "@types/node": { 335 | "version": "14.14.27", 336 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.27.tgz", 337 | "integrity": "sha512-Ecfmo4YDQPwuqTCl1yBxLV5ihKfRlkBmzUEDcfIRvDxOTGQEeikr317Ln7Gcv0tjA8dVgKI3rniqW2G1OyKDng==" 338 | }, 339 | "@ungap/promise-all-settled": { 340 | "version": "1.1.2", 341 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 342 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" 343 | }, 344 | "abort-controller": { 345 | "version": "3.0.0", 346 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 347 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 348 | "requires": { 349 | "event-target-shim": "^5.0.0" 350 | } 351 | }, 352 | "agent-base": { 353 | "version": "6.0.2", 354 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 355 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 356 | "requires": { 357 | "debug": "4" 358 | } 359 | }, 360 | "ajv": { 361 | "version": "6.12.6", 362 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 363 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 364 | "requires": { 365 | "fast-deep-equal": "^3.1.1", 366 | "fast-json-stable-stringify": "^2.0.0", 367 | "json-schema-traverse": "^0.4.1", 368 | "uri-js": "^4.2.2" 369 | } 370 | }, 371 | "ansi-colors": { 372 | "version": "4.1.1", 373 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 374 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 375 | }, 376 | "ansi-regex": { 377 | "version": "3.0.0", 378 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 379 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 380 | }, 381 | "ansi-styles": { 382 | "version": "4.3.0", 383 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 384 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 385 | "requires": { 386 | "color-convert": "^2.0.1" 387 | }, 388 | "dependencies": { 389 | "color-convert": { 390 | "version": "2.0.1", 391 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 392 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 393 | "requires": { 394 | "color-name": "~1.1.4" 395 | } 396 | }, 397 | "color-name": { 398 | "version": "1.1.4", 399 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 400 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 401 | } 402 | } 403 | }, 404 | "anymatch": { 405 | "version": "3.1.1", 406 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 407 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 408 | "requires": { 409 | "normalize-path": "^3.0.0", 410 | "picomatch": "^2.0.4" 411 | } 412 | }, 413 | "argparse": { 414 | "version": "2.0.1", 415 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 416 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 417 | }, 418 | "arrify": { 419 | "version": "2.0.1", 420 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 421 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" 422 | }, 423 | "asap": { 424 | "version": "2.0.6", 425 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 426 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 427 | }, 428 | "asn1": { 429 | "version": "0.2.4", 430 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 431 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 432 | "requires": { 433 | "safer-buffer": "~2.1.0" 434 | } 435 | }, 436 | "assert-plus": { 437 | "version": "1.0.0", 438 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 439 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 440 | }, 441 | "assertion-error": { 442 | "version": "1.1.0", 443 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 444 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" 445 | }, 446 | "async": { 447 | "version": "3.2.0", 448 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", 449 | "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" 450 | }, 451 | "asynckit": { 452 | "version": "0.4.0", 453 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 454 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 455 | }, 456 | "aws-sign2": { 457 | "version": "0.7.0", 458 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 459 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 460 | }, 461 | "aws4": { 462 | "version": "1.11.0", 463 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 464 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 465 | }, 466 | "balanced-match": { 467 | "version": "1.0.0", 468 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 469 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 470 | }, 471 | "base64-js": { 472 | "version": "1.5.1", 473 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 474 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 475 | }, 476 | "bcrypt-pbkdf": { 477 | "version": "1.0.2", 478 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 479 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 480 | "requires": { 481 | "tweetnacl": "^0.14.3" 482 | } 483 | }, 484 | "bignumber.js": { 485 | "version": "9.0.1", 486 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", 487 | "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" 488 | }, 489 | "binary-extensions": { 490 | "version": "2.2.0", 491 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 492 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 493 | }, 494 | "brace-expansion": { 495 | "version": "1.1.11", 496 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 497 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 498 | "requires": { 499 | "balanced-match": "^1.0.0", 500 | "concat-map": "0.0.1" 501 | } 502 | }, 503 | "braces": { 504 | "version": "3.0.2", 505 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 506 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 507 | "requires": { 508 | "fill-range": "^7.0.1" 509 | } 510 | }, 511 | "browser-stdout": { 512 | "version": "1.3.1", 513 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 514 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" 515 | }, 516 | "buffer-equal-constant-time": { 517 | "version": "1.0.1", 518 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 519 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 520 | }, 521 | "camelcase": { 522 | "version": "6.2.0", 523 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 524 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" 525 | }, 526 | "caseless": { 527 | "version": "0.12.0", 528 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 529 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 530 | }, 531 | "chai": { 532 | "version": "4.3.0", 533 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.0.tgz", 534 | "integrity": "sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA==", 535 | "requires": { 536 | "assertion-error": "^1.1.0", 537 | "check-error": "^1.0.2", 538 | "deep-eql": "^3.0.1", 539 | "get-func-name": "^2.0.0", 540 | "pathval": "^1.1.0", 541 | "type-detect": "^4.0.5" 542 | } 543 | }, 544 | "chalk": { 545 | "version": "4.1.0", 546 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 547 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 548 | "requires": { 549 | "ansi-styles": "^4.1.0", 550 | "supports-color": "^7.1.0" 551 | }, 552 | "dependencies": { 553 | "supports-color": { 554 | "version": "7.2.0", 555 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 556 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 557 | "requires": { 558 | "has-flag": "^4.0.0" 559 | } 560 | } 561 | } 562 | }, 563 | "check-error": { 564 | "version": "1.0.2", 565 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 566 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" 567 | }, 568 | "chokidar": { 569 | "version": "3.5.1", 570 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", 571 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", 572 | "requires": { 573 | "anymatch": "~3.1.1", 574 | "braces": "~3.0.2", 575 | "fsevents": "~2.3.1", 576 | "glob-parent": "~5.1.0", 577 | "is-binary-path": "~2.1.0", 578 | "is-glob": "~4.0.1", 579 | "normalize-path": "~3.0.0", 580 | "readdirp": "~3.5.0" 581 | } 582 | }, 583 | "cliui": { 584 | "version": "7.0.4", 585 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 586 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 587 | "requires": { 588 | "string-width": "^4.2.0", 589 | "strip-ansi": "^6.0.0", 590 | "wrap-ansi": "^7.0.0" 591 | }, 592 | "dependencies": { 593 | "ansi-regex": { 594 | "version": "5.0.0", 595 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 596 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 597 | }, 598 | "is-fullwidth-code-point": { 599 | "version": "3.0.0", 600 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 601 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 602 | }, 603 | "string-width": { 604 | "version": "4.2.0", 605 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 606 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 607 | "requires": { 608 | "emoji-regex": "^8.0.0", 609 | "is-fullwidth-code-point": "^3.0.0", 610 | "strip-ansi": "^6.0.0" 611 | } 612 | }, 613 | "strip-ansi": { 614 | "version": "6.0.0", 615 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 616 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 617 | "requires": { 618 | "ansi-regex": "^5.0.0" 619 | } 620 | } 621 | } 622 | }, 623 | "color": { 624 | "version": "3.0.0", 625 | "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", 626 | "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", 627 | "requires": { 628 | "color-convert": "^1.9.1", 629 | "color-string": "^1.5.2" 630 | } 631 | }, 632 | "color-convert": { 633 | "version": "1.9.3", 634 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 635 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 636 | "requires": { 637 | "color-name": "1.1.3" 638 | } 639 | }, 640 | "color-name": { 641 | "version": "1.1.3", 642 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 643 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 644 | }, 645 | "color-string": { 646 | "version": "1.5.4", 647 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", 648 | "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", 649 | "requires": { 650 | "color-name": "^1.0.0", 651 | "simple-swizzle": "^0.2.2" 652 | } 653 | }, 654 | "colors": { 655 | "version": "1.4.0", 656 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 657 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" 658 | }, 659 | "colorspace": { 660 | "version": "1.1.2", 661 | "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", 662 | "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", 663 | "requires": { 664 | "color": "3.0.x", 665 | "text-hex": "1.0.x" 666 | } 667 | }, 668 | "combined-stream": { 669 | "version": "1.0.8", 670 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 671 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 672 | "requires": { 673 | "delayed-stream": "~1.0.0" 674 | } 675 | }, 676 | "concat-map": { 677 | "version": "0.0.1", 678 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 679 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 680 | }, 681 | "core-js": { 682 | "version": "3.6.5", 683 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", 684 | "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" 685 | }, 686 | "core-util-is": { 687 | "version": "1.0.2", 688 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 689 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 690 | }, 691 | "dashdash": { 692 | "version": "1.14.1", 693 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 694 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 695 | "requires": { 696 | "assert-plus": "^1.0.0" 697 | } 698 | }, 699 | "debug": { 700 | "version": "4.3.1", 701 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 702 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 703 | "requires": { 704 | "ms": "2.1.2" 705 | } 706 | }, 707 | "decamelize": { 708 | "version": "4.0.0", 709 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 710 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" 711 | }, 712 | "deep-eql": { 713 | "version": "3.0.1", 714 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 715 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 716 | "requires": { 717 | "type-detect": "^4.0.0" 718 | } 719 | }, 720 | "delayed-stream": { 721 | "version": "1.0.0", 722 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 723 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 724 | }, 725 | "diff": { 726 | "version": "5.0.0", 727 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 728 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" 729 | }, 730 | "dom-storage": { 731 | "version": "2.1.0", 732 | "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", 733 | "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" 734 | }, 735 | "dotenv": { 736 | "version": "8.2.0", 737 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 738 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 739 | }, 740 | "ecc-jsbn": { 741 | "version": "0.1.2", 742 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 743 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 744 | "requires": { 745 | "jsbn": "~0.1.0", 746 | "safer-buffer": "^2.1.0" 747 | } 748 | }, 749 | "ecdsa-sig-formatter": { 750 | "version": "1.0.11", 751 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 752 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 753 | "requires": { 754 | "safe-buffer": "^5.0.1" 755 | } 756 | }, 757 | "emoji-regex": { 758 | "version": "8.0.0", 759 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 760 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 761 | }, 762 | "enabled": { 763 | "version": "2.0.0", 764 | "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", 765 | "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" 766 | }, 767 | "escalade": { 768 | "version": "3.1.1", 769 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 770 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 771 | }, 772 | "escape-string-regexp": { 773 | "version": "4.0.0", 774 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 775 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 776 | }, 777 | "event-target-shim": { 778 | "version": "5.0.1", 779 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 780 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 781 | }, 782 | "extend": { 783 | "version": "3.0.2", 784 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 785 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 786 | }, 787 | "extsprintf": { 788 | "version": "1.3.0", 789 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 790 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 791 | }, 792 | "fast-deep-equal": { 793 | "version": "3.1.3", 794 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 795 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 796 | }, 797 | "fast-json-stable-stringify": { 798 | "version": "2.1.0", 799 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 800 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 801 | }, 802 | "fast-safe-stringify": { 803 | "version": "2.0.7", 804 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", 805 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" 806 | }, 807 | "fast-text-encoding": { 808 | "version": "1.0.3", 809 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", 810 | "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" 811 | }, 812 | "faye-websocket": { 813 | "version": "0.11.3", 814 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", 815 | "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", 816 | "requires": { 817 | "websocket-driver": ">=0.5.1" 818 | } 819 | }, 820 | "fecha": { 821 | "version": "4.2.0", 822 | "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", 823 | "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" 824 | }, 825 | "fill-range": { 826 | "version": "7.0.1", 827 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 828 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 829 | "requires": { 830 | "to-regex-range": "^5.0.1" 831 | } 832 | }, 833 | "find-up": { 834 | "version": "5.0.0", 835 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 836 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 837 | "requires": { 838 | "locate-path": "^6.0.0", 839 | "path-exists": "^4.0.0" 840 | } 841 | }, 842 | "firebase": { 843 | "version": "8.2.7", 844 | "resolved": "https://registry.npmjs.org/firebase/-/firebase-8.2.7.tgz", 845 | "integrity": "sha512-HSfaOQjSA//VKxPmPfjKmv8HMH5DwdckaKXKpBJCHSkBkqqFehP5dG9I7+06X1GTycXgg6U6i1zqqBSt6zWTxw==", 846 | "requires": { 847 | "@firebase/analytics": "0.6.2", 848 | "@firebase/app": "0.6.14", 849 | "@firebase/app-types": "0.6.1", 850 | "@firebase/auth": "0.16.3", 851 | "@firebase/database": "0.9.3", 852 | "@firebase/firestore": "2.1.6", 853 | "@firebase/functions": "0.6.1", 854 | "@firebase/installations": "0.4.19", 855 | "@firebase/messaging": "0.7.3", 856 | "@firebase/performance": "0.4.5", 857 | "@firebase/polyfill": "0.3.36", 858 | "@firebase/remote-config": "0.1.30", 859 | "@firebase/storage": "0.4.2", 860 | "@firebase/util": "0.3.4" 861 | } 862 | }, 863 | "flat": { 864 | "version": "5.0.2", 865 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 866 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" 867 | }, 868 | "fn.name": { 869 | "version": "1.1.0", 870 | "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", 871 | "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" 872 | }, 873 | "forever-agent": { 874 | "version": "0.6.1", 875 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 876 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 877 | }, 878 | "form-data": { 879 | "version": "2.3.3", 880 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 881 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 882 | "requires": { 883 | "asynckit": "^0.4.0", 884 | "combined-stream": "^1.0.6", 885 | "mime-types": "^2.1.12" 886 | } 887 | }, 888 | "fs.realpath": { 889 | "version": "1.0.0", 890 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 891 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 892 | }, 893 | "fsevents": { 894 | "version": "2.3.2", 895 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 896 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 897 | "optional": true 898 | }, 899 | "gaxios": { 900 | "version": "4.1.0", 901 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.1.0.tgz", 902 | "integrity": "sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg==", 903 | "requires": { 904 | "abort-controller": "^3.0.0", 905 | "extend": "^3.0.2", 906 | "https-proxy-agent": "^5.0.0", 907 | "is-stream": "^2.0.0", 908 | "node-fetch": "^2.3.0" 909 | } 910 | }, 911 | "gcp-metadata": { 912 | "version": "4.2.1", 913 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz", 914 | "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==", 915 | "requires": { 916 | "gaxios": "^4.0.0", 917 | "json-bigint": "^1.0.0" 918 | } 919 | }, 920 | "get-caller-file": { 921 | "version": "2.0.5", 922 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 923 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 924 | }, 925 | "get-func-name": { 926 | "version": "2.0.0", 927 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 928 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" 929 | }, 930 | "getpass": { 931 | "version": "0.1.7", 932 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 933 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 934 | "requires": { 935 | "assert-plus": "^1.0.0" 936 | } 937 | }, 938 | "glob": { 939 | "version": "7.1.6", 940 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 941 | "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", 942 | "requires": { 943 | "fs.realpath": "^1.0.0", 944 | "inflight": "^1.0.4", 945 | "inherits": "2", 946 | "minimatch": "^3.0.4", 947 | "once": "^1.3.0", 948 | "path-is-absolute": "^1.0.0" 949 | } 950 | }, 951 | "glob-parent": { 952 | "version": "5.1.1", 953 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 954 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 955 | "requires": { 956 | "is-glob": "^4.0.1" 957 | } 958 | }, 959 | "google-auth-library": { 960 | "version": "6.1.6", 961 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", 962 | "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", 963 | "requires": { 964 | "arrify": "^2.0.0", 965 | "base64-js": "^1.3.0", 966 | "ecdsa-sig-formatter": "^1.0.11", 967 | "fast-text-encoding": "^1.0.0", 968 | "gaxios": "^4.0.0", 969 | "gcp-metadata": "^4.2.0", 970 | "gtoken": "^5.0.4", 971 | "jws": "^4.0.0", 972 | "lru-cache": "^6.0.0" 973 | } 974 | }, 975 | "google-p12-pem": { 976 | "version": "3.0.3", 977 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", 978 | "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", 979 | "requires": { 980 | "node-forge": "^0.10.0" 981 | } 982 | }, 983 | "growl": { 984 | "version": "1.10.5", 985 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 986 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" 987 | }, 988 | "gtoken": { 989 | "version": "5.2.1", 990 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", 991 | "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==", 992 | "requires": { 993 | "gaxios": "^4.0.0", 994 | "google-p12-pem": "^3.0.3", 995 | "jws": "^4.0.0" 996 | } 997 | }, 998 | "har-schema": { 999 | "version": "2.0.0", 1000 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1001 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1002 | }, 1003 | "har-validator": { 1004 | "version": "5.1.5", 1005 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 1006 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 1007 | "requires": { 1008 | "ajv": "^6.12.3", 1009 | "har-schema": "^2.0.0" 1010 | } 1011 | }, 1012 | "has-flag": { 1013 | "version": "4.0.0", 1014 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1015 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1016 | }, 1017 | "he": { 1018 | "version": "1.2.0", 1019 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1020 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 1021 | }, 1022 | "http-parser-js": { 1023 | "version": "0.5.3", 1024 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", 1025 | "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" 1026 | }, 1027 | "http-signature": { 1028 | "version": "1.2.0", 1029 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1030 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1031 | "requires": { 1032 | "assert-plus": "^1.0.0", 1033 | "jsprim": "^1.2.2", 1034 | "sshpk": "^1.7.0" 1035 | } 1036 | }, 1037 | "https-proxy-agent": { 1038 | "version": "5.0.0", 1039 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1040 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1041 | "requires": { 1042 | "agent-base": "6", 1043 | "debug": "4" 1044 | } 1045 | }, 1046 | "idb": { 1047 | "version": "3.0.2", 1048 | "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", 1049 | "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" 1050 | }, 1051 | "inflight": { 1052 | "version": "1.0.6", 1053 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1054 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1055 | "requires": { 1056 | "once": "^1.3.0", 1057 | "wrappy": "1" 1058 | } 1059 | }, 1060 | "inherits": { 1061 | "version": "2.0.4", 1062 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1063 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1064 | }, 1065 | "is-arrayish": { 1066 | "version": "0.3.2", 1067 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1068 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 1069 | }, 1070 | "is-binary-path": { 1071 | "version": "2.1.0", 1072 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1073 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1074 | "requires": { 1075 | "binary-extensions": "^2.0.0" 1076 | } 1077 | }, 1078 | "is-extglob": { 1079 | "version": "2.1.1", 1080 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1081 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 1082 | }, 1083 | "is-fullwidth-code-point": { 1084 | "version": "2.0.0", 1085 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1086 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1087 | }, 1088 | "is-glob": { 1089 | "version": "4.0.1", 1090 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1091 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1092 | "requires": { 1093 | "is-extglob": "^2.1.1" 1094 | } 1095 | }, 1096 | "is-number": { 1097 | "version": "7.0.0", 1098 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1099 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1100 | }, 1101 | "is-plain-obj": { 1102 | "version": "2.1.0", 1103 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1104 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" 1105 | }, 1106 | "is-stream": { 1107 | "version": "2.0.0", 1108 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 1109 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" 1110 | }, 1111 | "is-typedarray": { 1112 | "version": "1.0.0", 1113 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1114 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1115 | }, 1116 | "isarray": { 1117 | "version": "1.0.0", 1118 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1119 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1120 | }, 1121 | "isexe": { 1122 | "version": "2.0.0", 1123 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1124 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 1125 | }, 1126 | "isstream": { 1127 | "version": "0.1.2", 1128 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1129 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1130 | }, 1131 | "js-yaml": { 1132 | "version": "4.0.0", 1133 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", 1134 | "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", 1135 | "requires": { 1136 | "argparse": "^2.0.1" 1137 | } 1138 | }, 1139 | "jsbn": { 1140 | "version": "0.1.1", 1141 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1142 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1143 | }, 1144 | "json-bigint": { 1145 | "version": "1.0.0", 1146 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 1147 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 1148 | "requires": { 1149 | "bignumber.js": "^9.0.0" 1150 | } 1151 | }, 1152 | "json-schema": { 1153 | "version": "0.2.3", 1154 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1155 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1156 | }, 1157 | "json-schema-traverse": { 1158 | "version": "0.4.1", 1159 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1160 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1161 | }, 1162 | "json-stringify-safe": { 1163 | "version": "5.0.1", 1164 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1165 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1166 | }, 1167 | "jsprim": { 1168 | "version": "1.4.1", 1169 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1170 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1171 | "requires": { 1172 | "assert-plus": "1.0.0", 1173 | "extsprintf": "1.3.0", 1174 | "json-schema": "0.2.3", 1175 | "verror": "1.10.0" 1176 | } 1177 | }, 1178 | "jwa": { 1179 | "version": "2.0.0", 1180 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", 1181 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", 1182 | "requires": { 1183 | "buffer-equal-constant-time": "1.0.1", 1184 | "ecdsa-sig-formatter": "1.0.11", 1185 | "safe-buffer": "^5.0.1" 1186 | } 1187 | }, 1188 | "jws": { 1189 | "version": "4.0.0", 1190 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", 1191 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", 1192 | "requires": { 1193 | "jwa": "^2.0.0", 1194 | "safe-buffer": "^5.0.1" 1195 | } 1196 | }, 1197 | "kuler": { 1198 | "version": "2.0.0", 1199 | "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", 1200 | "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" 1201 | }, 1202 | "locate-path": { 1203 | "version": "6.0.0", 1204 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1205 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1206 | "requires": { 1207 | "p-locate": "^5.0.0" 1208 | } 1209 | }, 1210 | "lodash.camelcase": { 1211 | "version": "4.3.0", 1212 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1213 | "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" 1214 | }, 1215 | "log-symbols": { 1216 | "version": "4.0.0", 1217 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", 1218 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", 1219 | "requires": { 1220 | "chalk": "^4.0.0" 1221 | } 1222 | }, 1223 | "logform": { 1224 | "version": "2.2.0", 1225 | "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", 1226 | "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", 1227 | "requires": { 1228 | "colors": "^1.2.1", 1229 | "fast-safe-stringify": "^2.0.4", 1230 | "fecha": "^4.2.0", 1231 | "ms": "^2.1.1", 1232 | "triple-beam": "^1.3.0" 1233 | }, 1234 | "dependencies": { 1235 | "ms": { 1236 | "version": "2.1.3", 1237 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1238 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1239 | } 1240 | } 1241 | }, 1242 | "long": { 1243 | "version": "4.0.0", 1244 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1245 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1246 | }, 1247 | "lru-cache": { 1248 | "version": "6.0.0", 1249 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1250 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1251 | "requires": { 1252 | "yallist": "^4.0.0" 1253 | } 1254 | }, 1255 | "mime-db": { 1256 | "version": "1.45.0", 1257 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", 1258 | "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" 1259 | }, 1260 | "mime-types": { 1261 | "version": "2.1.28", 1262 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", 1263 | "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", 1264 | "requires": { 1265 | "mime-db": "1.45.0" 1266 | } 1267 | }, 1268 | "minimatch": { 1269 | "version": "3.0.4", 1270 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1271 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1272 | "requires": { 1273 | "brace-expansion": "^1.1.7" 1274 | } 1275 | }, 1276 | "mocha": { 1277 | "version": "8.3.0", 1278 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz", 1279 | "integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==", 1280 | "requires": { 1281 | "@ungap/promise-all-settled": "1.1.2", 1282 | "ansi-colors": "4.1.1", 1283 | "browser-stdout": "1.3.1", 1284 | "chokidar": "3.5.1", 1285 | "debug": "4.3.1", 1286 | "diff": "5.0.0", 1287 | "escape-string-regexp": "4.0.0", 1288 | "find-up": "5.0.0", 1289 | "glob": "7.1.6", 1290 | "growl": "1.10.5", 1291 | "he": "1.2.0", 1292 | "js-yaml": "4.0.0", 1293 | "log-symbols": "4.0.0", 1294 | "minimatch": "3.0.4", 1295 | "ms": "2.1.3", 1296 | "nanoid": "3.1.20", 1297 | "serialize-javascript": "5.0.1", 1298 | "strip-json-comments": "3.1.1", 1299 | "supports-color": "8.1.1", 1300 | "which": "2.0.2", 1301 | "wide-align": "1.1.3", 1302 | "workerpool": "6.1.0", 1303 | "yargs": "16.2.0", 1304 | "yargs-parser": "20.2.4", 1305 | "yargs-unparser": "2.0.0" 1306 | }, 1307 | "dependencies": { 1308 | "ms": { 1309 | "version": "2.1.3", 1310 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1311 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1312 | } 1313 | } 1314 | }, 1315 | "ms": { 1316 | "version": "2.1.2", 1317 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1318 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1319 | }, 1320 | "nanoid": { 1321 | "version": "3.1.20", 1322 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", 1323 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" 1324 | }, 1325 | "node-fetch": { 1326 | "version": "2.6.1", 1327 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1328 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1329 | }, 1330 | "node-forge": { 1331 | "version": "0.10.0", 1332 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", 1333 | "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" 1334 | }, 1335 | "normalize-path": { 1336 | "version": "3.0.0", 1337 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1338 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 1339 | }, 1340 | "oauth-sign": { 1341 | "version": "0.9.0", 1342 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1343 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1344 | }, 1345 | "once": { 1346 | "version": "1.4.0", 1347 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1348 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1349 | "requires": { 1350 | "wrappy": "1" 1351 | } 1352 | }, 1353 | "one-time": { 1354 | "version": "1.0.0", 1355 | "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", 1356 | "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", 1357 | "requires": { 1358 | "fn.name": "1.x.x" 1359 | } 1360 | }, 1361 | "p-limit": { 1362 | "version": "3.1.0", 1363 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1364 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1365 | "requires": { 1366 | "yocto-queue": "^0.1.0" 1367 | } 1368 | }, 1369 | "p-locate": { 1370 | "version": "5.0.0", 1371 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1372 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1373 | "requires": { 1374 | "p-limit": "^3.0.2" 1375 | } 1376 | }, 1377 | "path-exists": { 1378 | "version": "4.0.0", 1379 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1380 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1381 | }, 1382 | "path-is-absolute": { 1383 | "version": "1.0.1", 1384 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1385 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1386 | }, 1387 | "pathval": { 1388 | "version": "1.1.1", 1389 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 1390 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" 1391 | }, 1392 | "performance-now": { 1393 | "version": "2.1.0", 1394 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1395 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1396 | }, 1397 | "picomatch": { 1398 | "version": "2.2.2", 1399 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1400 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" 1401 | }, 1402 | "process-nextick-args": { 1403 | "version": "2.0.1", 1404 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1405 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1406 | }, 1407 | "promise": { 1408 | "version": "8.1.0", 1409 | "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", 1410 | "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", 1411 | "requires": { 1412 | "asap": "~2.0.6" 1413 | } 1414 | }, 1415 | "promise-polyfill": { 1416 | "version": "8.1.3", 1417 | "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", 1418 | "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" 1419 | }, 1420 | "protobufjs": { 1421 | "version": "6.10.2", 1422 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz", 1423 | "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==", 1424 | "requires": { 1425 | "@protobufjs/aspromise": "^1.1.2", 1426 | "@protobufjs/base64": "^1.1.2", 1427 | "@protobufjs/codegen": "^2.0.4", 1428 | "@protobufjs/eventemitter": "^1.1.0", 1429 | "@protobufjs/fetch": "^1.1.0", 1430 | "@protobufjs/float": "^1.0.2", 1431 | "@protobufjs/inquire": "^1.1.0", 1432 | "@protobufjs/path": "^1.1.2", 1433 | "@protobufjs/pool": "^1.1.0", 1434 | "@protobufjs/utf8": "^1.1.0", 1435 | "@types/long": "^4.0.1", 1436 | "@types/node": "^13.7.0", 1437 | "long": "^4.0.0" 1438 | }, 1439 | "dependencies": { 1440 | "@types/node": { 1441 | "version": "13.13.41", 1442 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.41.tgz", 1443 | "integrity": "sha512-qLT9IvHiXJfdrje9VmsLzun7cQ65obsBTmtU3EOnCSLFOoSHx1hpiRHoBnpdbyFqnzqdUUIv81JcEJQCB8un9g==" 1444 | } 1445 | } 1446 | }, 1447 | "psl": { 1448 | "version": "1.8.0", 1449 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1450 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 1451 | }, 1452 | "punycode": { 1453 | "version": "2.1.1", 1454 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1455 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1456 | }, 1457 | "qs": { 1458 | "version": "6.5.2", 1459 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1460 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1461 | }, 1462 | "randombytes": { 1463 | "version": "2.1.0", 1464 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1465 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1466 | "requires": { 1467 | "safe-buffer": "^5.1.0" 1468 | } 1469 | }, 1470 | "readable-stream": { 1471 | "version": "3.6.0", 1472 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1473 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1474 | "requires": { 1475 | "inherits": "^2.0.3", 1476 | "string_decoder": "^1.1.1", 1477 | "util-deprecate": "^1.0.1" 1478 | } 1479 | }, 1480 | "readdirp": { 1481 | "version": "3.5.0", 1482 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 1483 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 1484 | "requires": { 1485 | "picomatch": "^2.2.1" 1486 | } 1487 | }, 1488 | "request": { 1489 | "version": "2.88.2", 1490 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1491 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1492 | "requires": { 1493 | "aws-sign2": "~0.7.0", 1494 | "aws4": "^1.8.0", 1495 | "caseless": "~0.12.0", 1496 | "combined-stream": "~1.0.6", 1497 | "extend": "~3.0.2", 1498 | "forever-agent": "~0.6.1", 1499 | "form-data": "~2.3.2", 1500 | "har-validator": "~5.1.3", 1501 | "http-signature": "~1.2.0", 1502 | "is-typedarray": "~1.0.0", 1503 | "isstream": "~0.1.2", 1504 | "json-stringify-safe": "~5.0.1", 1505 | "mime-types": "~2.1.19", 1506 | "oauth-sign": "~0.9.0", 1507 | "performance-now": "^2.1.0", 1508 | "qs": "~6.5.2", 1509 | "safe-buffer": "^5.1.2", 1510 | "tough-cookie": "~2.5.0", 1511 | "tunnel-agent": "^0.6.0", 1512 | "uuid": "^3.3.2" 1513 | } 1514 | }, 1515 | "require-directory": { 1516 | "version": "2.1.1", 1517 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1518 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1519 | }, 1520 | "safe-buffer": { 1521 | "version": "5.2.0", 1522 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1523 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1524 | }, 1525 | "safer-buffer": { 1526 | "version": "2.1.2", 1527 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1528 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1529 | }, 1530 | "semver": { 1531 | "version": "6.3.0", 1532 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1533 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1534 | }, 1535 | "serialize-javascript": { 1536 | "version": "5.0.1", 1537 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", 1538 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", 1539 | "requires": { 1540 | "randombytes": "^2.1.0" 1541 | } 1542 | }, 1543 | "simple-swizzle": { 1544 | "version": "0.2.2", 1545 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 1546 | "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", 1547 | "requires": { 1548 | "is-arrayish": "^0.3.1" 1549 | } 1550 | }, 1551 | "sshpk": { 1552 | "version": "1.16.1", 1553 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1554 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1555 | "requires": { 1556 | "asn1": "~0.2.3", 1557 | "assert-plus": "^1.0.0", 1558 | "bcrypt-pbkdf": "^1.0.0", 1559 | "dashdash": "^1.12.0", 1560 | "ecc-jsbn": "~0.1.1", 1561 | "getpass": "^0.1.1", 1562 | "jsbn": "~0.1.0", 1563 | "safer-buffer": "^2.0.2", 1564 | "tweetnacl": "~0.14.0" 1565 | } 1566 | }, 1567 | "stack-trace": { 1568 | "version": "0.0.10", 1569 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 1570 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" 1571 | }, 1572 | "string-width": { 1573 | "version": "2.1.1", 1574 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1575 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1576 | "requires": { 1577 | "is-fullwidth-code-point": "^2.0.0", 1578 | "strip-ansi": "^4.0.0" 1579 | } 1580 | }, 1581 | "string_decoder": { 1582 | "version": "1.3.0", 1583 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1584 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1585 | "requires": { 1586 | "safe-buffer": "~5.2.0" 1587 | } 1588 | }, 1589 | "strip-ansi": { 1590 | "version": "4.0.0", 1591 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1592 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1593 | "requires": { 1594 | "ansi-regex": "^3.0.0" 1595 | } 1596 | }, 1597 | "strip-json-comments": { 1598 | "version": "3.1.1", 1599 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1600 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 1601 | }, 1602 | "supports-color": { 1603 | "version": "8.1.1", 1604 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1605 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1606 | "requires": { 1607 | "has-flag": "^4.0.0" 1608 | } 1609 | }, 1610 | "text-hex": { 1611 | "version": "1.0.0", 1612 | "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", 1613 | "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" 1614 | }, 1615 | "to-regex-range": { 1616 | "version": "5.0.1", 1617 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1618 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1619 | "requires": { 1620 | "is-number": "^7.0.0" 1621 | } 1622 | }, 1623 | "tough-cookie": { 1624 | "version": "2.5.0", 1625 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1626 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1627 | "requires": { 1628 | "psl": "^1.1.28", 1629 | "punycode": "^2.1.1" 1630 | } 1631 | }, 1632 | "triple-beam": { 1633 | "version": "1.3.0", 1634 | "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", 1635 | "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" 1636 | }, 1637 | "tslib": { 1638 | "version": "1.14.1", 1639 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1640 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1641 | }, 1642 | "tunnel-agent": { 1643 | "version": "0.6.0", 1644 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1645 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1646 | "requires": { 1647 | "safe-buffer": "^5.0.1" 1648 | } 1649 | }, 1650 | "tweetnacl": { 1651 | "version": "0.14.5", 1652 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1653 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1654 | }, 1655 | "type-detect": { 1656 | "version": "4.0.8", 1657 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 1658 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" 1659 | }, 1660 | "uri-js": { 1661 | "version": "4.4.1", 1662 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1663 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1664 | "requires": { 1665 | "punycode": "^2.1.0" 1666 | } 1667 | }, 1668 | "util-deprecate": { 1669 | "version": "1.0.2", 1670 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1671 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1672 | }, 1673 | "uuid": { 1674 | "version": "3.4.0", 1675 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1676 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 1677 | }, 1678 | "verror": { 1679 | "version": "1.10.0", 1680 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1681 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1682 | "requires": { 1683 | "assert-plus": "^1.0.0", 1684 | "core-util-is": "1.0.2", 1685 | "extsprintf": "^1.2.0" 1686 | } 1687 | }, 1688 | "websocket-driver": { 1689 | "version": "0.7.4", 1690 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", 1691 | "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", 1692 | "requires": { 1693 | "http-parser-js": ">=0.5.1", 1694 | "safe-buffer": ">=5.1.0", 1695 | "websocket-extensions": ">=0.1.1" 1696 | } 1697 | }, 1698 | "websocket-extensions": { 1699 | "version": "0.1.4", 1700 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", 1701 | "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" 1702 | }, 1703 | "whatwg-fetch": { 1704 | "version": "2.0.4", 1705 | "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", 1706 | "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" 1707 | }, 1708 | "which": { 1709 | "version": "2.0.2", 1710 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1711 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1712 | "requires": { 1713 | "isexe": "^2.0.0" 1714 | } 1715 | }, 1716 | "wide-align": { 1717 | "version": "1.1.3", 1718 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1719 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1720 | "requires": { 1721 | "string-width": "^1.0.2 || 2" 1722 | } 1723 | }, 1724 | "winston": { 1725 | "version": "3.3.3", 1726 | "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", 1727 | "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", 1728 | "requires": { 1729 | "@dabh/diagnostics": "^2.0.2", 1730 | "async": "^3.1.0", 1731 | "is-stream": "^2.0.0", 1732 | "logform": "^2.2.0", 1733 | "one-time": "^1.0.0", 1734 | "readable-stream": "^3.4.0", 1735 | "stack-trace": "0.0.x", 1736 | "triple-beam": "^1.3.0", 1737 | "winston-transport": "^4.4.0" 1738 | }, 1739 | "dependencies": { 1740 | "is-stream": { 1741 | "version": "2.0.0", 1742 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 1743 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" 1744 | } 1745 | } 1746 | }, 1747 | "winston-transport": { 1748 | "version": "4.4.0", 1749 | "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", 1750 | "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", 1751 | "requires": { 1752 | "readable-stream": "^2.3.7", 1753 | "triple-beam": "^1.2.0" 1754 | }, 1755 | "dependencies": { 1756 | "readable-stream": { 1757 | "version": "2.3.7", 1758 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1759 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1760 | "requires": { 1761 | "core-util-is": "~1.0.0", 1762 | "inherits": "~2.0.3", 1763 | "isarray": "~1.0.0", 1764 | "process-nextick-args": "~2.0.0", 1765 | "safe-buffer": "~5.1.1", 1766 | "string_decoder": "~1.1.1", 1767 | "util-deprecate": "~1.0.1" 1768 | } 1769 | }, 1770 | "safe-buffer": { 1771 | "version": "5.1.2", 1772 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1773 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1774 | }, 1775 | "string_decoder": { 1776 | "version": "1.1.1", 1777 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1778 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1779 | "requires": { 1780 | "safe-buffer": "~5.1.0" 1781 | } 1782 | } 1783 | } 1784 | }, 1785 | "workerpool": { 1786 | "version": "6.1.0", 1787 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", 1788 | "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" 1789 | }, 1790 | "wrap-ansi": { 1791 | "version": "7.0.0", 1792 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1793 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1794 | "requires": { 1795 | "ansi-styles": "^4.0.0", 1796 | "string-width": "^4.1.0", 1797 | "strip-ansi": "^6.0.0" 1798 | }, 1799 | "dependencies": { 1800 | "ansi-regex": { 1801 | "version": "5.0.0", 1802 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1803 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 1804 | }, 1805 | "is-fullwidth-code-point": { 1806 | "version": "3.0.0", 1807 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1808 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1809 | }, 1810 | "string-width": { 1811 | "version": "4.2.0", 1812 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1813 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1814 | "requires": { 1815 | "emoji-regex": "^8.0.0", 1816 | "is-fullwidth-code-point": "^3.0.0", 1817 | "strip-ansi": "^6.0.0" 1818 | } 1819 | }, 1820 | "strip-ansi": { 1821 | "version": "6.0.0", 1822 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1823 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1824 | "requires": { 1825 | "ansi-regex": "^5.0.0" 1826 | } 1827 | } 1828 | } 1829 | }, 1830 | "wrappy": { 1831 | "version": "1.0.2", 1832 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1833 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1834 | }, 1835 | "xmlhttprequest": { 1836 | "version": "1.8.0", 1837 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 1838 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" 1839 | }, 1840 | "y18n": { 1841 | "version": "5.0.5", 1842 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", 1843 | "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" 1844 | }, 1845 | "yallist": { 1846 | "version": "4.0.0", 1847 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1848 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1849 | }, 1850 | "yargs": { 1851 | "version": "16.2.0", 1852 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1853 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1854 | "requires": { 1855 | "cliui": "^7.0.2", 1856 | "escalade": "^3.1.1", 1857 | "get-caller-file": "^2.0.5", 1858 | "require-directory": "^2.1.1", 1859 | "string-width": "^4.2.0", 1860 | "y18n": "^5.0.5", 1861 | "yargs-parser": "^20.2.2" 1862 | }, 1863 | "dependencies": { 1864 | "ansi-regex": { 1865 | "version": "5.0.0", 1866 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1867 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 1868 | }, 1869 | "is-fullwidth-code-point": { 1870 | "version": "3.0.0", 1871 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1872 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1873 | }, 1874 | "string-width": { 1875 | "version": "4.2.0", 1876 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1877 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1878 | "requires": { 1879 | "emoji-regex": "^8.0.0", 1880 | "is-fullwidth-code-point": "^3.0.0", 1881 | "strip-ansi": "^6.0.0" 1882 | } 1883 | }, 1884 | "strip-ansi": { 1885 | "version": "6.0.0", 1886 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1887 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1888 | "requires": { 1889 | "ansi-regex": "^5.0.0" 1890 | } 1891 | } 1892 | } 1893 | }, 1894 | "yargs-parser": { 1895 | "version": "20.2.4", 1896 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1897 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" 1898 | }, 1899 | "yargs-unparser": { 1900 | "version": "2.0.0", 1901 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1902 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1903 | "requires": { 1904 | "camelcase": "^6.0.0", 1905 | "decamelize": "^4.0.0", 1906 | "flat": "^5.0.2", 1907 | "is-plain-obj": "^2.1.0" 1908 | } 1909 | }, 1910 | "yocto-queue": { 1911 | "version": "0.1.0", 1912 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1913 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" 1914 | } 1915 | } 1916 | } 1917 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@chat21/chat21-node-sdk", 3 | "version": "1.1.8", 4 | "description": "Chat21 Nodejs SDK", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha" 8 | }, 9 | "keywords": [ 10 | "chat21", 11 | "nodejs", 12 | "chat", 13 | "realtime", 14 | "chatsdk", 15 | "chatapi" 16 | ], 17 | "author": "Andrea Leo - Frontiere21 SRL", 18 | "license": "AGPL-3.0", 19 | "homepage": "https://www.chat21.org", 20 | "repository": { 21 | "type": "git", 22 | "url": "https://github.com/chat21/chat21-node-sdk" 23 | }, 24 | "dependencies": { 25 | "chai": "^4.3.0", 26 | "dotenv": "^8.2.0", 27 | "firebase": "^8.2.7", 28 | "mocha": "^8.3.0", 29 | "promise": "^8.1.0", 30 | "request": "^2.88.2", 31 | "winston": "^3.3.3" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/auth.js: -------------------------------------------------------------------------------- 1 | var Promise = require('promise'); 2 | var winston = require('./winston'); 3 | 4 | var Auth = function(config){ 5 | var request = require('./c21request.js')(config) 6 | 7 | return { 8 | 9 | signin: function(email, password){ 10 | var authrequest = {} 11 | authrequest["email"] = email; 12 | authrequest["password"] = password; 13 | authrequest["returnSecureToken"] = true; 14 | return new Promise(function(resolve, reject){ 15 | request.login(authrequest).then(function(data){ 16 | winston.debug("chat21-node-sdk login", data); 17 | config.authorization = 'Bearer ' + data.idToken; 18 | config.token = data.idToken; 19 | config.user_id = data.localId; 20 | resolve(data); 21 | }).catch(function(err){ 22 | reject(err) 23 | }) 24 | }) 25 | }, 26 | logout: function() { 27 | config.authorization = null; 28 | config.token = null; 29 | config.user_id = null; 30 | }, 31 | getCurrentToken: function() { 32 | return config.token; 33 | }, 34 | setCurrentToken: function(token) { 35 | config.token = token; 36 | config.authorization = 'Bearer ' + token; 37 | }, 38 | getAdminToken: function() { 39 | return config.admintoken; 40 | }, 41 | setAdminToken: function(admintoken) { 42 | config.admintoken = admintoken; 43 | }, 44 | 45 | } 46 | } 47 | 48 | module.exports = Auth -------------------------------------------------------------------------------- /src/c21request.js: -------------------------------------------------------------------------------- 1 | var request = require('request'); 2 | var winston = require('./winston'); 3 | 4 | var C21Request = function(config){ 5 | return { 6 | 7 | login: function(data){ 8 | var url = config.authurl 9 | var options = { 10 | url: url, 11 | headers: { 12 | "Content-Type": 'application/json' 13 | }, 14 | json: data 15 | } 16 | // winston.debug("options", options); 17 | return new Promise(function(resolve, reject){ 18 | request.post(options, function(err, res, body){ 19 | if (err) { reject(err, res); } 20 | resolve(body); 21 | }); 22 | }) 23 | }, 24 | 25 | // TODO togli /api da qui? 26 | // #aggiungi /api qui per aiutare le persone tra dashboard e server? 27 | 28 | post: function(uri, data){ 29 | var url = config.url + '/api/' + config.appid + uri; 30 | 31 | var options = { 32 | url: url, 33 | 34 | headers: { 35 | "Content-Type": 'application/json' 36 | }, 37 | json: data 38 | } 39 | 40 | if (config.authorization) { 41 | options.headers.Authorization = config.authorization; 42 | } 43 | 44 | // winston.debug("options", options); 45 | return new Promise(function(resolve, reject){ 46 | request.post(options, function(err, res, body){ 47 | if (err) { reject(err, res); } 48 | resolve(body); 49 | }); 50 | }) 51 | }, 52 | 53 | 54 | put: function(uri, data){ 55 | var url = config.url + '/api/' + config.appid + uri; 56 | var options = { 57 | url: url, 58 | headers: { 59 | "Content-Type": 'application/json' 60 | }, 61 | json: data 62 | } 63 | if (config.authorization) { 64 | options.headers.Authorization = config.authorization; 65 | } 66 | 67 | //winston.debug("options", options); 68 | return new Promise(function(resolve, reject){ 69 | request.put(options, function(err, res, body){ 70 | if (err) { 71 | //winston.debug("error putting", err); 72 | reject(err, res); 73 | } 74 | resolve(body); 75 | }); 76 | }) 77 | }, 78 | 79 | 80 | delete: function(uri, data){ 81 | var url = config.url + '/api/' + config.appid + uri; 82 | var options = { 83 | url: url, 84 | headers: { 85 | "Content-Type": 'application/json' 86 | }, 87 | json: data 88 | } 89 | 90 | if (config.authorization) { 91 | options.headers.Authorization = config.authorization; 92 | } 93 | 94 | //winston.debug("chat21-node-sdk options", options); 95 | return new Promise(function(resolve, reject){ 96 | request.delete(options, function(err, res, body){ 97 | if (err) { reject(err, res); } 98 | resolve(body); 99 | }); 100 | }) 101 | }, 102 | } 103 | } 104 | 105 | module.exports = C21Request -------------------------------------------------------------------------------- /src/chat21.js: -------------------------------------------------------------------------------- 1 | var winston = require('./winston'); 2 | 3 | function Chat21(config){ 4 | if (config.email && config.password) { 5 | config.authorization = 'Basic ' + new Buffer(config.email + ':' + config.password).toString('base64'); 6 | winston.info("Chat21-node-sdk config.authorization: "+ config.authorization); 7 | } 8 | 9 | 10 | if (config.oauth) { 11 | config.authorization = 'Bearer ' + config.token; 12 | winston.info("Chat21-node-sdk config.authorization: "+ config.authorization); 13 | } 14 | 15 | return { 16 | messages: require('./messages.js')(config, 'message', 'messages'), 17 | conversations: require('./conversations.js')(config, 'conversation', 'conversations'), 18 | groups: require('./groups.js')(config, 'group', 'groups'), 19 | contacts: require('./contacts.js')(config, 'contact', 'contacts'), 20 | auth: require('./auth.js')(config), 21 | firebaseAuth: require('./firebaseAuth.js')(config) 22 | }; 23 | } 24 | 25 | module.exports = Chat21 -------------------------------------------------------------------------------- /src/contacts.js: -------------------------------------------------------------------------------- 1 | var Promise = require('promise'); 2 | var winston = require('./winston'); 3 | 4 | var Contact = function(config, single, plural){ 5 | var request = require('./c21request.js')(config) 6 | 7 | return { 8 | 9 | 10 | create: function(firstname, lastname, email, current_user){ 11 | var create = {} 12 | create["firstname"] = firstname; 13 | create["lastname"] = lastname; 14 | create["email"] = email; 15 | create["current_user"] = current_user; 16 | 17 | winston.debug("chat21-node-sdk contact.create", create); 18 | 19 | 20 | var admintoken = ""; 21 | if (config.admintoken) { 22 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 23 | } 24 | 25 | 26 | return new Promise(function(resolve, reject){ 27 | request.post('/' + plural+ admintoken, create).then(function(data){ 28 | winston.debug("chat21-node-sdk contact.created", data); 29 | resolve(data) 30 | }).catch(function(err){ 31 | reject(err) 32 | }) 33 | }) 34 | }, 35 | 36 | update: function(firstname, lastname, current_user){ 37 | var update = {} 38 | 39 | 40 | update["firstname"] = firstname; 41 | update["lastname"] = lastname; 42 | update["current_user"] = current_user; 43 | 44 | winston.debug("chat21-node-sdk contact.update", update); 45 | 46 | 47 | var admintoken = ""; 48 | if (config.admintoken) { 49 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 50 | } 51 | 52 | 53 | return new Promise(function(resolve, reject){ 54 | request.put('/' + plural+'/me'+ admintoken, update).then(function(data){ 55 | winston.debug("chat21-node-sdk contact.updated", data); 56 | resolve(data) 57 | }).catch(function(err){ 58 | reject(err) 59 | }) 60 | }) 61 | } 62 | 63 | } 64 | } 65 | 66 | module.exports = Contact 67 | -------------------------------------------------------------------------------- /src/conversations.js: -------------------------------------------------------------------------------- 1 | var Promise = require('promise'); 2 | var winston = require('./winston'); 3 | 4 | var Conversation = function(config, single, plural){ 5 | var request = require('./c21request.js')(config) 6 | 7 | return { 8 | 9 | 10 | archive: function(recipient_id, user_id){ 11 | 12 | var body = {}; 13 | if (user_id) { 14 | body["user_id"] = user_id; 15 | } 16 | winston.debug("body", body); 17 | 18 | var admintoken = ""; 19 | if (config.admintoken) { 20 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 21 | winston.debug("chat21-node-sdk admintoken", admintoken); 22 | } 23 | 24 | return new Promise(function(resolve, reject){ 25 | 26 | request.delete('/' + plural +'/'+recipient_id+ admintoken, body).then(function(data){ 27 | winston.debug("chat21-node-sdk conversation.archived", data); 28 | resolve(data) 29 | }).catch(function(err){ 30 | winston.debug("chat21-node-sdk conversation.archived", err); 31 | reject(err) 32 | }) 33 | }) 34 | }, 35 | 36 | delete: function(recipient_id){ 37 | 38 | var admintoken = ""; 39 | if (config.admintoken) { 40 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 41 | winston.debug("chat21-node-sdk admintoken", admintoken); 42 | } 43 | 44 | return new Promise(function(resolve, reject){ 45 | 46 | request.delete('/'+recipient_id+ "/"+ plural+"/timelines" + admintoken).then(function(data){ 47 | winston.debug("chat21-node-sdk conversation.deleted", data); 48 | resolve(data) 49 | }).catch(function(err){ 50 | winston.debug("chat21-node-sdk conversation.deleted", err); 51 | reject(err) 52 | }) 53 | }) 54 | }, 55 | 56 | typing: function(recipient_id, writer_id, text, timestamp){ 57 | 58 | var body = {}; 59 | 60 | if (writer_id) { 61 | body["writer_id"] = writer_id; 62 | } 63 | 64 | if (text) { 65 | body["text"] = text; 66 | } 67 | 68 | if (timestamp) { 69 | body["timestamp"] = timestamp; 70 | } 71 | 72 | winston.debug("body", body); 73 | 74 | var admintoken = ""; 75 | if (config.admintoken) { 76 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 77 | winston.debug("chat21-node-sdk admintoken", admintoken); 78 | } 79 | 80 | return new Promise(function(resolve, reject){ 81 | 82 | request.put('/typings/'+recipient_id+ admintoken, body).then(function(data){ 83 | winston.debug("chat21-node-sdk conversation typing", data); 84 | resolve(data) 85 | }).catch(function(err){ 86 | winston.debug("error chat21-node-sdk conversation typing", err); 87 | reject(err) 88 | }) 89 | }) 90 | }, 91 | 92 | // deprecated 93 | // not in use 94 | stopTyping: function(recipient_id, writer_id){ 95 | 96 | var body = {}; 97 | if (writer_id) { 98 | body["writer_id"] = writer_id; 99 | } 100 | winston.debug("body", body); 101 | 102 | var admintoken = ""; 103 | if (config.admintoken) { 104 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 105 | winston.debug("chat21-node-sdk admintoken", admintoken); 106 | } 107 | 108 | return new Promise(function(resolve, reject){ 109 | 110 | request.delete('/typings/'+recipient_id+ admintoken, body).then(function(data){ 111 | winston.debug("chat21-node-sdk conversation stoptypings", data); 112 | resolve(data) 113 | }).catch(function(err){ 114 | winston.debug("error chat21-node-sdk conversation stoptypings", err); 115 | reject(err) 116 | }) 117 | }) 118 | }, 119 | 120 | 121 | 122 | } 123 | } 124 | 125 | module.exports = Conversation -------------------------------------------------------------------------------- /src/firebaseAuth.js: -------------------------------------------------------------------------------- 1 | var firebase = require("firebase"); 2 | var winston = require('./winston'); 3 | 4 | // class FirebaseAuth { 5 | var FirebaseAuth = function(config){ 6 | winston.debug("chat21-node-sdk config", config); 7 | 8 | // Initialize Firebase 9 | // TODO: Replace with your project's customized code snippet 10 | var firebaseconfig = { 11 | apiKey: config.firebase_apikey, 12 | databaseURL: config.firebase_database, 13 | authDomain: ".firebaseapp.com", 14 | storageBucket: ".appspot.com", 15 | }; 16 | winston.debug("chat21-node-sdk firebaseconfig", firebaseconfig); 17 | 18 | firebase.initializeApp(firebaseconfig); 19 | 20 | return { 21 | signinWithCustomToken: function(customAuthToken){ 22 | return new Promise(function(resolve, reject){ 23 | return firebase.auth().signInWithCustomToken(customAuthToken).then(function (data){ 24 | 25 | // winston.debug("customAuthToken", customAuthToken); 26 | 27 | 28 | firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) { 29 | // winston.debug("idToken", idToken); 30 | resolve(idToken); 31 | // Send token to your backend via HTTPS 32 | // ... 33 | }).catch(function(error) { 34 | reject(error); 35 | }); 36 | 37 | }).catch(function(error) { 38 | 39 | // Handle Errors here. 40 | var errorCode = error.code; 41 | var errorMessage = error.message; 42 | if (errorCode === 'auth/invalid-custom-token') { 43 | reject(error); 44 | } else { 45 | reject(error); 46 | } 47 | 48 | 49 | }); 50 | }); 51 | } 52 | }; 53 | 54 | } 55 | 56 | module.exports = FirebaseAuth; 57 | // var firebaseAuth = new FirebaseAuth(); 58 | // module.exports = firebaseAuth; -------------------------------------------------------------------------------- /src/groups.js: -------------------------------------------------------------------------------- 1 | var Promise = require('promise'); 2 | var winston = require('./winston'); 3 | 4 | var Group = function(config, single, plural){ 5 | var request = require('./c21request.js')(config) 6 | 7 | return { 8 | 9 | 10 | 11 | 12 | 13 | create: function(name, members, attributes, group_id){ 14 | var create = {} 15 | create["group_name"] = name; 16 | 17 | let group_members = {}; 18 | members.forEach(member => { 19 | group_members[member] = 1; 20 | }); 21 | create["group_members"] = group_members; 22 | 23 | create["group_id"] = group_id; 24 | 25 | if (attributes) { 26 | create["attributes"] = attributes; 27 | } 28 | 29 | winston.debug("chat21-node-sdk group.create", create); 30 | 31 | 32 | var admintoken = ""; 33 | if (config.admintoken) { 34 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 35 | } 36 | 37 | 38 | return new Promise(function(resolve, reject){ 39 | request.post('/' + plural+ admintoken, create).then(function(data){ 40 | winston.debug("chat21-node-sdk group.created", data); 41 | resolve(data) 42 | }).catch(function(err){ 43 | reject(err) 44 | }) 45 | }) 46 | }, 47 | 48 | setMembers: function(members, group_id){ 49 | var join = {} 50 | 51 | let group_members = {}; 52 | members.forEach(member => { 53 | group_members[member] = 1; 54 | }); 55 | 56 | join["members"] = group_members; 57 | 58 | var admintoken = ""; 59 | if (config.admintoken) { 60 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 61 | } 62 | 63 | winston.debug("chat21-node-sdk join", join); 64 | 65 | return new Promise(function(resolve, reject) { 66 | request.put('/' + plural+'/'+group_id+'/members' + admintoken, join).then(function(data){ 67 | winston.debug("chat21-node-sdk data", data); 68 | resolve(data) 69 | }).catch(function(err){ 70 | reject(err) 71 | }) 72 | }) 73 | }, 74 | 75 | 76 | join: function(member_id, group_id){ 77 | var join = {} 78 | join["member_id"] = member_id; 79 | 80 | var admintoken = ""; 81 | if (config.admintoken) { 82 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 83 | } 84 | 85 | 86 | return new Promise(function(resolve, reject){ 87 | request.post('/' + plural+'/'+group_id+'/members' + admintoken, join).then(function(data){ 88 | winston.debug("chat21-node-sdk data", data); 89 | resolve(data) 90 | }).catch(function(err){ 91 | reject(err) 92 | }) 93 | }) 94 | }, 95 | 96 | leave: function(member_id, group_id){ 97 | 98 | var admintoken = ""; 99 | if (config.admintoken) { 100 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 101 | } 102 | 103 | return new Promise(function(resolve, reject){ 104 | request.delete('/' + plural+'/'+group_id+'/members/' + member_id + admintoken).then(function(data){ 105 | winston.debug("chat21-node-sdk data", data); 106 | resolve(data) 107 | }).catch(function(err){ 108 | reject(err) 109 | }) 110 | }) 111 | }, 112 | 113 | // updateGroupWithId(group_id, group_name, group_owner, group_members, app_id, attributes, invited_members) { 114 | update: function(name, owner, attributes, group_id){ 115 | var update = {} 116 | 117 | 118 | update["group_name"] = name; 119 | update["group_owner"] = owner; 120 | 121 | 122 | if (attributes) { 123 | update["attributes"] = attributes; 124 | } 125 | 126 | winston.debug("chat21-node-sdk group.update", update); 127 | 128 | 129 | var admintoken = ""; 130 | if (config.admintoken) { 131 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 132 | } 133 | 134 | 135 | return new Promise(function(resolve, reject){ 136 | request.put('/' + plural+'/'+group_id+ admintoken, update).then(function(data){ 137 | winston.debug("chat21-node-sdk group.updated", data); 138 | resolve(data) 139 | }).catch(function(err){ 140 | reject(err) 141 | }) 142 | }) 143 | }, 144 | 145 | 146 | 147 | updateAttributes: function(attributes, group_id){ 148 | 149 | var update = {} 150 | 151 | 152 | if (attributes) { 153 | update["attributes"] = attributes; 154 | } 155 | 156 | var admintoken = ""; 157 | if (config.admintoken) { 158 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 159 | } 160 | 161 | winston.debug("chat21-node-sdk group attributes", update); 162 | 163 | return new Promise(function(resolve, reject) { 164 | request.put('/' + plural+'/'+group_id+'/attributes' + admintoken, update).then(function(data){ 165 | winston.debug("chat21-node-sdk data", data); 166 | resolve(data) 167 | }).catch(function(err){ 168 | reject(err) 169 | }) 170 | }) 171 | }, 172 | 173 | 174 | 175 | } 176 | } 177 | 178 | module.exports = Group 179 | -------------------------------------------------------------------------------- /src/messages.js: -------------------------------------------------------------------------------- 1 | var Promise = require('promise'); 2 | var winston = require('./winston'); 3 | 4 | var Message = function(config, single, plural){ 5 | var request = require('./c21request.js')(config) 6 | 7 | return { 8 | 9 | 10 | send: function(sender_fullname, recipient_id, recipient_fullname, text, sender_id, attributes, type, metadata, group){ 11 | var message = {} 12 | if (sender_id) { 13 | message["sender_id"] = sender_id; 14 | } 15 | message["sender_fullname"] = sender_fullname; 16 | message["recipient_id"] = recipient_id; 17 | message["recipient_fullname"] = recipient_fullname; 18 | message["text"] = text; 19 | 20 | if (attributes) { 21 | message["attributes"] = attributes; 22 | } 23 | 24 | if (type) { 25 | message["type"] = type; 26 | } 27 | 28 | if (metadata) { 29 | message["metadata"] = metadata; 30 | } 31 | 32 | if (group) { 33 | message["group"] = group; 34 | } 35 | 36 | 37 | return new Promise(function(resolve, reject){ 38 | 39 | var admintoken = ""; 40 | if (config.admintoken) { 41 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 42 | winston.debug("chat21-node-sdk admintoken", admintoken); 43 | } 44 | 45 | request.post('/' + plural + admintoken, message).then(function(data){ 46 | resolve(data) 47 | }).catch(function(err){ 48 | reject(err) 49 | }) 50 | }) 51 | }, 52 | sendToGroup: function(sender_fullname, recipient_id, recipient_fullname, text, sender_id, attributes, type, metadata, timestamp, group){ 53 | var message = {} 54 | if (sender_id) { 55 | message["sender_id"] = sender_id; 56 | } 57 | message["sender_fullname"] = sender_fullname; 58 | message["recipient_id"] = recipient_id; 59 | message["channel_type"] = "group"; 60 | message["recipient_fullname"] = recipient_fullname; 61 | message["text"] = text; 62 | 63 | if (attributes) { 64 | message["attributes"] = attributes; 65 | } 66 | 67 | if (type) { 68 | message["type"] = type; 69 | } 70 | 71 | 72 | if (metadata) { 73 | message["metadata"] = metadata; 74 | } 75 | if (timestamp) { 76 | message["timestamp"] = timestamp; 77 | } 78 | 79 | 80 | if (group) { 81 | message["group"] = group; 82 | } 83 | 84 | 85 | 86 | winston.debug("chat21-node-sdk message.sendToGroup", message); 87 | return new Promise(function(resolve, reject){ 88 | 89 | var admintoken = ""; 90 | if (config.admintoken) { 91 | admintoken = "?token=" + encodeURIComponent(config.admintoken); 92 | } 93 | 94 | request.post('/' + plural + admintoken, message).then(function(data){ 95 | winston.debug("chat21-node-sdk message.sent", data); 96 | resolve(data) 97 | }).catch(function(err){ 98 | winston.error("chat21-node-sdk message.sent error", err); 99 | reject(err) 100 | }) 101 | }) 102 | }, 103 | 104 | 105 | } 106 | } 107 | 108 | module.exports = Message -------------------------------------------------------------------------------- /src/winston.js: -------------------------------------------------------------------------------- 1 | var appRoot = require('app-root-path'); 2 | var winston = require('winston'); 3 | 4 | 5 | var options = { 6 | file: { 7 | level: 'info', 8 | filename: `${appRoot}/logs/chat21.log`, 9 | handleExceptions: true, 10 | json: false, 11 | maxsize: 5242880, // 5MB 12 | maxFiles: 5, 13 | colorize: false, 14 | format: winston.format.simple() 15 | }, 16 | console: { 17 | level: 'info', 18 | handleExceptions: true, 19 | json: true, 20 | colorize: true, 21 | format: winston.format.simple() 22 | }, 23 | }; 24 | 25 | // https://stackoverflow.com/questions/51074805/typeerror-winston-logger-is-not-a-constructor-with-winston-and-morgan 26 | // var logger = new winston.Logger({ 27 | // transports: [ 28 | // new winston.transports.File(options.file), 29 | // new winston.transports.Console(options.console) 30 | // ], 31 | // exitOnError: false, // do not exit on handled exceptions 32 | // }); 33 | 34 | 35 | 36 | 37 | 38 | // require('winston-mongodb'); 39 | 40 | // if (process.env.NODE_ENV == 'test') { 41 | // var logsDb = config.databasetest; 42 | // }else { 43 | // var logsDb = config.database; 44 | // } 45 | 46 | let logger = winston.createLogger({ 47 | transports: [ 48 | new (winston.transports.Console)(options.console), 49 | // new (winston.transports.File)(options.errorFile), 50 | new (winston.transports.File)(options.file), 51 | // new (winston.transports.MongoDB)( {db: logsDb, collection: "logs"}) 52 | ], 53 | exitOnError: false, // do not exit on handled exceptions 54 | }); 55 | 56 | logger.stream = { 57 | write: function(message, encoding) { 58 | logger.info(message); 59 | }, 60 | }; 61 | 62 | // if (process.env.NODE_ENV !== 'production') { 63 | // logger.add(new winston.transports.Console({ 64 | // format: winston.format.simple() 65 | // })); 66 | // } 67 | 68 | /** 69 | * Requiring `winston-mongodb` will expose 70 | * `winston.transports.MongoDB` 71 | */ 72 | // require('winston-mongodb'); 73 | // winston.add(winston.transports.MongoDB, 74 | // { 75 | // // db: config.databasetest, 76 | // db: 'mongodb://localhost/tiledesk-test', 77 | // collection: "logs" 78 | // } 79 | // ); 80 | 81 | 82 | module.exports = logger; 83 | -------------------------------------------------------------------------------- /test/models/groups.js: -------------------------------------------------------------------------------- 1 | var should = require('chai').should(); 2 | var expect = require('chai').expect; 3 | 4 | module.exports = function(chat21){ 5 | 6 | 7 | it('should create a group', function(done){ 8 | this.timeout(20000); 9 | chat21.auth.signin('andrea.leo@frontiere21.it', 123456) 10 | .then(function(logindata) { 11 | chat21.groups.create("test11", [logindata.localId]) 12 | .then(function(data){ 13 | console.log("chat21-node-sdk join resolve ", data); 14 | expect(data).to.exist; 15 | chat21.auth.logout(); 16 | done(); 17 | })}).catch(function(err, res){ 18 | console.log('chat21-node-sdk ',res); 19 | chat21.auth.logout(); 20 | done(err); 21 | }); 22 | }); 23 | 24 | it('should join a group', function(done){ 25 | this.timeout(20000); 26 | chat21.auth.signin('andrea.leo@frontiere21.it', 123456) 27 | .then(function(logindata) { 28 | chat21.groups.leave(logindata.localId, "support-group-LOBsuFytAQ7sOMcq88h") 29 | .then(function(data){ 30 | chat21.groups.join(logindata.localId, "support-group-LOBsuFytAQ7sOMcq88h") 31 | .then(function(data){ 32 | console.log("chat21-node-sdk join resolve ", data); 33 | expect(data).to.exist; 34 | chat21.auth.logout(); 35 | done(); 36 | }) 37 | })}).catch(function(err, res){ 38 | console.log('chat21-node-sdk ',res); 39 | chat21.auth.logout(); 40 | done(err); 41 | }); 42 | }); 43 | 44 | 45 | 46 | it('should leave a group', function(done){ 47 | this.timeout(20000); 48 | chat21.auth.signin('andrea.leo@frontiere21.it', 123456) 49 | .then(function(logindata) { 50 | chat21.groups.join(logindata.localId, "support-group-LOBsuFytAQ7sOMcq88h") 51 | .then(function(data){ 52 | chat21.groups.leave(logindata.localId, "support-group-LOBsuFytAQ7sOMcq88h") 53 | .then(function(data){ 54 | console.log("chat21-node-sdk leave resolve ", data); 55 | expect(data).to.exist; 56 | chat21.auth.logout(); 57 | done(); 58 | }) 59 | })}).catch(function(err, res){ 60 | console.log('chat21-node-sdk ', res); 61 | chat21.auth.logout(); 62 | done(err); 63 | }); 64 | }); 65 | 66 | 67 | 68 | 69 | it('should join a group with token', function(done){ 70 | this.timeout(20000); 71 | console.log("chat21-node-sdk chat21.firebaseAuth", chat21.firebaseAuth); 72 | chat21.firebaseAuth.signinWithCustomToken('eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1YmM0OTVlY2QyOTQxMGNhOTM5ZWQ3MGMiLCJpYXQiOjE1Mzk2MTAwOTIsImV4cCI6MTUzOTYxMzY5MiwiYXVkIjoiaHR0cHM6Ly9pZGVudGl0eXRvb2xraXQuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmlkZW50aXR5LmlkZW50aXR5dG9vbGtpdC52MS5JZGVudGl0eVRvb2xraXQiLCJpc3MiOiJmaXJlYmFzZS1hZG1pbnNkay16Mng5aEBjaGF0LXYyLWRldi5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInN1YiI6ImZpcmViYXNlLWFkbWluc2RrLXoyeDloQGNoYXQtdjItZGV2LmlhbS5nc2VydmljZWFjY291bnQuY29tIn0.X_r0I7Jo2CO2Difztv-dxOpf0ldD30PXPC54neZfa4wTVlJqsTUBRWjNjUvt-nNFBhgXc-x2YhivjBGuAewFM39RhkG55Pcz9H2geNQPK_mGkN0WRSaXb-F5obXMMkmUpLQlpk_YhUGU9LtkR6NK5WBCdv9bJcEg2JKmwQ0L_ImvWrOumHF7OXjdPkl76mJhrWyq6Ewdc-fQ9sHW0yWrVTMEumaYA55niYmD2ePFjA9hYl4yzrRh7-p68dzR3TiG6HeRsrblVKHq9KkU9pOWkzDocevmEENV0dOZ9AXj-jEcCCRdI_5Eh6jYf8T0Jeyt6Ui8YeXNkLvoLemdOWS8xQ').then(function(idToken) { 73 | console.log("chat21-node-sdk idToken", idToken); 74 | chat21.auth.setCurrentToken(idToken); 75 | // chat21.auth.setCurrentToken('eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1YmM0N2UyMGYwNmQzMWJhNjAxN2Q5ODgiLCJpYXQiOjE1Mzk2MDQwMDEsImV4cCI6MTUzOTYwNzYwMSwiYXVkIjoiaHR0cHM6Ly9pZGVudGl0eXRvb2xraXQuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmlkZW50aXR5LmlkZW50aXR5dG9vbGtpdC52MS5JZGVudGl0eVRvb2xraXQiLCJpc3MiOiJmaXJlYmFzZS1hZG1pbnNkay16Mng5aEBjaGF0LXYyLWRldi5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInN1YiI6ImZpcmViYXNlLWFkbWluc2RrLXoyeDloQGNoYXQtdjItZGV2LmlhbS5nc2VydmljZWFjY291bnQuY29tIn0.GOe4f1Z8axzjQqbKyKQH-mLtn3Zx2RMg0XVT9Yg1SUXylBvX1UJjoUACkRFIvj_5KX-LkDb0ZDy8CpqAx9_vWVm40guuQqL8krFhilX2uSnX8Dx_TqTa6Ytiv2WrWYf1Hs7M6s_DTmbIkuVSuAAsOGm-pV_x1EH5r0IPUVLukYDHULYwXaX9dHfB2Ijw0NwXdCbhVAYMjeclDEmVDuxTyRgmutL0eKdTqk3seCLMJtOZANXvxJuRSCBJ95DWUbjATpEi1tLPT-hmP8kYUs5ob2ndSTH-n4gMVoji_AcGBE0GMkAxrpaq29xHdv8b-bQZ74m6mb9PcKkARNO8x9ozLA'); 76 | // chat21.auth.setCurrentToken('eyJhbGciOiJSUzI1NiIsImtpZCI6IjhmNGQ4NmRhMDRiOGNiODhhNWVhNWVmNDAwMzI0ODJlNzY4NDExODUifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vY2hhdC12Mi1kZXYiLCJwcm92aWRlcl9pZCI6ImFub255bW91cyIsImF1ZCI6ImNoYXQtdjItZGV2IiwiYXV0aF90aW1lIjoxNTI3ODQyMjA5LCJ1c2VyX2lkIjoiU3VFRHZQbGZLNGJRNmNoWXVjQTJhZllWNUx1MiIsInN1YiI6IlN1RUR2UGxmSzRiUTZjaFl1Y0EyYWZZVjVMdTIiLCJpYXQiOjE1Mzk2MDMyMjQsImV4cCI6MTUzOTYwNjgyNCwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6e30sInNpZ25faW5fcHJvdmlkZXIiOiJhbm9ueW1vdXMifX0.nou4tcWLil_rtk2KjzkAYCCnydzDkf4woC1IHSDgHdJ4hMBLk-W1TVcClZd7OZ16eA8dFpH_zFe7LlKBEDrTKP3FvjPagJFigqMrV4UZA6ZMRnX4iPPX-eRvffw19b8Q4c090U_k-CklDZmuqG5st5Tu_yM6bUyfs4m8A90rkiJe3M3gLQOzuytXtaODG3wJUUh263ij-RDCoHZy32OXgNOHxta_WLVf_Y0TN31DJUkTU9z6Papcdy0DOtg-Hs8FrpKTTu5KkCYVCM7Zbkr5i-vF_hSyM352j_AapdythaiJXKvN0lkVpZSvuNn2xnMpIfWayySNivwF1qq0Tyvgqw'); 77 | // console.log("chat21.auth.getCurrentToken()", chat21.auth.getCurrentToken()); 78 | 79 | 80 | chat21.groups.leave("123456", "support-group-LOBsuFytAQ7sOMcq88h") 81 | .then(function(data){ 82 | chat21.groups.join("123456", "support-group-LOBsuFytAQ7sOMcq88h") 83 | .then(function(data){ 84 | console.log("chat21-node-sdk join resolve ", data); 85 | expect(data).to.exist; 86 | chat21.auth.logout(); 87 | done(); 88 | }) 89 | }).catch(function(err, res){ 90 | console.log(res); 91 | chat21.auth.logout(); 92 | done(err); 93 | }); 94 | }); 95 | }); 96 | 97 | 98 | 99 | } -------------------------------------------------------------------------------- /test/models/messages.js: -------------------------------------------------------------------------------- 1 | var should = require('chai').should(); 2 | var expect = require('chai').expect; 3 | 4 | module.exports = function(chat21){ 5 | 6 | 7 | it('should create a message', function(done){ 8 | this.timeout(20000); 9 | chat21.auth.signin('andrea.leo@frontiere21.it', 123456).then(function(logindata) { 10 | chat21.messages.send('Sender Node SDK', '5aaa99024c3b110014b478f0', 'Andrea Leo', 'hello from Node SDK') 11 | .then(function(data){ 12 | console.log("chat21-node-sdk send resolve ", data); 13 | expect(data).to.exist; 14 | // expect(data.sender_fullname).to.eqls("Sender Node SDK"); 15 | // console.log("chat21.auth.getCurrentToken() ", chat21.auth.getCurrentToken()); 16 | expect(chat21.auth.getCurrentToken()).to.exist; 17 | chat21.auth.logout(); 18 | done(); 19 | }).catch(function(err, res){ 20 | console.log(res); 21 | chat21.auth.logout(); 22 | done(err); 23 | }); 24 | }); 25 | 26 | }); 27 | 28 | 29 | it('should create a message with admin', function(done){ 30 | this.timeout(20000); 31 | chat21.auth.setAdminToken("chat21-secret-orgAa,"); 32 | chat21.messages.send('Sender Node SDK', '5aaa99024c3b110014b478f0', 'Andrea Leo', 'hello from Node SDK') 33 | .then(function(data){ 34 | console.log("send resolve ", data); 35 | expect(data).to.exist; 36 | // expect(data.sender_id).to.eqls("5aaa99024c3b110014b478f0"); 37 | 38 | 39 | done(); 40 | }).catch(function(err, res){ 41 | console.log(res); 42 | chat21.auth.logout(); 43 | done(err); 44 | }); 45 | 46 | }); 47 | 48 | 49 | 50 | } -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var should = require('chai').should(); 2 | var expect = require('chai').expect; 3 | var dotenv = require('dotenv'); 4 | console.log("here"); 5 | // First try to load the enviroment variables 6 | try { dotenv.load(); } catch(error) { console.error(error); } 7 | 8 | var Chat21 = require('../index.js'); 9 | var chat21 = new Chat21({ 10 | url: process.env.CHAT21_URL, 11 | appid: process.env.CHAT21_APPID, 12 | oauth: true, 13 | authurl: process.env.CHAT21_AUTH_URL, 14 | firebase_apikey: process.env.FIREBASE_APIKEY, 15 | firebase_database: process.env.FIREBASE_DATABASE 16 | }); 17 | 18 | describe('Chat21', function(){ 19 | describe('messages', function(){ 20 | require('./models/messages.js')(chat21); 21 | }); 22 | describe('groups', function(){ 23 | require('./models/groups.js')(chat21); 24 | }); 25 | }); --------------------------------------------------------------------------------