Reorganize server files and address TODO comments
Changes:
- Remove unneeded dependencies from package.json
- Remove unneeded async build() methods from services
- Use constructor as often as possible
- Rename and move storage services for clarity
- creds.ts -> accounts.ts, and creds.json -> accounts.json
- admin-config.ts -> admin-account.ts
- vault.ts -> signing-keys.ts
- Rename ws.ts to websocket-server.ts for clarity and consistency
- Make WebSocketServer initialize using constructor and bind server upgrade to WebSocketServer.upgrade
- Remove unused send-account-message endpoint from account-router.ts
- Set issuer and audience claims for JWT
- Create new utils/jwt.ts file to remove code duplication for JWT signing and verifying
- Delete utils.ts and merge it with jami-swig.ts
- Handle potentially undefined types in jami-swig.ts
- Replace hard to read one-liners with functions in jami-swig.ts
- Rename types in jami-swig.ts for consistency with daemon
- Remove handled/answered TODO comments
- Remove TODO comment about using .env for jamid.node as it does not work for require()
GitLab: #87
Change-Id: I1e5216ffa79ea34dd7e9b61540fb7e37d1f66c9f
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 2d47543..a69ad04 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -76,6 +76,7 @@
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-unused-vars': 'off',
camelcase: 'error',
eqeqeq: ['error', 'smart'],
diff --git a/client/src/contexts/WebSocketProvider.tsx b/client/src/contexts/WebSocketProvider.tsx
index 38317e2..e6e246b 100644
--- a/client/src/contexts/WebSocketProvider.tsx
+++ b/client/src/contexts/WebSocketProvider.tsx
@@ -77,17 +77,21 @@
setTimeout(connect, 1000);
};
- webSocket.onmessage = <T extends WebSocketMessageType>({ data }: MessageEvent<string>) => {
- console.debug('WebSocket received message', data);
- const message: WebSocketMessage<T> = JSON.parse(data);
+ webSocket.onmessage = <T extends WebSocketMessageType>(event: MessageEvent<string>) => {
+ const messageString = event.data;
+ console.debug('WebSocket received message', messageString);
+
+ const message: WebSocketMessage<T> = JSON.parse(messageString);
if (!message.type || !message.data) {
- console.warn(`Incorrect format (require type and data) ${message}`);
+ console.warn('WebSocket message is not a valid WebSocketMessage (missing type or data fields)');
return;
}
+
if (!Object.values(WebSocketMessageType).includes(message.type)) {
- console.warn(`Unhandled message of type: ${message.type}`);
+ console.warn(`Invalid WebSocket message type: ${message.type}`);
return;
}
+
const callbacks = callbacksRef.current[message.type];
for (const callback of callbacks) {
callback(message.data);
diff --git a/package-lock.json b/package-lock.json
index e05002a..32d926e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2071,11 +2071,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@gar/promisify": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@humanwhocodes/config-array": {
"version": "0.10.7",
"dev": true,
@@ -2727,148 +2722,6 @@
"node": ">= 8"
}
},
- "node_modules/@npmcli/fs": {
- "version": "2.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@gar/promisify": "^1.1.3",
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/@npmcli/fs/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@npmcli/fs/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@npmcli/git": {
- "version": "3.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/promise-spawn": "^3.0.0",
- "lru-cache": "^7.4.4",
- "mkdirp": "^1.0.4",
- "npm-pick-manifest": "^7.0.0",
- "proc-log": "^2.0.0",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^2.0.1",
- "semver": "^7.3.5",
- "which": "^2.0.2"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/@npmcli/git/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@npmcli/installed-package-contents": {
- "version": "1.0.7",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "npm-bundled": "^1.1.1",
- "npm-normalize-package-bin": "^1.0.1"
- },
- "bin": {
- "installed-package-contents": "index.js"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@npmcli/move-file": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/@npmcli/node-gyp": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/@npmcli/promise-spawn": {
- "version": "3.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "infer-owner": "^1.0.4"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/@npmcli/run-script": {
- "version": "4.2.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/node-gyp": "^2.0.0",
- "@npmcli/promise-spawn": "^3.0.0",
- "node-gyp": "^9.0.0",
- "read-package-json-fast": "^2.0.3",
- "which": "^2.0.2"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/@phc/format": {
"version": "1.0.0",
"license": "MIT",
@@ -2876,29 +2729,6 @@
"node": ">=10"
}
},
- "node_modules/@pnpm/network.ca-file": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "4.2.10"
- },
- "engines": {
- "node": ">=12.22.0"
- }
- },
- "node_modules/@pnpm/npm-conf": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@pnpm/network.ca-file": "^1.0.1",
- "config-chain": "^1.1.11"
- },
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/@popperjs/core": {
"version": "2.11.6",
"license": "MIT",
@@ -3153,17 +2983,6 @@
"version": "0.24.46",
"license": "MIT"
},
- "node_modules/@sindresorhus/is": {
- "version": "5.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
- }
- },
"node_modules/@socket.io/component-emitter": {
"version": "3.1.0",
"license": "MIT"
@@ -3411,17 +3230,6 @@
"url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@szmarczak/http-timer": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "defer-to-connect": "^2.0.1"
- },
- "engines": {
- "node": ">=14.16"
- }
- },
"node_modules/@tanstack/query-core": {
"version": "4.12.0",
"license": "MIT",
@@ -3632,14 +3440,6 @@
"@testing-library/dom": ">=7.21.4"
}
},
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@trysound/sax": {
"version": "0.2.0",
"dev": true,
@@ -3765,11 +3565,6 @@
"hoist-non-react-statics": "^3.3.0"
}
},
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.1",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
"license": "MIT"
@@ -4499,27 +4294,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/agentkeepalive": {
- "version": "4.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.1.0",
- "depd": "^1.1.2",
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/agentkeepalive/node_modules/depd": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/aggregate-error": {
"version": "3.1.0",
"dev": true,
@@ -4591,14 +4365,6 @@
"ajv": "^6.9.1"
}
},
- "node_modules/ansi-align": {
- "version": "3.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.1.0"
- }
- },
"node_modules/ansi-colors": {
"version": "4.1.3",
"dev": true,
@@ -4695,18 +4461,6 @@
],
"license": "MIT"
},
- "node_modules/are-we-there-yet": {
- "version": "3.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/arg": {
"version": "4.1.3",
"dev": true,
@@ -5023,133 +4777,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/boxen": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-align": "^3.0.1",
- "camelcase": "^7.0.0",
- "chalk": "^5.0.1",
- "cli-boxes": "^3.0.0",
- "string-width": "^5.1.2",
- "type-fest": "^2.13.0",
- "widest-line": "^4.0.1",
- "wrap-ansi": "^8.0.1"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/ansi-regex": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/ansi-styles": {
- "version": "6.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/camelcase": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/chalk": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/emoji-regex": {
- "version": "9.2.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/boxen/node_modules/string-width": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/strip-ansi": {
- "version": "7.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/type-fest": {
- "version": "2.19.0",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/wrap-ansi": {
- "version": "8.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/brace-expansion": {
"version": "1.1.11",
"license": "MIT",
@@ -5313,39 +4940,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/builtins": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.0.0"
- }
- },
- "node_modules/builtins/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/builtins/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/bytes": {
"version": "3.1.2",
"license": "MIT",
@@ -5353,107 +4947,6 @@
"node": ">= 0.8"
}
},
- "node_modules/cacache": {
- "version": "16.1.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/fs": "^2.1.0",
- "@npmcli/move-file": "^2.0.0",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.1.0",
- "glob": "^8.0.1",
- "infer-owner": "^1.0.4",
- "lru-cache": "^7.7.1",
- "minipass": "^3.1.6",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "mkdirp": "^1.0.4",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^9.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/cacache/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/cacache/node_modules/glob": {
- "version": "8.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/cacache/node_modules/minimatch": {
- "version": "5.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cacheable-lookup": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- }
- },
- "node_modules/cacheable-request": {
- "version": "10.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/http-cache-semantics": "^4.0.1",
- "get-stream": "^6.0.1",
- "http-cache-semantics": "^4.1.0",
- "keyv": "^4.5.0",
- "mimic-response": "^4.0.0",
- "normalize-url": "^7.1.0",
- "responselike": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- }
- },
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cachedir": {
"version": "2.3.0",
"dev": true,
@@ -5645,17 +5138,6 @@
"node": ">=6"
}
},
- "node_modules/cli-boxes": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cli-cursor": {
"version": "3.1.0",
"dev": true,
@@ -5667,24 +5149,6 @@
"node": ">=8"
}
},
- "node_modules/cli-table": {
- "version": "0.3.11",
- "dev": true,
- "dependencies": {
- "colors": "1.0.3"
- },
- "engines": {
- "node": ">= 0.2.0"
- }
- },
- "node_modules/cli-table/node_modules/colors": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.1.90"
- }
- },
"node_modules/cli-table3": {
"version": "0.6.3",
"dev": true,
@@ -6029,38 +5493,6 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/config-chain": {
- "version": "1.1.13",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "node_modules/config-chain/node_modules/ini": {
- "version": "1.3.8",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/configstore": {
- "version": "6.0.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "dot-prop": "^6.0.1",
- "graceful-fs": "^4.2.6",
- "unique-string": "^3.0.0",
- "write-file-atomic": "^3.0.3",
- "xdg-basedir": "^5.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/yeoman/configstore?sponsor=1"
- }
- },
"node_modules/connect-redis": {
"version": "6.1.3",
"license": "MIT",
@@ -6195,31 +5627,6 @@
"node": ">= 8"
}
},
- "node_modules/crypto-random-string": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/crypto-random-string/node_modules/type-fest": {
- "version": "1.4.0",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/css-select": {
"version": "5.1.0",
"dev": true,
@@ -6496,39 +5903,6 @@
}
}
},
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response/node_modules/mimic-response": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/deep-is": {
"version": "0.1.4",
"dev": true,
@@ -6542,14 +5916,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/defer-to-connect": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/define-properties": {
"version": "1.1.4",
"dev": true,
@@ -6698,20 +6064,6 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
- "node_modules/dot-prop": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/dotenv": {
"version": "16.0.3",
"license": "BSD-2-Clause",
@@ -6841,6 +6193,7 @@
"version": "0.1.13",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"iconv-lite": "^0.6.2"
}
@@ -6849,6 +6202,7 @@
"version": "0.6.3",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -6954,24 +6308,11 @@
"node": ">= 0.5.9"
}
},
- "node_modules/env-paths": {
- "version": "2.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/eol": {
"version": "0.9.1",
"dev": true,
"license": "MIT"
},
- "node_modules/err-code": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT"
- },
"node_modules/error-ex": {
"version": "1.3.2",
"license": "MIT",
@@ -7103,17 +6444,6 @@
"node": ">=6"
}
},
- "node_modules/escape-goat": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/escape-html": {
"version": "1.0.3",
"license": "MIT"
@@ -7762,11 +7092,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/fast-memoize": {
- "version": "2.5.2",
- "dev": true,
- "license": "MIT"
- },
"node_modules/fastq": {
"version": "1.13.0",
"dev": true,
@@ -8013,14 +7338,6 @@
"node": ">= 6"
}
},
- "node_modules/form-data-encoder": {
- "version": "2.1.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.17"
- }
- },
"node_modules/forwarded": {
"version": "0.2.0",
"license": "MIT",
@@ -8028,14 +7345,6 @@
"node": ">= 0.6"
}
},
- "node_modules/fp-and-or": {
- "version": "0.1.3",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/framer-motion": {
"version": "7.5.3",
"license": "MIT",
@@ -8256,24 +7565,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/gauge": {
- "version": "4.0.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/generic-pool": {
"version": "3.8.2",
"license": "MIT",
@@ -8308,17 +7599,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-stdin": {
- "version": "8.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/get-stream": {
"version": "5.2.0",
"dev": true,
@@ -8505,41 +7785,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/got": {
- "version": "12.5.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sindresorhus/is": "^5.2.0",
- "@szmarczak/http-timer": "^5.0.1",
- "cacheable-lookup": "^7.0.0",
- "cacheable-request": "^10.2.1",
- "decompress-response": "^6.0.0",
- "form-data-encoder": "^2.1.2",
- "get-stream": "^6.0.1",
- "http2-wrapper": "^2.1.10",
- "lowercase-keys": "^3.0.0",
- "p-cancelable": "^3.0.0",
- "responselike": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
- }
- },
- "node_modules/got/node_modules/get-stream": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/graceful-fs": {
"version": "4.2.10",
"license": "ISC"
@@ -8657,17 +7902,6 @@
"version": "2.0.1",
"license": "ISC"
},
- "node_modules/has-yarn": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/he": {
"version": "1.2.0",
"dev": true,
@@ -8733,17 +7967,6 @@
"version": "16.13.1",
"license": "MIT"
},
- "node_modules/hosted-git-info": {
- "version": "5.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^7.5.1"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/html-entities": {
"version": "2.3.3",
"dev": true,
@@ -8774,11 +7997,6 @@
"entities": "^4.3.0"
}
},
- "node_modules/http-cache-semantics": {
- "version": "4.1.0",
- "dev": true,
- "license": "BSD-2-Clause"
- },
"node_modules/http-errors": {
"version": "2.0.0",
"license": "MIT",
@@ -8793,19 +8011,6 @@
"node": ">= 0.8"
}
},
- "node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/http-signature": {
"version": "1.3.6",
"dev": true,
@@ -8819,18 +8024,6 @@
"node": ">=0.10"
}
},
- "node_modules/http2-wrapper": {
- "version": "2.1.11",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.2.0"
- },
- "engines": {
- "node": ">=10.19.0"
- }
- },
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"license": "MIT",
@@ -8850,14 +8043,6 @@
"node": ">=8.12.0"
}
},
- "node_modules/humanize-ms": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
"node_modules/i18next": {
"version": "21.10.0",
"funding": [
@@ -8975,36 +8160,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/ignore-walk": {
- "version": "5.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minimatch": "^5.0.1"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/ignore-walk/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/ignore-walk/node_modules/minimatch": {
- "version": "5.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/immer": {
"version": "9.0.15",
"license": "MIT",
@@ -9032,14 +8187,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-lazy": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
"dev": true,
@@ -9055,11 +8202,6 @@
"node": ">=8"
}
},
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "dev": true,
- "license": "ISC"
- },
"node_modules/inflight": {
"version": "1.0.6",
"license": "ISC",
@@ -9100,11 +8242,6 @@
"loose-envify": "^1.0.0"
}
},
- "node_modules/ip": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/ipaddr.js": {
"version": "1.9.1",
"license": "MIT",
@@ -9261,11 +8398,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-lambda": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT"
- },
"node_modules/is-negated-glob": {
"version": "1.0.0",
"dev": true,
@@ -9285,17 +8417,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-npm": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-number": {
"version": "7.0.0",
"license": "MIT",
@@ -9317,14 +8438,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-obj": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-path-inside": {
"version": "3.0.3",
"dev": true,
@@ -9487,14 +8600,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-yarn-global": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/isarray": {
"version": "1.0.0",
"dev": true,
@@ -9995,11 +9100,6 @@
"node": ">=8"
}
},
- "node_modules/jju": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/jose": {
"version": "4.10.0",
"license": "MIT",
@@ -10042,23 +9142,10 @@
"node": ">=4"
}
},
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT"
- },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"license": "MIT"
},
- "node_modules/json-parse-helpfulerror": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jju": "^1.1.0"
- }
- },
"node_modules/json-schema": {
"version": "0.4.0",
"dev": true,
@@ -10100,19 +9187,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/jsonlines": {
- "version": "0.1.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jsonparse": {
- "version": "1.3.1",
- "dev": true,
- "engines": [
- "node >= 0.2.0"
- ],
- "license": "MIT"
- },
"node_modules/jsprim": {
"version": "2.0.2",
"dev": true,
@@ -10139,36 +9213,6 @@
"node": ">=4.0"
}
},
- "node_modules/keyv": {
- "version": "4.5.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kleur": {
- "version": "4.1.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/latest-version": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "package-json": "^8.1.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/lazy-ass": {
"version": "1.6.0",
"dev": true,
@@ -10851,29 +9895,10 @@
"loose-envify": "cli.js"
}
},
- "node_modules/lowercase-keys": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/lru_map": {
"version": "0.3.3",
"license": "MIT"
},
- "node_modules/lru-cache": {
- "version": "7.14.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/lz-string": {
"version": "1.4.4",
"license": "WTFPL",
@@ -10907,32 +9932,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/make-fetch-happen": {
- "version": "10.2.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^16.1.0",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^3.1.6",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^2.0.3",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^9.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/matcher-collection": {
"version": "2.0.1",
"dev": true,
@@ -11038,17 +10037,6 @@
"node": ">=6"
}
},
- "node_modules/mimic-response": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/min-indent": {
"version": "1.0.1",
"license": "MIT",
@@ -11084,75 +10072,6 @@
"node": ">=8"
}
},
- "node_modules/minipass-collect": {
- "version": "1.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-fetch": {
- "version": "2.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minipass": "^3.1.6",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- },
- "optionalDependencies": {
- "encoding": "^0.1.13"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-json-stream": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jsonparse": "^1.3.1",
- "minipass": "^3.0.0"
- }
- },
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-sized": {
- "version": "1.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/minizlib": {
"version": "2.1.2",
"license": "MIT",
@@ -11186,11 +10105,6 @@
"version": "2.1.2",
"license": "MIT"
},
- "node_modules/mute-stream": {
- "version": "0.0.8",
- "dev": true,
- "license": "ISC"
- },
"node_modules/nanoid": {
"version": "3.3.4",
"dev": true,
@@ -11258,54 +10172,6 @@
"webidl-conversions": "^3.0.0"
}
},
- "node_modules/node-gyp": {
- "version": "9.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^10.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": "^12.22 || ^14.13 || >=16"
- }
- },
- "node_modules/node-gyp/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-gyp/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/node-releases": {
"version": "2.0.6",
"license": "MIT"
@@ -11353,59 +10219,6 @@
"semver": "bin/semver"
}
},
- "node_modules/nopt": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "abbrev": "^1.0.0"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "4.0.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^5.0.0",
- "is-core-module": "^2.8.1",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/normalize-package-data/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/normalize-package-data/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
@@ -11414,17 +10227,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/normalize-url": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/now-and-later": {
"version": "2.0.1",
"dev": true,
@@ -11436,344 +10238,6 @@
"node": ">= 0.10"
}
},
- "node_modules/npm-bundled": {
- "version": "1.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "node_modules/npm-check-updates": {
- "version": "16.3.11",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "chalk": "^5.0.1",
- "cli-table": "^0.3.11",
- "commander": "^9.4.1",
- "fast-memoize": "^2.5.2",
- "find-up": "5.0.0",
- "fp-and-or": "^0.1.3",
- "get-stdin": "^8.0.0",
- "globby": "^11.0.4",
- "hosted-git-info": "^5.1.0",
- "json-parse-helpfulerror": "^1.0.3",
- "jsonlines": "^0.1.1",
- "lodash": "^4.17.21",
- "minimatch": "^5.1.0",
- "p-map": "^4.0.0",
- "pacote": "^13.6.2",
- "parse-github-url": "^1.0.2",
- "progress": "^2.0.3",
- "prompts-ncu": "^2.5.1",
- "rc-config-loader": "^4.1.0",
- "remote-git-tags": "^3.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.7",
- "semver-utils": "^1.1.4",
- "source-map-support": "^0.5.21",
- "spawn-please": "^1.0.0",
- "untildify": "^4.0.0",
- "update-notifier": "^6.0.2",
- "yaml": "^2.1.1"
- },
- "bin": {
- "ncu": "build/src/bin/cli.js",
- "npm-check-updates": "build/src/bin/cli.js"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/npm-check-updates/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/npm-check-updates/node_modules/chalk": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/npm-check-updates/node_modules/commander": {
- "version": "9.4.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || >=14"
- }
- },
- "node_modules/npm-check-updates/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-check-updates/node_modules/minimatch": {
- "version": "5.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-check-updates/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-check-updates/node_modules/yaml": {
- "version": "2.1.3",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/npm-install-checks": {
- "version": "5.0.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "semver": "^7.1.1"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-install-checks/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-install-checks/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-normalize-package-bin": {
- "version": "1.0.1",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/npm-package-arg": {
- "version": "9.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "hosted-git-info": "^5.0.0",
- "proc-log": "^2.0.1",
- "semver": "^7.3.5",
- "validate-npm-package-name": "^4.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-package-arg/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-package-arg/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-packlist": {
- "version": "5.1.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^8.0.1",
- "ignore-walk": "^5.0.1",
- "npm-bundled": "^2.0.0",
- "npm-normalize-package-bin": "^2.0.0"
- },
- "bin": {
- "npm-packlist": "bin/index.js"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-packlist/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/npm-packlist/node_modules/glob": {
- "version": "8.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/npm-packlist/node_modules/minimatch": {
- "version": "5.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-packlist/node_modules/npm-bundled": {
- "version": "2.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "npm-normalize-package-bin": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-pick-manifest": {
- "version": "7.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "npm-install-checks": "^5.0.0",
- "npm-normalize-package-bin": "^2.0.0",
- "npm-package-arg": "^9.0.0",
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-pick-manifest/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/npm-pick-manifest/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-registry-fetch": {
- "version": "13.3.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "make-fetch-happen": "^10.0.6",
- "minipass": "^3.1.6",
- "minipass-fetch": "^2.0.3",
- "minipass-json-stream": "^1.0.1",
- "minizlib": "^2.1.2",
- "npm-package-arg": "^9.0.1",
- "proc-log": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/npm-run-path": {
"version": "4.0.1",
"dev": true,
@@ -11785,20 +10249,6 @@
"node": ">=8"
}
},
- "node_modules/npmlog": {
- "version": "6.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/nth-check": {
"version": "2.1.1",
"dev": true,
@@ -12000,14 +10450,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/p-cancelable": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
"node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
@@ -12050,82 +10492,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/package-json": {
- "version": "8.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "got": "^12.1.0",
- "registry-auth-token": "^5.0.1",
- "registry-url": "^6.0.0",
- "semver": "^7.3.7"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/package-json/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/package-json/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/pacote": {
- "version": "13.6.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/git": "^3.0.0",
- "@npmcli/installed-package-contents": "^1.0.7",
- "@npmcli/promise-spawn": "^3.0.0",
- "@npmcli/run-script": "^4.1.0",
- "cacache": "^16.0.0",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.1.0",
- "infer-owner": "^1.0.4",
- "minipass": "^3.1.6",
- "mkdirp": "^1.0.4",
- "npm-package-arg": "^9.0.0",
- "npm-packlist": "^5.1.0",
- "npm-pick-manifest": "^7.0.0",
- "npm-registry-fetch": "^13.0.1",
- "proc-log": "^2.0.0",
- "promise-retry": "^2.0.1",
- "read-package-json": "^5.0.0",
- "read-package-json-fast": "^2.0.3",
- "rimraf": "^3.0.2",
- "ssri": "^9.0.0",
- "tar": "^6.1.11"
- },
- "bin": {
- "pacote": "lib/bin.js"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/parent-module": {
"version": "1.0.1",
"license": "MIT",
@@ -12136,17 +10502,6 @@
"node": ">=6"
}
},
- "node_modules/parse-github-url": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "bin": {
- "parse-github-url": "cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/parse-json": {
"version": "5.2.0",
"license": "MIT",
@@ -12432,14 +10787,6 @@
"version": "17.0.2",
"license": "MIT"
},
- "node_modules/proc-log": {
- "version": "2.0.1",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/process": {
"version": "0.11.10",
"license": "MIT",
@@ -12452,19 +10799,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/progress": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/promise-inflight": {
- "version": "1.0.1",
- "dev": true,
- "license": "ISC"
- },
"node_modules/promise-map-series": {
"version": "0.3.0",
"dev": true,
@@ -12473,30 +10807,6 @@
"node": "10.* || >= 12.*"
}
},
- "node_modules/promise-retry": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/prompts-ncu": {
- "version": "2.5.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kleur": "^4.0.1",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/prop-types": {
"version": "15.8.1",
"license": "MIT",
@@ -12510,11 +10820,6 @@
"version": "16.13.1",
"license": "MIT"
},
- "node_modules/proto-list": {
- "version": "1.2.4",
- "dev": true,
- "license": "ISC"
- },
"node_modules/proxy-addr": {
"version": "2.0.7",
"license": "MIT",
@@ -12576,20 +10881,6 @@
"node": ">=6"
}
},
- "node_modules/pupa": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-goat": "^4.0.0"
- },
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/qrcode.react": {
"version": "3.1.0",
"license": "ISC",
@@ -12634,17 +10925,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/quick-temp": {
"version": "0.1.8",
"dev": true,
@@ -12720,44 +11000,6 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
- "node_modules/rc": {
- "version": "1.2.8",
- "dev": true,
- "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/rc-config-loader": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.1.1",
- "js-yaml": "^4.0.0",
- "json5": "^2.1.2",
- "require-from-string": "^2.0.2"
- }
- },
- "node_modules/rc/node_modules/ini": {
- "version": "1.3.8",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/rc/node_modules/strip-json-comments": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/react": {
"version": "18.2.0",
"license": "MIT",
@@ -12966,88 +11208,6 @@
"react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/read": {
- "version": "1.0.7",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "mute-stream": "~0.0.4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/read-package-json": {
- "version": "5.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^8.0.1",
- "json-parse-even-better-errors": "^2.3.1",
- "normalize-package-data": "^4.0.0",
- "npm-normalize-package-bin": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/read-package-json-fast": {
- "version": "2.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "json-parse-even-better-errors": "^2.3.0",
- "npm-normalize-package-bin": "^1.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/read-package-json/node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/read-package-json/node_modules/glob": {
- "version": "8.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/read-package-json/node_modules/minimatch": {
- "version": "5.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/read-package-json/node_modules/npm-normalize-package-bin": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/readable-stream": {
"version": "3.6.0",
"license": "MIT",
@@ -13192,31 +11352,6 @@
"node": ">=4"
}
},
- "node_modules/registry-auth-token": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@pnpm/npm-conf": "^1.0.4"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/registry-url": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "rc": "1.2.8"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/regjsgen": {
"version": "0.7.1",
"dev": true,
@@ -13240,14 +11375,6 @@
"jsesc": "bin/jsesc"
}
},
- "node_modules/remote-git-tags": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/remove-bom-buffer": {
"version": "3.0.0",
"dev": true,
@@ -13365,11 +11492,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/resolve-alpn": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT"
- },
"node_modules/resolve-from": {
"version": "4.0.0",
"license": "MIT",
@@ -13388,20 +11510,6 @@
"node": ">= 0.10"
}
},
- "node_modules/responselike": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "lowercase-keys": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/restore-cursor": {
"version": "3.1.0",
"dev": true,
@@ -13414,14 +11522,6 @@
"node": ">=8"
}
},
- "node_modules/retry": {
- "version": "0.12.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/reusify": {
"version": "1.0.4",
"dev": true,
@@ -13600,50 +11700,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/semver-diff": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/semver-diff/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver-diff/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver-utils": {
- "version": "1.1.4",
- "dev": true,
- "license": "APACHEv2"
- },
"node_modules/send": {
"version": "0.18.0",
"license": "MIT",
@@ -13772,11 +11828,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT"
- },
"node_modules/slash": {
"version": "3.0.0",
"license": "MIT",
@@ -13810,15 +11861,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
"node_modules/socket.io": {
"version": "4.5.2",
"license": "MIT",
@@ -13849,32 +11891,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/socks": {
- "version": "2.7.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
- },
- "engines": {
- "node": ">= 10.13.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socks-proxy-agent": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
- },
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/sort-keys": {
"version": "5.0.0",
"dev": true,
@@ -13931,42 +11947,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/spawn-please": {
- "version": "1.0.0",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/spdx-correct": {
- "version": "3.1.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "dev": true,
- "license": "CC-BY-3.0"
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.12",
- "dev": true,
- "license": "CC0-1.0"
- },
"node_modules/sprintf-js": {
"version": "1.1.2",
"dev": true,
@@ -13996,17 +11976,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ssri": {
- "version": "9.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.1.1"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/stable": {
"version": "0.1.8",
"dev": true,
@@ -14774,14 +12743,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typedi": {
"version": "0.10.0",
"license": "MIT"
@@ -14882,28 +12843,6 @@
"node": ">=4"
}
},
- "node_modules/unique-filename": {
- "version": "2.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "unique-slug": "^3.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "3.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/unique-stream": {
"version": "2.3.1",
"dev": true,
@@ -14913,20 +12852,6 @@
"through2-filter": "^3.0.0"
}
},
- "node_modules/unique-string": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "crypto-random-string": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/universalify": {
"version": "2.0.0",
"dev": true,
@@ -14974,69 +12899,6 @@
"browserslist": ">= 4.21.0"
}
},
- "node_modules/update-notifier": {
- "version": "6.0.2",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "boxen": "^7.0.0",
- "chalk": "^5.0.1",
- "configstore": "^6.0.0",
- "has-yarn": "^3.0.0",
- "import-lazy": "^4.0.0",
- "is-ci": "^3.0.1",
- "is-installed-globally": "^0.4.0",
- "is-npm": "^6.0.0",
- "is-yarn-global": "^0.4.0",
- "latest-version": "^7.0.0",
- "pupa": "^3.1.0",
- "semver": "^7.3.7",
- "semver-diff": "^4.0.0",
- "xdg-basedir": "^5.1.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/yeoman/update-notifier?sponsor=1"
- }
- },
- "node_modules/update-notifier/node_modules/chalk": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/update-notifier/node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/update-notifier/node_modules/semver": {
- "version": "7.3.8",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/uri-js": {
"version": "4.4.1",
"dev": true,
@@ -15087,26 +12949,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/validate-npm-package-name": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "builtins": "^5.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/value-or-function": {
"version": "3.0.0",
"dev": true,
@@ -15624,66 +13466,6 @@
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
- "node_modules/widest-line": {
- "version": "4.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^5.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/widest-line/node_modules/ansi-regex": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/widest-line/node_modules/emoji-regex": {
- "version": "9.2.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/widest-line/node_modules/string-width": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/widest-line/node_modules/strip-ansi": {
- "version": "7.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
"node_modules/word-wrap": {
"version": "1.2.3",
"dev": true,
@@ -15742,17 +13524,6 @@
"version": "1.0.2",
"license": "ISC"
},
- "node_modules/write-file-atomic": {
- "version": "3.0.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
"node_modules/ws": {
"version": "8.9.0",
"license": "MIT",
@@ -15772,39 +13543,6 @@
}
}
},
- "node_modules/wscat": {
- "version": "5.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "commander": "^9.3.0",
- "https-proxy-agent": "^5.0.0",
- "read": "^1.0.7",
- "ws": "^8.0.0"
- },
- "bin": {
- "wscat": "bin/wscat"
- }
- },
- "node_modules/wscat/node_modules/commander": {
- "version": "9.4.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || >=14"
- }
- },
- "node_modules/xdg-basedir": {
- "version": "5.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/xtend": {
"version": "4.0.2",
"dev": true,
@@ -15909,10 +13647,8 @@
"@types/ws": "^8.5.3",
"dotenv-cli": "^6.0.0",
"nodemon": "^2.0.20",
- "npm-check-updates": "^16.3.3",
"ts-node": "^10.9.1",
- "typescript": "^4.8.4",
- "wscat": "^5.2.0"
+ "typescript": "^4.8.4"
}
},
"server/node_modules/@types/node": {
@@ -17097,10 +14833,6 @@
}
}
},
- "@gar/promisify": {
- "version": "1.1.3",
- "dev": true
- },
"@humanwhocodes/config-array": {
"version": "0.10.7",
"dev": true,
@@ -17467,119 +15199,9 @@
"fastq": "^1.6.0"
}
},
- "@npmcli/fs": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "@gar/promisify": "^1.1.3",
- "semver": "^7.3.5"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "@npmcli/git": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "@npmcli/promise-spawn": "^3.0.0",
- "lru-cache": "^7.4.4",
- "mkdirp": "^1.0.4",
- "npm-pick-manifest": "^7.0.0",
- "proc-log": "^2.0.0",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^2.0.1",
- "semver": "^7.3.5",
- "which": "^2.0.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- }
- }
- },
- "@npmcli/installed-package-contents": {
- "version": "1.0.7",
- "dev": true,
- "requires": {
- "npm-bundled": "^1.1.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "@npmcli/move-file": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- }
- },
- "@npmcli/node-gyp": {
- "version": "2.0.0",
- "dev": true
- },
- "@npmcli/promise-spawn": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "infer-owner": "^1.0.4"
- }
- },
- "@npmcli/run-script": {
- "version": "4.2.1",
- "dev": true,
- "requires": {
- "@npmcli/node-gyp": "^2.0.0",
- "@npmcli/promise-spawn": "^3.0.0",
- "node-gyp": "^9.0.0",
- "read-package-json-fast": "^2.0.3",
- "which": "^2.0.2"
- }
- },
"@phc/format": {
"version": "1.0.0"
},
- "@pnpm/network.ca-file": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "graceful-fs": "4.2.10"
- }
- },
- "@pnpm/npm-conf": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "@pnpm/network.ca-file": "^1.0.1",
- "config-chain": "^1.1.11"
- }
- },
"@popperjs/core": {
"version": "2.11.6"
},
@@ -17727,10 +15349,6 @@
"@sinclair/typebox": {
"version": "0.24.46"
},
- "@sindresorhus/is": {
- "version": "5.3.0",
- "dev": true
- },
"@socket.io/component-emitter": {
"version": "3.1.0"
},
@@ -17840,13 +15458,6 @@
"@svgr/plugin-svgo": "^6.5.0"
}
},
- "@szmarczak/http-timer": {
- "version": "5.0.1",
- "dev": true,
- "requires": {
- "defer-to-connect": "^2.0.1"
- }
- },
"@tanstack/query-core": {
"version": "4.12.0"
},
@@ -17962,10 +15573,6 @@
"version": "14.4.3",
"requires": {}
},
- "@tootallnate/once": {
- "version": "2.0.0",
- "dev": true
- },
"@trysound/sax": {
"version": "0.2.0",
"dev": true
@@ -18070,10 +15677,6 @@
"hoist-non-react-statics": "^3.3.0"
}
},
- "@types/http-cache-semantics": {
- "version": "4.0.1",
- "dev": true
- },
"@types/istanbul-lib-coverage": {
"version": "2.0.4"
},
@@ -18583,21 +16186,6 @@
"debug": "4"
}
},
- "agentkeepalive": {
- "version": "4.2.1",
- "dev": true,
- "requires": {
- "debug": "^4.1.0",
- "depd": "^1.1.2",
- "humanize-ms": "^1.2.1"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.2",
- "dev": true
- }
- }
- },
"aggregate-error": {
"version": "3.1.0",
"dev": true,
@@ -18644,13 +16232,6 @@
"dev": true,
"requires": {}
},
- "ansi-align": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "string-width": "^4.1.0"
- }
- },
"ansi-colors": {
"version": "4.1.3",
"dev": true
@@ -18697,14 +16278,6 @@
"version": "2.2.0",
"dev": true
},
- "are-we-there-yet": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- }
- },
"arg": {
"version": "4.1.3",
"dev": true
@@ -18911,71 +16484,6 @@
"version": "1.0.0",
"dev": true
},
- "boxen": {
- "version": "7.0.0",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.1",
- "camelcase": "^7.0.0",
- "chalk": "^5.0.1",
- "cli-boxes": "^3.0.0",
- "string-width": "^5.1.2",
- "type-fest": "^2.13.0",
- "widest-line": "^4.0.1",
- "wrap-ansi": "^8.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "dev": true
- },
- "ansi-styles": {
- "version": "6.2.1",
- "dev": true
- },
- "camelcase": {
- "version": "7.0.0",
- "dev": true
- },
- "chalk": {
- "version": "5.1.2",
- "dev": true
- },
- "emoji-regex": {
- "version": "9.2.2",
- "dev": true
- },
- "string-width": {
- "version": "5.1.2",
- "dev": true,
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- }
- },
- "strip-ansi": {
- "version": "7.0.1",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- },
- "type-fest": {
- "version": "2.19.0",
- "dev": true
- },
- "wrap-ansi": {
- "version": "8.0.1",
- "dev": true,
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- }
- }
- }
- },
"brace-expansion": {
"version": "1.1.11",
"requires": {
@@ -19070,106 +16578,9 @@
"version": "1.1.2",
"dev": true
},
- "builtins": {
- "version": "5.0.1",
- "dev": true,
- "requires": {
- "semver": "^7.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
"bytes": {
"version": "3.1.2"
},
- "cacache": {
- "version": "16.1.3",
- "dev": true,
- "requires": {
- "@npmcli/fs": "^2.1.0",
- "@npmcli/move-file": "^2.0.0",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.1.0",
- "glob": "^8.0.1",
- "infer-owner": "^1.0.4",
- "lru-cache": "^7.7.1",
- "minipass": "^3.1.6",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "mkdirp": "^1.0.4",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^9.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^2.0.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "glob": {
- "version": "8.0.3",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- }
- },
- "minimatch": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "cacheable-lookup": {
- "version": "7.0.0",
- "dev": true
- },
- "cacheable-request": {
- "version": "10.2.1",
- "dev": true,
- "requires": {
- "@types/http-cache-semantics": "^4.0.1",
- "get-stream": "^6.0.1",
- "http-cache-semantics": "^4.1.0",
- "keyv": "^4.5.0",
- "mimic-response": "^4.0.0",
- "normalize-url": "^7.1.0",
- "responselike": "^3.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "6.0.1",
- "dev": true
- }
- }
- },
"cachedir": {
"version": "2.3.0",
"dev": true
@@ -19280,10 +16691,6 @@
"version": "2.2.0",
"dev": true
},
- "cli-boxes": {
- "version": "3.0.0",
- "dev": true
- },
"cli-cursor": {
"version": "3.1.0",
"dev": true,
@@ -19291,19 +16698,6 @@
"restore-cursor": "^3.1.0"
}
},
- "cli-table": {
- "version": "0.3.11",
- "dev": true,
- "requires": {
- "colors": "1.0.3"
- },
- "dependencies": {
- "colors": {
- "version": "1.0.3",
- "dev": true
- }
- }
- },
"cli-table3": {
"version": "0.6.3",
"dev": true,
@@ -19522,31 +16916,6 @@
}
}
},
- "config-chain": {
- "version": "1.1.13",
- "dev": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- },
- "dependencies": {
- "ini": {
- "version": "1.3.8",
- "dev": true
- }
- }
- },
- "configstore": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "dot-prop": "^6.0.1",
- "graceful-fs": "^4.2.6",
- "unique-string": "^3.0.0",
- "write-file-atomic": "^3.0.3",
- "xdg-basedir": "^5.0.1"
- }
- },
"connect-redis": {
"version": "6.1.3"
},
@@ -19630,19 +16999,6 @@
"which": "^2.0.1"
}
},
- "crypto-random-string": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "type-fest": "^1.0.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "1.4.0",
- "dev": true
- }
- }
- },
"css-select": {
"version": "5.1.0",
"dev": true,
@@ -19823,23 +17179,6 @@
"ms": "2.1.2"
}
},
- "decompress-response": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "mimic-response": "^3.1.0"
- },
- "dependencies": {
- "mimic-response": {
- "version": "3.1.0",
- "dev": true
- }
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "dev": true
- },
"deep-is": {
"version": "0.1.4",
"dev": true
@@ -19848,10 +17187,6 @@
"version": "4.2.2",
"dev": true
},
- "defer-to-connect": {
- "version": "2.0.1",
- "dev": true
- },
"define-properties": {
"version": "1.1.4",
"dev": true,
@@ -19935,13 +17270,6 @@
"domhandler": "^5.0.1"
}
},
- "dot-prop": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
"dotenv": {
"version": "16.0.3"
},
@@ -20035,6 +17363,7 @@
"encoding": {
"version": "0.1.13",
"optional": true,
+ "peer": true,
"requires": {
"iconv-lite": "^0.6.2"
},
@@ -20042,6 +17371,7 @@
"iconv-lite": {
"version": "0.6.3",
"optional": true,
+ "peer": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
@@ -20105,18 +17435,10 @@
"env": {
"version": "0.0.2"
},
- "env-paths": {
- "version": "2.2.1",
- "dev": true
- },
"eol": {
"version": "0.9.1",
"dev": true
},
- "err-code": {
- "version": "2.0.3",
- "dev": true
- },
"error-ex": {
"version": "1.3.2",
"requires": {
@@ -20209,10 +17531,6 @@
"escalade": {
"version": "3.1.1"
},
- "escape-goat": {
- "version": "4.0.0",
- "dev": true
- },
"escape-html": {
"version": "1.0.3"
},
@@ -20640,10 +17958,6 @@
"version": "2.0.6",
"dev": true
},
- "fast-memoize": {
- "version": "2.5.2",
- "dev": true
- },
"fastq": {
"version": "1.13.0",
"dev": true,
@@ -20817,17 +18131,9 @@
"mime-types": "^2.1.12"
}
},
- "form-data-encoder": {
- "version": "2.1.3",
- "dev": true
- },
"forwarded": {
"version": "0.2.0"
},
- "fp-and-or": {
- "version": "0.1.3",
- "dev": true
- },
"framer-motion": {
"version": "7.5.3",
"requires": {
@@ -20996,20 +18302,6 @@
"version": "1.2.3",
"dev": true
},
- "gauge": {
- "version": "4.0.4",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- }
- },
"generic-pool": {
"version": "3.8.2"
},
@@ -21028,10 +18320,6 @@
"has-symbols": "^1.0.3"
}
},
- "get-stdin": {
- "version": "8.0.0",
- "dev": true
- },
"get-stream": {
"version": "5.2.0",
"dev": true,
@@ -21162,29 +18450,6 @@
"slash": "^3.0.0"
}
},
- "got": {
- "version": "12.5.2",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^5.2.0",
- "@szmarczak/http-timer": "^5.0.1",
- "cacheable-lookup": "^7.0.0",
- "cacheable-request": "^10.2.1",
- "decompress-response": "^6.0.0",
- "form-data-encoder": "^2.1.2",
- "get-stream": "^6.0.1",
- "http2-wrapper": "^2.1.10",
- "lowercase-keys": "^3.0.0",
- "p-cancelable": "^3.0.0",
- "responselike": "^3.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "6.0.1",
- "dev": true
- }
- }
- },
"graceful-fs": {
"version": "4.2.10"
},
@@ -21266,10 +18531,6 @@
"has-unicode": {
"version": "2.0.1"
},
- "has-yarn": {
- "version": "3.0.0",
- "dev": true
- },
"he": {
"version": "1.2.0",
"dev": true
@@ -21325,13 +18586,6 @@
}
}
},
- "hosted-git-info": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "lru-cache": "^7.5.1"
- }
- },
"html-entities": {
"version": "2.3.3",
"dev": true
@@ -21352,10 +18606,6 @@
"entities": "^4.3.0"
}
},
- "http-cache-semantics": {
- "version": "4.1.0",
- "dev": true
- },
"http-errors": {
"version": "2.0.0",
"requires": {
@@ -21366,15 +18616,6 @@
"toidentifier": "1.0.1"
}
},
- "http-proxy-agent": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- }
- },
"http-signature": {
"version": "1.3.6",
"dev": true,
@@ -21384,14 +18625,6 @@
"sshpk": "^1.14.1"
}
},
- "http2-wrapper": {
- "version": "2.1.11",
- "dev": true,
- "requires": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.2.0"
- }
- },
"https-proxy-agent": {
"version": "5.0.1",
"requires": {
@@ -21403,13 +18636,6 @@
"version": "1.1.1",
"dev": true
},
- "humanize-ms": {
- "version": "1.2.1",
- "dev": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
"i18next": {
"version": "21.10.0",
"requires": {
@@ -21473,29 +18699,6 @@
"version": "1.0.1",
"dev": true
},
- "ignore-walk": {
- "version": "5.0.1",
- "dev": true,
- "requires": {
- "minimatch": "^5.0.1"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
"immer": {
"version": "9.0.15"
},
@@ -21510,10 +18713,6 @@
"resolve-from": "^4.0.0"
}
},
- "import-lazy": {
- "version": "4.0.0",
- "dev": true
- },
"imurmurhash": {
"version": "0.1.4",
"dev": true
@@ -21521,10 +18720,6 @@
"indent-string": {
"version": "4.0.0"
},
- "infer-owner": {
- "version": "1.0.4",
- "dev": true
- },
"inflight": {
"version": "1.0.6",
"requires": {
@@ -21554,10 +18749,6 @@
"loose-envify": "^1.0.0"
}
},
- "ip": {
- "version": "2.0.0",
- "dev": true
- },
"ipaddr.js": {
"version": "1.9.1"
},
@@ -21645,10 +18836,6 @@
"is-path-inside": "^3.0.2"
}
},
- "is-lambda": {
- "version": "1.0.1",
- "dev": true
- },
"is-negated-glob": {
"version": "1.0.0",
"dev": true
@@ -21657,10 +18844,6 @@
"version": "2.0.2",
"dev": true
},
- "is-npm": {
- "version": "6.0.0",
- "dev": true
- },
"is-number": {
"version": "7.0.0"
},
@@ -21671,10 +18854,6 @@
"has-tostringtag": "^1.0.0"
}
},
- "is-obj": {
- "version": "2.0.0",
- "dev": true
- },
"is-path-inside": {
"version": "3.0.3",
"dev": true
@@ -21764,10 +18943,6 @@
"version": "1.0.2",
"dev": true
},
- "is-yarn-global": {
- "version": "0.4.0",
- "dev": true
- },
"isarray": {
"version": "1.0.0",
"dev": true
@@ -21904,15 +19079,13 @@
"jose": "^4.10.0",
"loglevel": "^1.8.0",
"nodemon": "^2.0.20",
- "npm-check-updates": "^16.3.3",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.5.7",
"ts-node": "^10.9.1",
"typedi": "^0.10.0",
"typescript": "^4.8.4",
"whatwg-url": "^11.0.0",
- "ws": "^8.9.0",
- "wscat": "^5.2.0"
+ "ws": "^8.9.0"
},
"dependencies": {
"@types/node": {
@@ -22163,10 +19336,6 @@
}
}
},
- "jju": {
- "version": "1.4.0",
- "dev": true
- },
"jose": {
"version": "4.10.0"
},
@@ -22191,20 +19360,9 @@
"jsesc": {
"version": "2.5.2"
},
- "json-buffer": {
- "version": "3.0.1",
- "dev": true
- },
"json-parse-even-better-errors": {
"version": "2.3.1"
},
- "json-parse-helpfulerror": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "jju": "^1.1.0"
- }
- },
"json-schema": {
"version": "0.4.0",
"dev": true
@@ -22232,14 +19390,6 @@
"universalify": "^2.0.0"
}
},
- "jsonlines": {
- "version": "0.1.1",
- "dev": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "dev": true
- },
"jsprim": {
"version": "2.0.2",
"dev": true,
@@ -22258,24 +19408,6 @@
"object.assign": "^4.1.3"
}
},
- "keyv": {
- "version": "4.5.0",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.1"
- }
- },
- "kleur": {
- "version": "4.1.5",
- "dev": true
- },
- "latest-version": {
- "version": "7.0.0",
- "dev": true,
- "requires": {
- "package-json": "^8.1.0"
- }
- },
"lazy-ass": {
"version": "1.6.0",
"dev": true
@@ -22684,17 +19816,9 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "lowercase-keys": {
- "version": "3.0.0",
- "dev": true
- },
"lru_map": {
"version": "0.3.3"
},
- "lru-cache": {
- "version": "7.14.0",
- "dev": true
- },
"lz-string": {
"version": "1.4.4"
},
@@ -22715,28 +19839,6 @@
"version": "1.3.6",
"dev": true
},
- "make-fetch-happen": {
- "version": "10.2.1",
- "dev": true,
- "requires": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^16.1.0",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^3.1.6",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^2.0.3",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^9.0.0"
- }
- },
"matcher-collection": {
"version": "2.0.1",
"dev": true,
@@ -22796,10 +19898,6 @@
"version": "2.1.0",
"dev": true
},
- "mimic-response": {
- "version": "4.0.0",
- "dev": true
- },
"min-indent": {
"version": "1.0.1"
},
@@ -22819,52 +19917,6 @@
"yallist": "^4.0.0"
}
},
- "minipass-collect": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-fetch": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "encoding": "^0.1.13",
- "minipass": "^3.1.6",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- }
- },
- "minipass-flush": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-json-stream": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "jsonparse": "^1.3.1",
- "minipass": "^3.0.0"
- }
- },
- "minipass-pipeline": {
- "version": "1.2.4",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-sized": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
"minizlib": {
"version": "2.1.2",
"requires": {
@@ -22882,10 +19934,6 @@
"ms": {
"version": "2.1.2"
},
- "mute-stream": {
- "version": "0.0.8",
- "dev": true
- },
"nanoid": {
"version": "3.3.4",
"dev": true
@@ -22926,38 +19974,6 @@
}
}
},
- "node-gyp": {
- "version": "9.3.0",
- "dev": true,
- "requires": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^10.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
"node-releases": {
"version": "2.0.6"
},
@@ -22990,47 +20006,10 @@
}
}
},
- "nopt": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "abbrev": "^1.0.0"
- }
- },
- "normalize-package-data": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "hosted-git-info": "^5.0.0",
- "is-core-module": "^2.8.1",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
"normalize-path": {
"version": "3.0.0",
"dev": true
},
- "normalize-url": {
- "version": "7.2.0",
- "dev": true
- },
"now-and-later": {
"version": "2.0.1",
"dev": true,
@@ -23038,233 +20017,6 @@
"once": "^1.3.2"
}
},
- "npm-bundled": {
- "version": "1.1.2",
- "dev": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-check-updates": {
- "version": "16.3.11",
- "dev": true,
- "requires": {
- "chalk": "^5.0.1",
- "cli-table": "^0.3.11",
- "commander": "^9.4.1",
- "fast-memoize": "^2.5.2",
- "find-up": "5.0.0",
- "fp-and-or": "^0.1.3",
- "get-stdin": "^8.0.0",
- "globby": "^11.0.4",
- "hosted-git-info": "^5.1.0",
- "json-parse-helpfulerror": "^1.0.3",
- "jsonlines": "^0.1.1",
- "lodash": "^4.17.21",
- "minimatch": "^5.1.0",
- "p-map": "^4.0.0",
- "pacote": "^13.6.2",
- "parse-github-url": "^1.0.2",
- "progress": "^2.0.3",
- "prompts-ncu": "^2.5.1",
- "rc-config-loader": "^4.1.0",
- "remote-git-tags": "^3.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.7",
- "semver-utils": "^1.1.4",
- "source-map-support": "^0.5.21",
- "spawn-please": "^1.0.0",
- "untildify": "^4.0.0",
- "update-notifier": "^6.0.2",
- "yaml": "^2.1.1"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "chalk": {
- "version": "5.1.2",
- "dev": true
- },
- "commander": {
- "version": "9.4.1",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minimatch": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "yaml": {
- "version": "2.1.3",
- "dev": true
- }
- }
- },
- "npm-install-checks": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "semver": "^7.1.1"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "dev": true
- },
- "npm-package-arg": {
- "version": "9.1.2",
- "dev": true,
- "requires": {
- "hosted-git-info": "^5.0.0",
- "proc-log": "^2.0.1",
- "semver": "^7.3.5",
- "validate-npm-package-name": "^4.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "npm-packlist": {
- "version": "5.1.3",
- "dev": true,
- "requires": {
- "glob": "^8.0.1",
- "ignore-walk": "^5.0.1",
- "npm-bundled": "^2.0.0",
- "npm-normalize-package-bin": "^2.0.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "glob": {
- "version": "8.0.3",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- }
- },
- "minimatch": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "npm-bundled": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "npm-normalize-package-bin": "^2.0.0"
- }
- },
- "npm-normalize-package-bin": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "npm-pick-manifest": {
- "version": "7.0.2",
- "dev": true,
- "requires": {
- "npm-install-checks": "^5.0.0",
- "npm-normalize-package-bin": "^2.0.0",
- "npm-package-arg": "^9.0.0",
- "semver": "^7.3.5"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "npm-normalize-package-bin": {
- "version": "2.0.0",
- "dev": true
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "npm-registry-fetch": {
- "version": "13.3.1",
- "dev": true,
- "requires": {
- "make-fetch-happen": "^10.0.6",
- "minipass": "^3.1.6",
- "minipass-fetch": "^2.0.3",
- "minipass-json-stream": "^1.0.1",
- "minizlib": "^2.1.2",
- "npm-package-arg": "^9.0.1",
- "proc-log": "^2.0.0"
- }
- },
"npm-run-path": {
"version": "4.0.1",
"dev": true,
@@ -23272,16 +20024,6 @@
"path-key": "^3.0.0"
}
},
- "npmlog": {
- "version": "6.0.2",
- "dev": true,
- "requires": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- }
- },
"nth-check": {
"version": "2.1.1",
"dev": true,
@@ -23415,10 +20157,6 @@
"version": "1.2.2",
"dev": true
},
- "p-cancelable": {
- "version": "3.0.0",
- "dev": true
- },
"p-limit": {
"version": "3.1.0",
"dev": true,
@@ -23440,69 +20178,12 @@
"aggregate-error": "^3.0.0"
}
},
- "package-json": {
- "version": "8.1.0",
- "dev": true,
- "requires": {
- "got": "^12.1.0",
- "registry-auth-token": "^5.0.1",
- "registry-url": "^6.0.0",
- "semver": "^7.3.7"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "pacote": {
- "version": "13.6.2",
- "dev": true,
- "requires": {
- "@npmcli/git": "^3.0.0",
- "@npmcli/installed-package-contents": "^1.0.7",
- "@npmcli/promise-spawn": "^3.0.0",
- "@npmcli/run-script": "^4.1.0",
- "cacache": "^16.0.0",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.1.0",
- "infer-owner": "^1.0.4",
- "minipass": "^3.1.6",
- "mkdirp": "^1.0.4",
- "npm-package-arg": "^9.0.0",
- "npm-packlist": "^5.1.0",
- "npm-pick-manifest": "^7.0.0",
- "npm-registry-fetch": "^13.0.1",
- "proc-log": "^2.0.0",
- "promise-retry": "^2.0.1",
- "read-package-json": "^5.0.0",
- "read-package-json-fast": "^2.0.3",
- "rimraf": "^3.0.2",
- "ssri": "^9.0.0",
- "tar": "^6.1.11"
- }
- },
"parent-module": {
"version": "1.0.1",
"requires": {
"callsites": "^3.0.0"
}
},
- "parse-github-url": {
- "version": "1.0.2",
- "dev": true
- },
"parse-json": {
"version": "5.2.0",
"requires": {
@@ -23664,10 +20345,6 @@
}
}
},
- "proc-log": {
- "version": "2.0.1",
- "dev": true
- },
"process": {
"version": "0.11.10"
},
@@ -23675,34 +20352,10 @@
"version": "2.0.1",
"dev": true
},
- "progress": {
- "version": "2.0.3",
- "dev": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "dev": true
- },
"promise-map-series": {
"version": "0.3.0",
"dev": true
},
- "promise-retry": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- }
- },
- "prompts-ncu": {
- "version": "2.5.1",
- "dev": true,
- "requires": {
- "kleur": "^4.0.1",
- "sisteransi": "^1.0.5"
- }
- },
"prop-types": {
"version": "15.8.1",
"requires": {
@@ -23716,10 +20369,6 @@
}
}
},
- "proto-list": {
- "version": "1.2.4",
- "dev": true
- },
"proxy-addr": {
"version": "2.0.7",
"requires": {
@@ -23769,13 +20418,6 @@
"punycode": {
"version": "2.1.1"
},
- "pupa": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "escape-goat": "^4.0.0"
- }
- },
"qrcode.react": {
"version": "3.1.0",
"requires": {}
@@ -23794,10 +20436,6 @@
"version": "1.0.1",
"dev": true
},
- "quick-lru": {
- "version": "5.1.1",
- "dev": true
- },
"quick-temp": {
"version": "0.1.8",
"dev": true,
@@ -23846,36 +20484,6 @@
"schema-utils": "^3.0.0"
}
},
- "rc": {
- "version": "1.2.8",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "ini": {
- "version": "1.3.8",
- "dev": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "dev": true
- }
- }
- },
- "rc-config-loader": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "js-yaml": "^4.0.0",
- "json5": "^2.1.2",
- "require-from-string": "^2.0.2"
- }
- },
"react": {
"version": "18.2.0",
"requires": {
@@ -23982,62 +20590,6 @@
"react-is": "^17.0.1 || ^18.0.0"
}
},
- "read": {
- "version": "1.0.7",
- "dev": true,
- "requires": {
- "mute-stream": "~0.0.4"
- }
- },
- "read-package-json": {
- "version": "5.0.2",
- "dev": true,
- "requires": {
- "glob": "^8.0.1",
- "json-parse-even-better-errors": "^2.3.1",
- "normalize-package-data": "^4.0.0",
- "npm-normalize-package-bin": "^2.0.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "glob": {
- "version": "8.0.3",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- }
- },
- "minimatch": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "read-package-json-fast": {
- "version": "2.0.3",
- "dev": true,
- "requires": {
- "json-parse-even-better-errors": "^2.3.0",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
"readable-stream": {
"version": "3.6.0",
"requires": {
@@ -24136,20 +20688,6 @@
"unicode-match-property-value-ecmascript": "^2.0.0"
}
},
- "registry-auth-token": {
- "version": "5.0.1",
- "dev": true,
- "requires": {
- "@pnpm/npm-conf": "^1.0.4"
- }
- },
- "registry-url": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "rc": "1.2.8"
- }
- },
"regjsgen": {
"version": "0.7.1",
"dev": true
@@ -24167,10 +20705,6 @@
}
}
},
- "remote-git-tags": {
- "version": "3.0.0",
- "dev": true
- },
"remove-bom-buffer": {
"version": "3.0.0",
"dev": true,
@@ -24256,10 +20790,6 @@
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
- "resolve-alpn": {
- "version": "1.2.1",
- "dev": true
- },
"resolve-from": {
"version": "4.0.0"
},
@@ -24270,13 +20800,6 @@
"value-or-function": "^3.0.0"
}
},
- "responselike": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "lowercase-keys": "^3.0.0"
- }
- },
"restore-cursor": {
"version": "3.1.0",
"dev": true,
@@ -24285,10 +20808,6 @@
"signal-exit": "^3.0.2"
}
},
- "retry": {
- "version": "0.12.0",
- "dev": true
- },
"reusify": {
"version": "1.0.4",
"dev": true
@@ -24384,33 +20903,6 @@
"semver": {
"version": "6.3.0"
},
- "semver-diff": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "semver": "^7.3.5"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "semver-utils": {
- "version": "1.1.4",
- "dev": true
- },
"send": {
"version": "0.18.0",
"requires": {
@@ -24506,10 +20998,6 @@
}
}
},
- "sisteransi": {
- "version": "1.0.5",
- "dev": true
- },
"slash": {
"version": "3.0.0"
},
@@ -24527,10 +21015,6 @@
}
}
},
- "smart-buffer": {
- "version": "4.2.0",
- "dev": true
- },
"socket.io": {
"version": "4.5.2",
"requires": {
@@ -24552,23 +21036,6 @@
"debug": "~4.3.1"
}
},
- "socks": {
- "version": "2.7.1",
- "dev": true,
- "requires": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
- }
- },
- "socks-proxy-agent": {
- "version": "7.0.0",
- "dev": true,
- "requires": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
- }
- },
"sort-keys": {
"version": "5.0.0",
"dev": true,
@@ -24605,34 +21072,6 @@
"version": "0.0.2-1",
"dev": true
},
- "spawn-please": {
- "version": "1.0.0",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.1",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.12",
- "dev": true
- },
"sprintf-js": {
"version": "1.1.2",
"dev": true
@@ -24652,13 +21091,6 @@
"tweetnacl": "~0.14.0"
}
},
- "ssri": {
- "version": "9.0.1",
- "dev": true,
- "requires": {
- "minipass": "^3.1.1"
- }
- },
"stable": {
"version": "0.1.8",
"dev": true
@@ -25169,13 +21601,6 @@
"version": "0.0.6",
"dev": true
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typedi": {
"version": "0.10.0"
},
@@ -25234,20 +21659,6 @@
"version": "2.1.0",
"dev": true
},
- "unique-filename": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "unique-slug": "^3.0.0"
- }
- },
- "unique-slug": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
"unique-stream": {
"version": "2.3.1",
"dev": true,
@@ -25256,13 +21667,6 @@
"through2-filter": "^3.0.0"
}
},
- "unique-string": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "crypto-random-string": "^4.0.0"
- }
- },
"universalify": {
"version": "2.0.0",
"dev": true
@@ -25281,46 +21685,6 @@
"picocolors": "^1.0.0"
}
},
- "update-notifier": {
- "version": "6.0.2",
- "dev": true,
- "requires": {
- "boxen": "^7.0.0",
- "chalk": "^5.0.1",
- "configstore": "^6.0.0",
- "has-yarn": "^3.0.0",
- "import-lazy": "^4.0.0",
- "is-ci": "^3.0.1",
- "is-installed-globally": "^0.4.0",
- "is-npm": "^6.0.0",
- "is-yarn-global": "^0.4.0",
- "latest-version": "^7.0.0",
- "pupa": "^3.1.0",
- "semver": "^7.3.7",
- "semver-diff": "^4.0.0",
- "xdg-basedir": "^5.1.0"
- },
- "dependencies": {
- "chalk": {
- "version": "5.1.2",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "semver": {
- "version": "7.3.8",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
"uri-js": {
"version": "4.4.1",
"dev": true,
@@ -25357,21 +21721,6 @@
"version": "3.0.1",
"dev": true
},
- "validate-npm-package-license": {
- "version": "3.0.4",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "validate-npm-package-name": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "builtins": "^5.0.0"
- }
- },
"value-or-function": {
"version": "3.0.0",
"dev": true
@@ -25715,39 +22064,6 @@
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
- "widest-line": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "string-width": "^5.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "dev": true
- },
- "emoji-regex": {
- "version": "9.2.2",
- "dev": true
- },
- "string-width": {
- "version": "5.1.2",
- "dev": true,
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- }
- },
- "strip-ansi": {
- "version": "7.0.1",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
"word-wrap": {
"version": "1.2.3",
"dev": true
@@ -25784,40 +22100,10 @@
"wrappy": {
"version": "1.0.2"
},
- "write-file-atomic": {
- "version": "3.0.3",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
"ws": {
"version": "8.9.0",
"requires": {}
},
- "wscat": {
- "version": "5.2.0",
- "dev": true,
- "requires": {
- "commander": "^9.3.0",
- "https-proxy-agent": "^5.0.0",
- "read": "^1.0.7",
- "ws": "^8.0.0"
- },
- "dependencies": {
- "commander": {
- "version": "9.4.1",
- "dev": true
- }
- }
- },
- "xdg-basedir": {
- "version": "5.1.0",
- "dev": true
- },
"xtend": {
"version": "4.0.2",
"dev": true
diff --git a/server/.gitignore b/server/.gitignore
index 12fee05..bb6d966 100644
--- a/server/.gitignore
+++ b/server/.gitignore
@@ -1,2 +1,2 @@
-creds.json
-admin.json
\ No newline at end of file
+accounts.json
+admin.json
diff --git a/server/package.json b/server/package.json
index bfcca37..d4ac1be 100644
--- a/server/package.json
+++ b/server/package.json
@@ -5,7 +5,7 @@
"start": "nodemon --watch src src/index.ts",
"start:prod": "env NODE_ENV=production node dist/index.js",
"build": "tsc",
- "clean": "rm -Rf dist tsconfig.tsbuildinfo",
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
"lint": "eslint src",
"lint:fix": "eslint --fix src",
"format": "prettier --write src",
@@ -20,10 +20,8 @@
"@types/ws": "^8.5.3",
"dotenv-cli": "^6.0.0",
"nodemon": "^2.0.20",
- "npm-check-updates": "^16.3.3",
"ts-node": "^10.9.1",
- "typescript": "^4.8.4",
- "wscat": "^5.2.0"
+ "typescript": "^4.8.4"
},
"dependencies": {
"argon2": "^0.29.1",
diff --git a/server/src/app.ts b/server/src/app.ts
index f6086cd..27e6e99 100644
--- a/server/src/app.ts
+++ b/server/src/app.ts
@@ -22,7 +22,6 @@
import log from 'loglevel';
import { Service } from 'typedi';
-import { bindWebRTCCallbacks } from './handlers/webrtc-handler.js';
import { checkAdminSetup } from './middleware/setup.js';
import { accountRouter } from './routers/account-router.js';
import { authRouter } from './routers/auth-router.js';
@@ -32,44 +31,43 @@
import { defaultModeratorsRouter } from './routers/default-moderators-router.js';
import { nameserverRouter } from './routers/nameserver-router.js';
import { setupRouter } from './routers/setup-router.js';
+import { bindWebRTCCallbacks } from './websocket/webrtc-handler.js';
@Service()
export class App {
- async build() {
- const app = express();
+ app = express();
+ constructor() {
// Setup middleware
- app.use(helmet());
- app.use(cors());
- app.use(json());
+ this.app.use(helmet());
+ this.app.use(cors());
+ this.app.use(json());
// Enforce admin setup
- app.use('/setup', setupRouter);
- app.use(checkAdminSetup);
+ this.app.use('/setup', setupRouter);
+ this.app.use(checkAdminSetup);
// Setup routing
- app.use('/auth', authRouter);
- app.use('/account', accountRouter);
- app.use('/contacts', contactsRouter);
- app.use('/default-moderators', defaultModeratorsRouter);
- app.use('/conversations', conversationRouter);
- app.use('/calls', callRouter);
- app.use('/ns', nameserverRouter);
+ this.app.use('/auth', authRouter);
+ this.app.use('/account', accountRouter);
+ this.app.use('/contacts', contactsRouter);
+ this.app.use('/default-moderators', defaultModeratorsRouter);
+ this.app.use('/conversations', conversationRouter);
+ this.app.use('/calls', callRouter);
+ this.app.use('/ns', nameserverRouter);
// Setup WebSocket callbacks
bindWebRTCCallbacks();
// Setup 404 error handling
- app.use((_req, res) => {
+ this.app.use((_req, res) => {
res.sendStatus(HttpStatusCode.NotFound);
});
// Setup internal error handling
- app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
+ this.app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
log.error(err);
res.status(HttpStatusCode.InternalServerError).send(err.message);
});
-
- return app;
}
}
diff --git a/server/src/creds.ts b/server/src/creds.ts
deleted file mode 100644
index 9c43dc5..0000000
--- a/server/src/creds.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2022 Savoir-faire Linux Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this program. If not, see
- * <https://www.gnu.org/licenses/>.
- */
-import { readFile, writeFile } from 'node:fs/promises';
-
-import { Service } from 'typedi';
-
-@Service()
-export class Creds {
- readonly file = 'creds.json';
- db: Record<string, string>;
-
- constructor() {
- this.db = {};
- }
-
- async build() {
- const buffer = await readFile(this.file).catch(() => Buffer.from('{}'));
- this.db = JSON.parse(buffer.toString());
- return this;
- }
-
- get(username: string) {
- return this.db[username];
- }
-
- set(username: string, password: string) {
- this.db[username] = password;
- }
-
- async save() {
- await writeFile(this.file, JSON.stringify(this.db) + '\n');
- }
-}
diff --git a/server/src/index.ts b/server/src/index.ts
index d00f78b..43c3e45 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -26,25 +26,23 @@
import { Container } from 'typedi';
import { App } from './app.js';
-import { Creds } from './creds.js';
import { Jamid } from './jamid/jamid.js';
-import { Vault } from './vault.js';
-import { Ws } from './ws.js';
+import { SigningKeys } from './storage/signing-keys.js';
+import { WebSocketServer } from './websocket/websocket-server.js';
log.setLevel(process.env.NODE_ENV === 'production' ? 'error' : 'trace');
const port: string | number = 5000;
-await Container.get(Creds).build();
-await Container.get(Vault).build();
+await Container.get(SigningKeys).build();
const jamid = Container.get(Jamid);
-const app = await Container.get(App).build();
-const wss = await Container.get(Ws).build();
+const app = Container.get(App);
+const webSocketServer = Container.get(WebSocketServer);
const server = createServer();
-server.on('request', app);
-server.on('upgrade', wss);
+server.on('request', app.app);
+server.on('upgrade', webSocketServer.upgrade.bind(webSocketServer));
server.listen(port);
server.on('error', onError);
diff --git a/server/src/interfaces.ts b/server/src/interfaces/constructable.ts
similarity index 100%
rename from server/src/interfaces.ts
rename to server/src/interfaces/constructable.ts
diff --git a/server/src/jamid/jami-swig.ts b/server/src/jamid/jami-swig.ts
index 7182270..3b4ddd8 100644
--- a/server/src/jamid/jami-swig.ts
+++ b/server/src/jamid/jami-swig.ts
@@ -15,36 +15,66 @@
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
-import { Constructable } from '../interfaces.js';
-import { itMap, itRange, itToArr, itToRecord } from './utils.js';
+import { Constructable } from '../interfaces/constructable.js';
-interface SwigVec<T> {
+interface SwigVect<T> {
size(): number;
- get(i: number): T; // TODO: | undefined;
+ get(index: number): T | undefined;
}
interface SwigMap<T, U> {
- keys(): SwigVec<T>;
- get(k: T): U; // TODO: | undefined;
- set(k: T, v: U): void;
+ keys(): SwigVect<T>;
+ get(key: T): U | undefined;
+ set(key: T, value: U): void;
}
-// TODO: Review these conversion functions
-const swigVecToIt = <T>(v: SwigVec<T>) => itMap(itRange(0, v.size()), (i) => v.get(i));
-const swigMapToIt = <T, U>(m: SwigMap<T, U>) => itMap(swigVecToIt(m.keys()), (k): [T, U] => [k, m.get(k)]);
-
// export type IntVect = SwigVec<number>;
// export type UintVect = SwigVec<number>;
// export type FloatVect = SwigVec<number>;
-export type StringVect = SwigVec<string>;
+export type StringVect = SwigVect<string>;
// export type IntegerMap = SwigMap<string, number>;
export type StringMap = SwigMap<string, string>;
-export type VectMap = SwigVec<StringMap>;
+export type VectMap = SwigVect<StringMap>;
// export type Blob = SwigVec<number>;
-export const stringVectToArray = (sv: StringVect) => itToArr(swigVecToIt(sv));
-export const stringMapToRecord = (sm: StringMap) => itToRecord(swigMapToIt(sm));
-export const vectMapToRecordArray = (vm: VectMap) => itToArr(itMap(swigVecToIt(vm), stringMapToRecord));
+function* swigVectToIt<T>(swigVect: SwigVect<T>) {
+ const size = swigVect.size();
+ for (let i = 0; i < size; i++) {
+ yield swigVect.get(i)!;
+ }
+}
+
+function* swigMapToIt<T, U>(swigMap: SwigMap<T, U>) {
+ const keys = swigVectToIt(swigMap.keys());
+ for (const key of keys) {
+ const value = swigMap.get(key)!;
+ yield [key, value];
+ }
+}
+
+export function stringVectToArray(stringVect: StringVect): string[] {
+ const elements = swigVectToIt(stringVect);
+ return Array.from(elements);
+}
+
+export function stringMapToRecord(stringMap: StringMap): Record<string, string> {
+ const keyValuePairs = swigMapToIt(stringMap);
+ const record: Record<string, string> = {};
+ for (const [key, value] of keyValuePairs) {
+ record[key] = value;
+ }
+ return record;
+}
+
+export function vectMapToRecordArray(vectMap: VectMap): Record<string, string>[] {
+ const stringMaps = swigVectToIt(vectMap);
+ const records = [];
+ for (const stringMap of stringMaps) {
+ const record = stringMapToRecord(stringMap);
+ records.push(record);
+ }
+ return records;
+}
/**
* Non-exhaustive list of properties for JamiSwig.
diff --git a/server/src/jamid/jamid.ts b/server/src/jamid/jamid.ts
index 0c54adf..773b298 100644
--- a/server/src/jamid/jamid.ts
+++ b/server/src/jamid/jamid.ts
@@ -15,6 +15,8 @@
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
+import { createRequire } from 'node:module';
+
import {
AccountDetails,
AccountTextMessage,
@@ -28,7 +30,7 @@
import { filter, firstValueFrom, map, Subject } from 'rxjs';
import { Service } from 'typedi';
-import { Ws } from '../ws.js';
+import { WebSocketServer } from '../websocket/websocket-server.js';
import { JamiSignal } from './jami-signal.js';
import {
AccountDetailsChanged,
@@ -47,22 +49,19 @@
VolatileDetailsChanged,
} from './jami-signal-interfaces.js';
import { JamiSwig, StringMap, stringMapToRecord, stringVectToArray, vectMapToRecordArray } from './jami-swig.js';
-import { require } from './utils.js';
-// TODO: Mechanism to map account IDs to a list of WebSockets
+const require = createRequire(import.meta.url);
+
// TODO: Convert Records to interfaces and replace them in common/ (e.g. Contact)
@Service()
export class Jamid {
- private readonly jamiSwig: JamiSwig;
- private readonly usernamesToAccountIds: Map<string, string>;
+ private jamiSwig: JamiSwig;
+ private usernamesToAccountIds = new Map<string, string>();
private readonly events;
- constructor(private ws: Ws) {
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
- this.jamiSwig = require('../../jamid.node') as JamiSwig; // TODO: we should put the path in the .env
-
- this.usernamesToAccountIds = new Map<string, string>();
+ constructor(private webSocketServer: WebSocketServer) {
+ this.jamiSwig = require('../../jamid.node') as JamiSwig;
// Setup signal handlers
const handlers: Record<string, unknown> = {};
@@ -380,12 +379,17 @@
const message: WebSocketMessage<any> = JSON.parse(signal.payload['application/json']);
if (message === undefined) {
- log.debug('Undefined account message');
+ log.warn('Undefined account message');
+ return;
+ }
+
+ if (message.type === undefined || message.data === undefined) {
+ log.warn('Account message is not a valid WebSocketMessage (missing type or data fields)');
return;
}
if (!Object.values(WebSocketMessageType).includes(message.type)) {
- log.warn(`Unhandled account message type: ${message.type}`);
+ log.warn(`Invalid WebSocket message type: ${message.type}`);
return;
}
@@ -394,10 +398,8 @@
to: signal.accountId,
message: message.data.message,
};
- message.data = data;
- log.info(`Sending ${JSON.stringify(message)} to ${signal.accountId}`);
- this.ws.send(signal.accountId, message.type, data);
+ this.webSocketServer.send(signal.accountId, message.type, data);
});
this.events.onAccountMessageStatusChanged.subscribe((signal) => {
@@ -433,7 +435,7 @@
conversationId: signal.conversationId,
message: signal.message,
};
- this.ws.send(signal.accountId, WebSocketMessageType.ConversationMessage, data);
+ this.webSocketServer.send(signal.accountId, WebSocketMessageType.ConversationMessage, data);
});
}
}
diff --git a/server/src/jamid/utils.ts b/server/src/jamid/utils.ts
deleted file mode 100644
index f692578..0000000
--- a/server/src/jamid/utils.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2022 Savoir-faire Linux Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this program. If not, see
- * <https://www.gnu.org/licenses/>.
- */
-import { createRequire } from 'node:module';
-
-// TODO: Move these functions to jami-swig.ts
-
-export function* itRange(lo: number, hi: number) {
- for (let i = lo; i < hi; ++i) {
- yield i;
- }
-}
-
-export function* itMap<T, U>(it: Iterable<T>, cb: (value: T, index: number) => U) {
- let i = 0;
- for (const item of it) {
- yield cb(item, i++);
- }
-}
-
-export function* itFilter<T>(it: Iterable<T>, cb: (value: T, index: number) => boolean) {
- let i = 0;
- for (const item of it) {
- if (cb(item, i++)) {
- yield item;
- }
- }
-}
-
-export const itToArr = <T>(it: Iterable<T>) => Array.from(it);
-
-export const itToRecord = <T>(it: Iterable<[string, T]>) => {
- const r: Record<string, T> = {};
- for (const [k, v] of it) {
- r[k] = v;
- }
- return r;
-};
-
-export const require = createRequire(import.meta.url);
diff --git a/server/src/middleware/auth.ts b/server/src/middleware/auth.ts
index 4f06992..7bbd20c 100644
--- a/server/src/middleware/auth.ts
+++ b/server/src/middleware/auth.ts
@@ -17,15 +17,11 @@
*/
import { NextFunction, Request, Response } from 'express';
import { HttpStatusCode } from 'jami-web-common';
-import { jwtVerify } from 'jose';
-import { Container } from 'typedi';
-import { Vault } from '../vault.js';
+import { verifyJwt } from '../utils/jwt.js';
function createAuthenticationMiddleware(isAuthenticationRequired: boolean) {
return async (req: Request, res: Response, next: NextFunction) => {
- const publicKey = Container.get(Vault).publicKey;
-
const authorizationHeader = req.headers.authorization;
if (!authorizationHeader) {
if (isAuthenticationRequired) {
@@ -45,11 +41,8 @@
}
try {
- const { payload } = await jwtVerify(token, publicKey, {
- issuer: 'urn:example:issuer',
- audience: 'urn:example:audience',
- });
- res.locals.accountId = payload.id;
+ const { payload } = await verifyJwt(token);
+ res.locals.accountId = payload.accountId;
next();
} catch (e) {
res.status(HttpStatusCode.Unauthorized).send('Invalid access token');
diff --git a/server/src/middleware/setup.ts b/server/src/middleware/setup.ts
index a697b5a..d9fc3e7 100644
--- a/server/src/middleware/setup.ts
+++ b/server/src/middleware/setup.ts
@@ -19,12 +19,12 @@
import { HttpStatusCode } from 'jami-web-common';
import { Container } from 'typedi';
-import { AdminConfig } from '../admin-config.js';
+import { AdminAccount } from '../storage/admin-account.js';
-const adminConfig = Container.get(AdminConfig);
+const adminAccount = Container.get(AdminAccount);
export async function checkAdminSetup(_req: Request, res: Response, next: NextFunction) {
- const isSetupComplete = adminConfig.get() !== undefined;
+ const isSetupComplete = adminAccount.get() !== undefined;
if (!isSetupComplete) {
res.status(HttpStatusCode.Forbidden).send('Setup not complete');
diff --git a/server/src/routers/account-router.ts b/server/src/routers/account-router.ts
index 9b72667..505d1d9 100644
--- a/server/src/routers/account-router.ts
+++ b/server/src/routers/account-router.ts
@@ -15,10 +15,9 @@
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
-import { Request, Router } from 'express';
+import { Router } from 'express';
import asyncHandler from 'express-async-handler';
-import { ParamsDictionary } from 'express-serve-static-core';
-import { AccountDetails, AccountTextMessage, HttpStatusCode } from 'jami-web-common';
+import { AccountDetails, HttpStatusCode } from 'jami-web-common';
import { Container } from 'typedi';
import { Jamid } from '../jamid/jamid.js';
@@ -67,15 +66,3 @@
res.sendStatus(HttpStatusCode.NoContent);
});
-
-// TODO: Should this endpoint be removed?
-accountRouter.post('/send-account-message', (req: Request<ParamsDictionary, any, AccountTextMessage<unknown>>, res) => {
- const { from, to, message } = req.body;
- if (from === undefined || to === undefined || message === undefined) {
- res.status(HttpStatusCode.BadRequest).send('Missing from, to, or message in body');
- return;
- }
-
- jamid.sendAccountTextMessage(from, to, JSON.stringify(message));
- res.sendStatus(HttpStatusCode.NoContent);
-});
diff --git a/server/src/routers/auth-router.ts b/server/src/routers/auth-router.ts
index f04529e..4255655 100644
--- a/server/src/routers/auth-router.ts
+++ b/server/src/routers/auth-router.ts
@@ -20,27 +20,25 @@
import asyncHandler from 'express-async-handler';
import { ParamsDictionary, Request } from 'express-serve-static-core';
import { HttpStatusCode } from 'jami-web-common';
-import { SignJWT } from 'jose';
import { Container } from 'typedi';
-import { Creds } from '../creds.js';
import { Jamid } from '../jamid/jamid.js';
-import { Vault } from '../vault.js';
+import { Accounts } from '../storage/accounts.js';
+import { signJwt } from '../utils/jwt.js';
interface Credentials {
- username?: string;
- password?: string;
+ username: string;
+ password: string;
}
const jamid = Container.get(Jamid);
-const creds = Container.get(Creds);
-const vault = Container.get(Vault);
+const accounts = Container.get(Accounts);
export const authRouter = Router();
authRouter.post(
'/new-account',
- asyncHandler(async (req: Request<ParamsDictionary, string, Credentials>, res, _next) => {
+ asyncHandler(async (req: Request<ParamsDictionary, string, Partial<Credentials>>, res, _next) => {
const { username, password } = req.body;
if (username === undefined || password === undefined) {
res.status(HttpStatusCode.BadRequest).send('Missing username or password in body');
@@ -57,12 +55,8 @@
// TODO: add JAMS support
// managerUri: 'https://jams.savoirfairelinux.com',
// managerUsername: data.username,
- // TODO: find a way to store the password directly in Jami
- // Maybe by using the "password" field? But as I tested, it's not
- // returned when getting user infos.
const accountId = await jamid.addAccount(new Map());
- // TODO: understand why the password arg in this call must be empty
const state = await jamid.registerUsername(accountId, username, '');
if (state !== 0) {
jamid.removeAccount(accountId);
@@ -76,8 +70,8 @@
return;
}
- creds.set(username, hashedPassword);
- await creds.save();
+ accounts.set(username, hashedPassword);
+ await accounts.save();
res.sendStatus(HttpStatusCode.Created);
})
@@ -85,45 +79,37 @@
authRouter.post(
'/login',
- asyncHandler(async (req: Request<ParamsDictionary, { accessToken: string } | string, Credentials>, res, _next) => {
- const { username, password } = req.body;
- if (username === undefined || password === undefined) {
- res.status(HttpStatusCode.BadRequest).send('Missing username or password in body');
- return;
- }
+ asyncHandler(
+ async (req: Request<ParamsDictionary, { accessToken: string } | string, Partial<Credentials>>, res, _next) => {
+ const { username, password } = req.body;
+ if (username === undefined || password === undefined) {
+ res.status(HttpStatusCode.BadRequest).send('Missing username or password in body');
+ return;
+ }
- // The account may either be:
- // 1. not found
- // 2. found but not on this instance (but I'm not sure about this)
- const accountId = jamid.getAccountIdFromUsername(username);
- if (accountId === undefined) {
- res.status(HttpStatusCode.NotFound).send('Username not found');
- return;
- }
+ // Check if the account is stored stored on this daemon instance
+ const accountId = jamid.getAccountIdFromUsername(username);
+ if (accountId === undefined) {
+ res.status(HttpStatusCode.NotFound).send('Username not found');
+ return;
+ }
- // TODO: load the password from Jami
- const hashedPassword = creds.get(username);
- if (!hashedPassword) {
- res
- .status(HttpStatusCode.NotFound)
- .send('Password not found (the account does not have a password set on the server)');
- return;
- }
+ const hashedPassword = accounts.get(username);
+ if (hashedPassword === undefined) {
+ res
+ .status(HttpStatusCode.NotFound)
+ .send('Password not found (the account does not have a password set on the server)');
+ return;
+ }
- const isPasswordVerified = await argon2.verify(hashedPassword, password);
- if (!isPasswordVerified) {
- res.status(HttpStatusCode.Unauthorized).send('Incorrect password');
- return;
- }
+ const isPasswordVerified = await argon2.verify(hashedPassword, password);
+ if (!isPasswordVerified) {
+ res.status(HttpStatusCode.Unauthorized).send('Incorrect password');
+ return;
+ }
- const jwt = await new SignJWT({ id: accountId })
- .setProtectedHeader({ alg: 'EdDSA' })
- .setIssuedAt()
- // TODO: use valid issuer and audience
- .setIssuer('urn:example:issuer')
- .setAudience('urn:example:audience')
- .setExpirationTime('2h')
- .sign(vault.privateKey);
- res.send({ accessToken: jwt });
- })
+ const jwt = await signJwt(accountId);
+ res.send({ accessToken: jwt });
+ }
+ )
);
diff --git a/server/src/routers/setup-router.ts b/server/src/routers/setup-router.ts
index 7dfa24f..3bc3088 100644
--- a/server/src/routers/setup-router.ts
+++ b/server/src/routers/setup-router.ts
@@ -20,20 +20,18 @@
import asyncHandler from 'express-async-handler';
import { ParamsDictionary, Request } from 'express-serve-static-core';
import { HttpStatusCode } from 'jami-web-common';
-import { SignJWT } from 'jose';
import { Container } from 'typedi';
-import { AdminConfig } from '../admin-config.js';
import { checkAdminSetup } from '../middleware/setup.js';
-import { Vault } from '../vault.js';
+import { AdminAccount } from '../storage/admin-account.js';
+import { signJwt } from '../utils/jwt.js';
+
+const adminAccount = Container.get(AdminAccount);
export const setupRouter = Router();
-const vault = Container.get(Vault);
-const adminConfig = Container.get(AdminConfig);
-
setupRouter.get('/check', (_req, res, _next) => {
- const isSetupComplete = adminConfig.get() !== undefined;
+ const isSetupComplete = adminAccount.get() !== undefined;
res.send({ isSetupComplete });
});
@@ -51,7 +49,7 @@
return;
}
- const isAdminCreated = adminConfig.get() !== undefined;
+ const isAdminCreated = adminAccount.get() !== undefined;
if (isAdminCreated) {
res.status(HttpStatusCode.Conflict).send('Admin already exists');
return;
@@ -59,8 +57,8 @@
const hashedPassword = await argon2.hash(password, { type: argon2.argon2id });
- adminConfig.set(hashedPassword);
- await adminConfig.save();
+ adminAccount.set(hashedPassword);
+ await adminAccount.save();
res.sendStatus(HttpStatusCode.Created);
})
@@ -68,7 +66,7 @@
// Every request handler after this line will be submitted to this middleware
// in order to ensure that the admin account is set up before proceeding with
-// setup related requests
+// setup-related requests
setupRouter.use(checkAdminSetup);
setupRouter.post(
@@ -81,7 +79,11 @@
return;
}
- const hashedPassword = adminConfig.get();
+ const hashedPassword = adminAccount.get();
+ if (hashedPassword === undefined) {
+ res.status(HttpStatusCode.InternalServerError).send('Admin password not found');
+ return;
+ }
const isPasswordVerified = await argon2.verify(hashedPassword, password);
if (!isPasswordVerified) {
@@ -89,14 +91,7 @@
return;
}
- const jwt = await new SignJWT({ id: 'admin' })
- .setProtectedHeader({ alg: 'EdDSA' })
- .setIssuedAt()
- // TODO: use valid issuer and audience
- .setIssuer('urn:example:issuer')
- .setAudience('urn:example:audience')
- .setExpirationTime('2h')
- .sign(vault.privateKey);
+ const jwt = await signJwt('admin');
res.send({ accessToken: jwt });
}
)
diff --git a/server/src/admin-config.ts b/server/src/storage/accounts.ts
similarity index 66%
copy from server/src/admin-config.ts
copy to server/src/storage/accounts.ts
index 0f745b9..77a8d9d 100644
--- a/server/src/admin-config.ts
+++ b/server/src/storage/accounts.ts
@@ -21,32 +21,31 @@
import { Service } from 'typedi';
@Service()
-export class AdminConfig {
- private readonly file = 'admin.json';
- private account: { admin: string };
+export class Accounts {
+ private readonly filename = 'accounts.json';
+ private accounts: Record<string, string>;
constructor() {
let buffer: Buffer;
try {
- buffer = readFileSync(this.file);
+ buffer = readFileSync(this.filename);
} catch (e) {
- console.error(e);
buffer = Buffer.from('{}');
}
- this.account = JSON.parse(buffer.toString());
+ this.accounts = JSON.parse(buffer.toString());
}
- get() {
- return this.account.admin;
+ get(username: string): string | undefined {
+ return this.accounts[username];
}
- set(password: string) {
- this.account.admin = password;
+ set(username: string, password: string): void {
+ this.accounts[username] = password;
}
- async save() {
- await writeFile(this.file, JSON.stringify(this.account) + '\n');
+ async save(): Promise<void> {
+ await writeFile(this.filename, JSON.stringify(this.accounts, null, 2) + '\n');
}
}
diff --git a/server/src/admin-config.ts b/server/src/storage/admin-account.ts
similarity index 79%
rename from server/src/admin-config.ts
rename to server/src/storage/admin-account.ts
index 0f745b9..b207cfd 100644
--- a/server/src/admin-config.ts
+++ b/server/src/storage/admin-account.ts
@@ -21,32 +21,31 @@
import { Service } from 'typedi';
@Service()
-export class AdminConfig {
- private readonly file = 'admin.json';
+export class AdminAccount {
+ private readonly filename = 'admin.json';
private account: { admin: string };
constructor() {
let buffer: Buffer;
try {
- buffer = readFileSync(this.file);
+ buffer = readFileSync(this.filename);
} catch (e) {
- console.error(e);
buffer = Buffer.from('{}');
}
this.account = JSON.parse(buffer.toString());
}
- get() {
+ get(): string | undefined {
return this.account.admin;
}
- set(password: string) {
+ set(password: string): void {
this.account.admin = password;
}
- async save() {
- await writeFile(this.file, JSON.stringify(this.account) + '\n');
+ async save(): Promise<void> {
+ await writeFile(this.filename, JSON.stringify(this.account, null, 2) + '\n');
}
}
diff --git a/server/src/vault.ts b/server/src/storage/signing-keys.ts
similarity index 92%
rename from server/src/vault.ts
rename to server/src/storage/signing-keys.ts
index 07e2914..8e48c94 100644
--- a/server/src/vault.ts
+++ b/server/src/storage/signing-keys.ts
@@ -19,7 +19,7 @@
import { Service } from 'typedi';
@Service()
-export class Vault {
+export class SigningKeys {
privateKey!: KeyLike;
publicKey!: KeyLike;
@@ -27,7 +27,7 @@
const privatekey = process.env.PRIVATE_KEY;
const publicKey = process.env.PUBLIC_KEY;
- if (!privatekey || !publicKey) {
+ if (privatekey === undefined || publicKey === undefined) {
throw new Error('Missing private or public key environment variables. Try running "npm run genkeys"');
}
diff --git a/server/src/utils/jwt.ts b/server/src/utils/jwt.ts
new file mode 100644
index 0000000..672c5c3
--- /dev/null
+++ b/server/src/utils/jwt.ts
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { jwtVerify, JWTVerifyResult, SignJWT } from 'jose';
+import { Container } from 'typedi';
+
+import { SigningKeys } from '../storage/signing-keys.js';
+
+const jwtIssuer = 'https://jami.net/';
+const jwtAudience = 'https://jami.net/';
+
+const signingKeys = Container.get(SigningKeys);
+
+export async function signJwt(accountId: string): Promise<string> {
+ return new SignJWT({ accountId })
+ .setProtectedHeader({ alg: 'EdDSA' })
+ .setIssuedAt()
+ .setIssuer(jwtIssuer)
+ .setAudience(jwtAudience)
+ .setExpirationTime('2h')
+ .sign(signingKeys.privateKey);
+}
+
+export async function verifyJwt(token: string): Promise<JWTVerifyResult> {
+ return jwtVerify(token, signingKeys.publicKey, {
+ issuer: jwtIssuer,
+ audience: jwtAudience,
+ });
+}
diff --git a/server/src/handlers/webrtc-handler.ts b/server/src/websocket/webrtc-handler.ts
similarity index 68%
rename from server/src/handlers/webrtc-handler.ts
rename to server/src/websocket/webrtc-handler.ts
index 409a030..e6ebcbc 100644
--- a/server/src/handlers/webrtc-handler.ts
+++ b/server/src/websocket/webrtc-handler.ts
@@ -20,21 +20,22 @@
import { Container } from 'typedi';
import { Jamid } from '../jamid/jamid.js';
-import { Ws } from '../ws.js';
+import { WebSocketServer } from './websocket-server.js';
const jamid = Container.get(Jamid);
-const ws = Container.get(Ws);
+const webSocketServer = Container.get(WebSocketServer);
function sendWebRTCData<T>(data: Partial<AccountTextMessage<T>>) {
- if (!data.from || !data.to || !data.message) {
- log.warn('Incorrect format for AccountTextMessage (require from, to and message):', data);
+ if (data.from === undefined || data.to === undefined || data.message === undefined) {
+ log.warn('Message is not a valid AccountTextMessage (missing from, to, or message fields)');
return;
}
+
jamid.sendAccountTextMessage(data.from, data.to, JSON.stringify(data.message));
}
export function bindWebRTCCallbacks() {
- ws.bind(WebSocketMessageType.WebRTCOffer, sendWebRTCData);
- ws.bind(WebSocketMessageType.WebRTCAnswer, sendWebRTCData);
- ws.bind(WebSocketMessageType.IceCandidate, sendWebRTCData);
+ webSocketServer.bind(WebSocketMessageType.WebRTCOffer, sendWebRTCData);
+ webSocketServer.bind(WebSocketMessageType.WebRTCAnswer, sendWebRTCData);
+ webSocketServer.bind(WebSocketMessageType.IceCandidate, sendWebRTCData);
}
diff --git a/server/src/websocket/websocket-server.ts b/server/src/websocket/websocket-server.ts
new file mode 100644
index 0000000..6750129
--- /dev/null
+++ b/server/src/websocket/websocket-server.ts
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { IncomingMessage } from 'node:http';
+import { Duplex } from 'node:stream';
+
+import { WebSocketCallbacks, WebSocketMessage, WebSocketMessageTable, WebSocketMessageType } from 'jami-web-common';
+import log from 'loglevel';
+import { Service } from 'typedi';
+import { URL } from 'whatwg-url';
+import * as WebSocket from 'ws';
+
+import { verifyJwt } from '../utils/jwt.js';
+
+@Service()
+export class WebSocketServer {
+ private wss = new WebSocket.WebSocketServer({ noServer: true });
+ private sockets = new Map<string, WebSocket.WebSocket[]>();
+ private callbacks: WebSocketCallbacks = {
+ [WebSocketMessageType.ConversationMessage]: [],
+ [WebSocketMessageType.ConversationView]: [],
+ [WebSocketMessageType.WebRTCOffer]: [],
+ [WebSocketMessageType.WebRTCAnswer]: [],
+ [WebSocketMessageType.IceCandidate]: [],
+ };
+
+ constructor() {
+ this.wss.on('connection', (ws: WebSocket.WebSocket, _request: IncomingMessage, accountId: string) => {
+ log.info('New connection for account', accountId);
+ const accountSockets = this.sockets.get(accountId);
+ if (accountSockets) {
+ accountSockets.push(ws);
+ } else {
+ this.sockets.set(accountId, [ws]);
+ }
+
+ ws.on('message', <T extends WebSocketMessageType>(messageString: string) => {
+ const message: WebSocketMessage<T> = JSON.parse(messageString);
+ if (message.type === undefined || message.data === undefined) {
+ log.warn('WebSocket message is not a valid WebSocketMessage (missing type or data fields)');
+ return;
+ }
+
+ if (!Object.values(WebSocketMessageType).includes(message.type)) {
+ log.warn(`Invalid WebSocket message type: ${message.type}`);
+ return;
+ }
+
+ const callbacks = this.callbacks[message.type];
+ for (const callback of callbacks) {
+ callback(message.data);
+ }
+ });
+
+ ws.on('close', () => {
+ log.info('Closing connection for account', accountId);
+ const accountSockets = this.sockets.get(accountId);
+ if (accountSockets === undefined) {
+ return;
+ }
+
+ const index = accountSockets.indexOf(ws);
+ if (index !== -1) {
+ accountSockets.splice(index, 1);
+ if (accountSockets.length === 0) {
+ this.sockets.delete(accountId);
+ }
+ }
+ });
+ });
+ }
+
+ async upgrade(request: IncomingMessage, socket: Duplex, head: Buffer): Promise<void> {
+ // Do not use parseURL because it returns a URLRecord and not a URL
+ const url = new URL(request.url ?? '/', 'http://localhost/');
+ const token = url.searchParams.get('accessToken') ?? undefined;
+ if (token === undefined) {
+ socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
+ socket.destroy();
+ return;
+ }
+
+ try {
+ const { payload } = await verifyJwt(token);
+ const accountId = payload.accountId as string;
+ log.info('Authentication successful for account', accountId);
+ this.wss.handleUpgrade(request, socket, head, (ws) => {
+ this.wss.emit('connection', ws, request, accountId);
+ });
+ } catch (e) {
+ log.debug('Authentication failed:', e);
+ socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
+ socket.destroy();
+ }
+ }
+
+ bind<T extends WebSocketMessageType>(type: T, callback: (data: WebSocketMessageTable[T]) => void): void {
+ this.callbacks[type].push(callback);
+ }
+
+ send<T extends WebSocketMessageType>(accountId: string, type: T, data: WebSocketMessageTable[T]): boolean {
+ const accountSockets = this.sockets.get(accountId);
+ if (accountSockets === undefined) {
+ return false;
+ }
+
+ const webSocketMessageString = JSON.stringify({ type, data });
+ for (const accountSocket of accountSockets) {
+ accountSocket.send(webSocketMessageString);
+ }
+ return true;
+ }
+}
diff --git a/server/src/ws.ts b/server/src/ws.ts
deleted file mode 100644
index d33dd76..0000000
--- a/server/src/ws.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2022 Savoir-faire Linux Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this program. If not, see
- * <https://www.gnu.org/licenses/>.
- */
-import { IncomingMessage } from 'node:http';
-import { Duplex } from 'node:stream';
-
-import { WebSocketCallbacks, WebSocketMessage, WebSocketMessageTable, WebSocketMessageType } from 'jami-web-common';
-import { jwtVerify } from 'jose';
-import log from 'loglevel';
-import { Service } from 'typedi';
-import { URL } from 'whatwg-url';
-import { WebSocket, WebSocketServer } from 'ws';
-
-import { Vault } from './vault.js';
-
-@Service()
-export class Ws {
- private sockets: Map<string, WebSocket[]>;
- private callbacks: WebSocketCallbacks;
-
- constructor(private readonly vault: Vault) {
- this.sockets = new Map();
- this.callbacks = {
- [WebSocketMessageType.ConversationMessage]: [],
- [WebSocketMessageType.ConversationView]: [],
- [WebSocketMessageType.WebRTCOffer]: [],
- [WebSocketMessageType.WebRTCAnswer]: [],
- [WebSocketMessageType.IceCandidate]: [],
- };
- }
-
- async build() {
- const wss = new WebSocketServer({ noServer: true });
-
- wss.on('connection', (ws: WebSocket, _req: IncomingMessage, accountId: string) => {
- log.info('New connection', accountId);
- const accountSockets = this.sockets.get(accountId);
- if (accountSockets) {
- accountSockets.push(ws);
- } else {
- this.sockets.set(accountId, [ws]);
- }
-
- ws.on('message', <T extends WebSocketMessageType>(messageString: string) => {
- const message: WebSocketMessage<T> = JSON.parse(messageString);
- if (!message.type || !message.data) {
- ws.send('Incorrect format (require type and data)');
- return;
- }
- if (!Object.values(WebSocketMessageType).includes(message.type)) {
- log.warn(`Unhandled account message type: ${message.type}`);
- return;
- }
- const callbacks = this.callbacks[message.type];
- for (const callback of callbacks) {
- callback(message.data);
- }
- });
-
- ws.on('close', () => {
- log.info('Connection close', accountId);
- const accountSockets = this.sockets.get(accountId);
- const index = accountSockets?.indexOf(ws);
- if (index !== undefined) {
- accountSockets?.splice(index, 1);
- if (accountSockets?.length === 0) {
- this.sockets.delete(accountId);
- }
- }
- });
- });
-
- return (request: IncomingMessage, socket: Duplex, head: Buffer) => {
- // Do not use parseURL because it returns a URLRecord and not a URL.
- const url = new URL(request.url ?? '/', 'http://localhost/');
- const accessToken = url.searchParams.get('accessToken');
- if (!accessToken) {
- socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
- socket.destroy();
- return;
- }
-
- jwtVerify(accessToken, this.vault.publicKey, {
- issuer: 'urn:example:issuer',
- audience: 'urn:example:audience',
- })
- .then(({ payload }) => {
- const id = payload.id as string;
- log.info('Authentication successful', id);
- wss.handleUpgrade(request, socket, head, (ws) => wss.emit('connection', ws, request, id));
- })
- .catch((reason) => {
- log.debug('Authentication failed', reason);
- socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
- socket.destroy();
- });
- };
- }
-
- bind<T extends WebSocketMessageType>(type: T, callback: (data: WebSocketMessageTable[T]) => void): void {
- this.callbacks[type].push(callback);
- }
-
- send<T extends WebSocketMessageType>(accountId: string, type: T, data: WebSocketMessageTable[T]): boolean {
- const accountSockets = this.sockets.get(accountId);
- if (!accountSockets) {
- return false;
- }
- for (const accountSocket of accountSockets) {
- accountSocket.send(JSON.stringify({ type, data }));
- }
- return true;
- }
-}