From 4b3059bdc70870e473fe82dab61e2652599c6fac Mon Sep 17 00:00:00 2001 From: Christian Fehmer Date: Mon, 20 Nov 2023 15:56:28 +0100 Subject: [PATCH] refactor: Import shared types back into MonkeyTypes namespace (fehmer) (#4800) * impr: Import shared types back into MonkeyTypes namespace, partially reverts #4769 * down to 6 errors * fixes * cleanup --- backend/package-lock.json | 1383 ++++++++++++++++- backend/package.json | 3 +- backend/src/api/controllers/result.ts | 3 +- backend/src/constants/base-configuration.ts | 775 +++++---- backend/src/dal/user.ts | 12 +- backend/src/init/configuration.ts | 17 +- backend/src/middlewares/api-utils.ts | 3 +- backend/src/middlewares/auth.ts | 5 +- backend/src/queues/later-queue.ts | 5 +- backend/src/services/weekly-xp-leaderboard.ts | 9 +- backend/src/types/types.d.ts | 10 +- backend/src/utils/daily-leaderboards.ts | 19 +- backend/tsconfig.json | 2 +- frontend/src/ts/ape/server-configuration.ts | 7 +- frontend/src/ts/types/types.d.ts | 4 + frontend/tsconfig.json | 2 +- 16 files changed, 1776 insertions(+), 483 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 814ca45a0..5f4ffd2b2 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -24,7 +24,7 @@ "lodash": "4.17.21", "lru-cache": "7.10.1", "mjml": "4.13.0", - "mongodb": "4.4.0", + "mongodb": "4.17.1", "mustache": "4.2.0", "node-fetch": "2.6.7", "nodemailer": "6.9.1", @@ -46,6 +46,7 @@ "@types/bcrypt": "5.0.0", "@types/cors": "2.8.12", "@types/cron": "1.7.3", + "@types/express": "4.17.21", "@types/ioredis": "4.28.10", "@types/jest": "27.5.0", "@types/lodash": "4.14.178", @@ -85,6 +86,680 @@ "node": ">=6.0.0" } }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "optional": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.451.0.tgz", + "integrity": "sha512-xoImUiGoaXJZpOCgbWcdrU4vHJ8HG5KluaCkc32kuFobM277sjQimaUIHOGHL24M5vyo4QxcJD9CT/IhX63Vlg==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.451.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz", + "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.451.0.tgz", + "integrity": "sha512-48NcIRxWBdP1fom6RSjwn2R2u7SE7eeV3p+c4s7ukEOfrHhBxJfn3EpqBVQMGzdiU55qFImy+Fe81iA2lXq3Jw==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-sdk-sts": "3.451.0", + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz", + "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==", + "optional": true, + "dependencies": { + "@smithy/smithy-client": "^2.1.15", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.451.0.tgz", + "integrity": "sha512-g1ZT46NuYfou00d94rJZ59N4TLI1T+v46lbHTtF9jwohiUsi7/vHkPIOdrgtrThGzGUVl01w62N0a2mpMydaBA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz", + "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.451.0.tgz", + "integrity": "sha512-q82kEzymqimkJ2dHmuN2RGpi9HTFSxwwoXALnzPRaRcvR/v+YY8FMgSTfwXzPkHUDf/q8J+aDz6lPcYlnsP3sQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz", + "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz", + "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-ini": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz", + "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz", + "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso": "3.451.0", + "@aws-sdk/token-providers": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz", + "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.451.0.tgz", + "integrity": "sha512-ihbYZrI/tSVsZFDGLfJoCx3sg1s9EQqWA+xbLoquK+RjMqTnaeshYntFJmQA5yqCIbcAkyw63OwOIBRrVb7tMA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.451.0", + "@aws-sdk/client-sso": "3.451.0", + "@aws-sdk/client-sts": "3.451.0", + "@aws-sdk/credential-provider-cognito-identity": "3.451.0", + "@aws-sdk/credential-provider-env": "3.451.0", + "@aws-sdk/credential-provider-http": "3.451.0", + "@aws-sdk/credential-provider-ini": "3.451.0", + "@aws-sdk/credential-provider-node": "3.451.0", + "@aws-sdk/credential-provider-process": "3.451.0", + "@aws-sdk/credential-provider-sso": "3.451.0", + "@aws-sdk/credential-provider-web-identity": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz", + "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz", + "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz", + "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz", + "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==", + "optional": true, + "dependencies": { + "@aws-sdk/middleware-signing": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz", + "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz", + "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz", + "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz", + "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.451.0", + "@aws-sdk/middleware-logger": "3.451.0", + "@aws-sdk/middleware-recursion-detection": "3.451.0", + "@aws-sdk/middleware-user-agent": "3.451.0", + "@aws-sdk/region-config-resolver": "3.451.0", + "@aws-sdk/types": "3.451.0", + "@aws-sdk/util-endpoints": "3.451.0", + "@aws-sdk/util-user-agent-browser": "3.451.0", + "@aws-sdk/util-user-agent-node": "3.451.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz", + "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/util-endpoints": "^1.0.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz", + "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz", + "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.451.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, "node_modules/@babel/code-frame": { "version": "7.16.7", "dev": true, @@ -1376,6 +2051,15 @@ "node": ">=10" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", + "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", @@ -1521,6 +2205,546 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", + "optional": true, + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "optional": true, + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "optional": true, + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", + "optional": true, + "dependencies": { + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", + "optional": true, + "dependencies": { + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", + "optional": true, + "dependencies": { + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "optional": true, + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.4.tgz", + "integrity": "sha512-FPry8j1xye5yzrdnf4xKUXVnkQErxdN7bUIaqC0OFoGsv2NfD9b2UUMuZSSt+pr9a8XWAqj0HoyVNUfPiZ/PvQ==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", + "optional": true, + "dependencies": { + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", + "optional": true, + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -1609,8 +2833,10 @@ }, "node_modules/@types/bson": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.2.0.tgz", + "integrity": "sha512-ELCPqAdroMdcuxqwMgUpifQyRoTpyYCNr1V9xKyF40VsBobsj+BbWNRvwGchMgBPGqkw655ypkjj2MEF5ywVwg==", + "deprecated": "This is a stub types definition. bson provides its own type definitions, so you do not need this installed.", "dev": true, - "license": "MIT", "dependencies": { "bson": "*" } @@ -1642,23 +2868,25 @@ } }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "license": "MIT", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/glob": { @@ -1810,15 +3038,6 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "optional": true }, - "node_modules/@types/mongodb": { - "version": "3.6.20", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bson": "*", - "@types/node": "*" - } - }, "node_modules/@types/mustache": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.2.tgz", @@ -1872,12 +3091,14 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.7", - "license": "MIT" + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "license": "MIT" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/rimraf": { "version": "3.0.2", @@ -1889,6 +3110,15 @@ "@types/node": "*" } }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-static": { "version": "1.13.10", "license": "MIT", @@ -1972,12 +3202,14 @@ "license": "MIT" }, "node_modules/@types/webidl-conversions": { - "version": "6.1.1", - "license": "MIT" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" }, "node_modules/@types/whatwg-url": { - "version": "8.2.1", - "license": "MIT", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", "dependencies": { "@types/node": "*", "@types/webidl-conversions": "*" @@ -2533,6 +3765,12 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "optional": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "license": "MIT", @@ -2604,8 +3842,9 @@ } }, "node_modules/bson": { - "version": "4.6.1", - "license": "Apache-2.0", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", "dependencies": { "buffer": "^5.6.0" }, @@ -3984,6 +5223,28 @@ "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", "optional": true }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastify": { "version": "3.27.2", "dev": true, @@ -4964,8 +6225,9 @@ "license": "MIT" }, "node_modules/ip": { - "version": "1.1.5", - "license": "MIT" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -7165,24 +8427,26 @@ } }, "node_modules/mongodb": { - "version": "4.4.0", - "license": "Apache-2.0", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", + "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", "dependencies": { - "bson": "^4.6.1", - "denque": "^2.0.1", - "mongodb-connection-string-url": "^2.4.1", - "socks": "^2.6.1" + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" }, "engines": { "node": ">=12.9.0" }, "optionalDependencies": { - "saslprep": "^1.0.3" + "@aws-sdk/credential-providers": "^3.186.0", + "@mongodb-js/saslprep": "^1.1.0" } }, "node_modules/mongodb-connection-string-url": { - "version": "2.4.2", - "license": "Apache-2.0", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", "dependencies": { "@types/whatwg-url": "^8.2.1", "whatwg-url": "^11.0.0" @@ -7190,7 +8454,8 @@ }, "node_modules/mongodb-connection-string-url/node_modules/tr46": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dependencies": { "punycode": "^2.1.1" }, @@ -7200,14 +8465,16 @@ }, "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { "version": "7.0.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "engines": { "node": ">=12" } }, "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { "version": "11.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -7257,6 +8524,16 @@ "node": ">=12.22.0" } }, + "node_modules/mongodb-memory-server-core/node_modules/@types/mongodb": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", + "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", + "dev": true, + "dependencies": { + "@types/bson": "*", + "@types/node": "*" + } + }, "node_modules/mongodb-memory-server-core/node_modules/bl": { "version": "2.2.1", "dev": true, @@ -8598,6 +9875,7 @@ }, "node_modules/saslprep": { "version": "1.0.3", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -8832,17 +10110,19 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { - "version": "2.6.2", - "license": "MIT", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -9042,6 +10322,12 @@ "node": ">=0.10.0" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true + }, "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -9780,8 +11066,9 @@ } }, "node_modules/tslib": { - "version": "2.3.1", - "license": "0BSD" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsscmp": { "version": "1.0.6", diff --git a/backend/package.json b/backend/package.json index c7ffcb72c..ec2f8032d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -32,7 +32,7 @@ "lodash": "4.17.21", "lru-cache": "7.10.1", "mjml": "4.13.0", - "mongodb": "4.4.0", + "mongodb": "4.17.1", "mustache": "4.2.0", "node-fetch": "2.6.7", "nodemailer": "6.9.1", @@ -54,6 +54,7 @@ "@types/bcrypt": "5.0.0", "@types/cors": "2.8.12", "@types/cron": "1.7.3", + "@types/express": "4.17.21", "@types/ioredis": "4.28.10", "@types/jest": "27.5.0", "@types/lodash": "4.14.178", diff --git a/backend/src/api/controllers/result.ts b/backend/src/api/controllers/result.ts index 36a31876e..e46775dd9 100644 --- a/backend/src/api/controllers/result.ts +++ b/backend/src/api/controllers/result.ts @@ -42,7 +42,6 @@ import _ from "lodash"; import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard"; import { UAParser } from "ua-parser-js"; import { canFunboxGetPb } from "../../utils/pb"; -import { Configuration } from "../../types/shared"; try { if (anticheatImplemented() === false) throw new Error("undefined"); @@ -618,7 +617,7 @@ interface XpResult { async function calculateXp( result, - xpConfiguration: Configuration["users"]["xp"], + xpConfiguration: MonkeyTypes.Configuration["users"]["xp"], uid: string, currentTotalXp: number, streak: number diff --git a/backend/src/constants/base-configuration.ts b/backend/src/constants/base-configuration.ts index d1302bf92..210b556b3 100644 --- a/backend/src/constants/base-configuration.ts +++ b/backend/src/constants/base-configuration.ts @@ -1,11 +1,9 @@ -import { Configuration } from "../types/shared"; - /** * This is the base schema for the configuration of the API backend. * To add a new configuration. Simply add it to this object. * When changing this template, please follow the principle of "Secure by default" (https://en.wikipedia.org/wiki/Secure_by_default). */ -export const BASE_CONFIGURATION: Configuration = { +export const BASE_CONFIGURATION: MonkeyTypes.Configuration = { maintenance: false, results: { savingEnabled: false, @@ -139,421 +137,423 @@ type Schema = { : never; }; -export const CONFIGURATION_FORM_SCHEMA: ObjectSchema = { - type: "object", - label: "Server Configuration", - fields: { - maintenance: { - type: "boolean", - label: "In Maintenance", - }, - results: { - type: "object", - label: "Results", - fields: { - savingEnabled: { - type: "boolean", - label: "Saving Results", - }, - objectHashCheckEnabled: { - type: "boolean", - label: "Object Hash Check", - }, - filterPresets: { - type: "object", - label: "Filter Presets", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - maxPresetsPerUser: { - type: "number", - label: "Max Presets Per User", - min: 0, - }, - }, - }, - limits: { - type: "object", - label: "maximum results", - fields: { - regularUser: { - type: "number", - label: "for regular users", - min: 0, - }, - premiumUser: { - type: "number", - label: "for premium users", - min: 0, - }, - }, - }, +export const CONFIGURATION_FORM_SCHEMA: ObjectSchema = + { + type: "object", + label: "Server Configuration", + fields: { + maintenance: { + type: "boolean", + label: "In Maintenance", }, - }, - quotes: { - type: "object", - label: "Quotes", - fields: { - reporting: { - type: "object", - label: "Reporting", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - maxReports: { - type: "number", - label: "Max Reports", - }, - contentReportLimit: { - type: "number", - label: "Content Report Limit", - }, + results: { + type: "object", + label: "Results", + fields: { + savingEnabled: { + type: "boolean", + label: "Saving Results", }, - }, - submissionsEnabled: { - type: "boolean", - label: "Submissions Enabled", - }, - maxFavorites: { - type: "number", - label: "Max Favorites", - }, - }, - }, - admin: { - type: "object", - label: "Admin", - fields: { - endpointsEnabled: { - type: "boolean", - label: "Endpoints Enabled", - }, - }, - }, - apeKeys: { - type: "object", - label: "Ape Keys", - fields: { - endpointsEnabled: { - type: "boolean", - label: "Endpoints Enabled", - }, - acceptKeys: { - type: "boolean", - label: "Accept Keys", - }, - maxKeysPerUser: { - type: "number", - label: "Max Keys Per User", - min: 0, - }, - apeKeyBytes: { - type: "number", - label: "Ape Key Bytes", - min: 24, - }, - apeKeySaltRounds: { - type: "number", - label: "Ape Key Salt Rounds", - min: 5, - }, - }, - }, - users: { - type: "object", - label: "Users", - fields: { - signUp: { - type: "boolean", - label: "Sign Up Enabled", - }, - lastHashesCheck: { - type: "object", - label: "Last Hashes Check", - fields: { - enabled: { type: "boolean", label: "Enabled" }, - maxHashes: { type: "number", label: "Hashes to store" }, + objectHashCheckEnabled: { + type: "boolean", + label: "Object Hash Check", }, - }, - xp: { - type: "object", - label: "XP", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - gainMultiplier: { - type: "number", - label: "Gain Multiplier", - }, - funboxBonus: { - type: "number", - label: "Funbox Bonus", - }, - maxDailyBonus: { - type: "number", - label: "Max Daily Bonus", - }, - minDailyBonus: { - type: "number", - label: "Min Daily Bonus", - }, - streak: { - type: "object", - label: "Streak", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - maxStreakDays: { - type: "number", - label: "Max Streak Days", - }, - maxStreakMultiplier: { - type: "number", - label: "Max Streak Multiplier", - }, + filterPresets: { + type: "object", + label: "Filter Presets", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + maxPresetsPerUser: { + type: "number", + label: "Max Presets Per User", + min: 0, }, }, }, - }, - discordIntegration: { - type: "object", - label: "Discord Integration", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - }, - }, - autoBan: { - type: "object", - label: "Auto Ban", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - maxCount: { - type: "number", - label: "Max Count", - min: 0, - }, - maxHours: { - type: "number", - label: "Max Hours", - min: 0, - }, - }, - }, - inbox: { - type: "object", - label: "Inbox", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - maxMail: { - type: "number", - label: "Max Messages", - min: 0, - }, - }, - }, - profiles: { - type: "object", - label: "User Profiles", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - }, - }, - }, - }, - rateLimiting: { - type: "object", - label: "Rate Limiting", - fields: { - badAuthentication: { - type: "object", - label: "Bad Authentication Rate Limiter", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - penalty: { - type: "number", - label: "Penalty", - min: 0, - }, - flaggedStatusCodes: { - type: "array", - label: "Flagged Status Codes", - items: { - label: "Status Code", + limits: { + type: "object", + label: "maximum results", + fields: { + regularUser: { type: "number", + label: "for regular users", + min: 0, + }, + premiumUser: { + type: "number", + label: "for premium users", min: 0, }, }, }, }, }, - }, - dailyLeaderboards: { - type: "object", - label: "Daily Leaderboards", - fields: { - enabled: { - type: "boolean", - label: "Enabled", - }, - maxResults: { - type: "number", - label: "Max Results", - min: 0, - }, - leaderboardExpirationTimeInDays: { - type: "number", - label: "Leaderboard Expiration Time In Days", - min: 0, - }, - validModeRules: { - type: "array", - label: "Valid Mode Rules", - items: { + quotes: { + type: "object", + label: "Quotes", + fields: { + reporting: { type: "object", - label: "Rule", + label: "Reporting", fields: { - language: { - type: "string", - label: "Language", + enabled: { + type: "boolean", + label: "Enabled", }, - mode: { - type: "string", - label: "Mode", + maxReports: { + type: "number", + label: "Max Reports", }, - mode2: { - type: "string", - label: "Secondary Mode", + contentReportLimit: { + type: "number", + label: "Content Report Limit", }, }, }, - }, - scheduleRewardsModeRules: { - type: "array", - label: "Schedule Rewards Mode Rules", - items: { - type: "object", - label: "Rule", - fields: { - language: { - type: "string", - label: "Language", - }, - mode: { - type: "string", - label: "Mode", - }, - mode2: { - type: "string", - label: "Secondary Mode", - }, - }, + submissionsEnabled: { + type: "boolean", + label: "Submissions Enabled", }, - }, - topResultsToAnnounce: { - type: "number", - label: "Top Results To Announce", - min: 1, - hint: "This should atleast be 1. Setting to zero is very bad.", - }, - xpRewardBrackets: { - type: "array", - label: "XP Reward Brackets", - items: { - type: "object", - label: "Bracket", - fields: { - minRank: { - type: "number", - label: "Min Rank", - min: 1, - }, - maxRank: { - type: "number", - label: "Max Rank", - min: 1, - }, - minReward: { - type: "number", - label: "Min Reward", - min: 0, - }, - maxReward: { - type: "number", - label: "Max Reward", - min: 0, - }, - }, + maxFavorites: { + type: "number", + label: "Max Favorites", }, }, }, - }, - leaderboards: { - type: "object", - label: "Leaderboards", - fields: { - weeklyXp: { - type: "object", - label: "Weekly XP", - fields: { - enabled: { - type: "boolean", - label: "Enabled", + admin: { + type: "object", + label: "Admin", + fields: { + endpointsEnabled: { + type: "boolean", + label: "Endpoints Enabled", + }, + }, + }, + apeKeys: { + type: "object", + label: "Ape Keys", + fields: { + endpointsEnabled: { + type: "boolean", + label: "Endpoints Enabled", + }, + acceptKeys: { + type: "boolean", + label: "Accept Keys", + }, + maxKeysPerUser: { + type: "number", + label: "Max Keys Per User", + min: 0, + }, + apeKeyBytes: { + type: "number", + label: "Ape Key Bytes", + min: 24, + }, + apeKeySaltRounds: { + type: "number", + label: "Ape Key Salt Rounds", + min: 5, + }, + }, + }, + users: { + type: "object", + label: "Users", + fields: { + signUp: { + type: "boolean", + label: "Sign Up Enabled", + }, + lastHashesCheck: { + type: "object", + label: "Last Hashes Check", + fields: { + enabled: { type: "boolean", label: "Enabled" }, + maxHashes: { type: "number", label: "Hashes to store" }, }, - expirationTimeInDays: { - type: "number", - label: "Expiration time in days", - min: 0, - hint: "This should atleast be 15, to allow for past week queries.", - }, - xpRewardBrackets: { - type: "array", - label: "XP Reward Brackets", - items: { + }, + xp: { + type: "object", + label: "XP", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + gainMultiplier: { + type: "number", + label: "Gain Multiplier", + }, + funboxBonus: { + type: "number", + label: "Funbox Bonus", + }, + maxDailyBonus: { + type: "number", + label: "Max Daily Bonus", + }, + minDailyBonus: { + type: "number", + label: "Min Daily Bonus", + }, + streak: { type: "object", - label: "Bracket", + label: "Streak", fields: { - minRank: { - type: "number", - label: "Min Rank", - min: 1, + enabled: { + type: "boolean", + label: "Enabled", }, - maxRank: { + maxStreakDays: { type: "number", - label: "Max Rank", - min: 1, + label: "Max Streak Days", }, - minReward: { + maxStreakMultiplier: { type: "number", - label: "Min Reward", - min: 0, + label: "Max Streak Multiplier", }, - maxReward: { - type: "number", - label: "Max Reward", - min: 0, + }, + }, + }, + }, + discordIntegration: { + type: "object", + label: "Discord Integration", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + }, + }, + autoBan: { + type: "object", + label: "Auto Ban", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + maxCount: { + type: "number", + label: "Max Count", + min: 0, + }, + maxHours: { + type: "number", + label: "Max Hours", + min: 0, + }, + }, + }, + inbox: { + type: "object", + label: "Inbox", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + maxMail: { + type: "number", + label: "Max Messages", + min: 0, + }, + }, + }, + profiles: { + type: "object", + label: "User Profiles", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + }, + }, + }, + }, + rateLimiting: { + type: "object", + label: "Rate Limiting", + fields: { + badAuthentication: { + type: "object", + label: "Bad Authentication Rate Limiter", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + penalty: { + type: "number", + label: "Penalty", + min: 0, + }, + flaggedStatusCodes: { + type: "array", + label: "Flagged Status Codes", + items: { + label: "Status Code", + type: "number", + min: 0, + }, + }, + }, + }, + }, + }, + dailyLeaderboards: { + type: "object", + label: "Daily Leaderboards", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + maxResults: { + type: "number", + label: "Max Results", + min: 0, + }, + leaderboardExpirationTimeInDays: { + type: "number", + label: "Leaderboard Expiration Time In Days", + min: 0, + }, + validModeRules: { + type: "array", + label: "Valid Mode Rules", + items: { + type: "object", + label: "Rule", + fields: { + language: { + type: "string", + label: "Language", + }, + mode: { + type: "string", + label: "Mode", + }, + mode2: { + type: "string", + label: "Secondary Mode", + }, + }, + }, + }, + scheduleRewardsModeRules: { + type: "array", + label: "Schedule Rewards Mode Rules", + items: { + type: "object", + label: "Rule", + fields: { + language: { + type: "string", + label: "Language", + }, + mode: { + type: "string", + label: "Mode", + }, + mode2: { + type: "string", + label: "Secondary Mode", + }, + }, + }, + }, + topResultsToAnnounce: { + type: "number", + label: "Top Results To Announce", + min: 1, + hint: "This should atleast be 1. Setting to zero is very bad.", + }, + xpRewardBrackets: { + type: "array", + label: "XP Reward Brackets", + items: { + type: "object", + label: "Bracket", + fields: { + minRank: { + type: "number", + label: "Min Rank", + min: 1, + }, + maxRank: { + type: "number", + label: "Max Rank", + min: 1, + }, + minReward: { + type: "number", + label: "Min Reward", + min: 0, + }, + maxReward: { + type: "number", + label: "Max Reward", + min: 0, + }, + }, + }, + }, + }, + }, + leaderboards: { + type: "object", + label: "Leaderboards", + fields: { + weeklyXp: { + type: "object", + label: "Weekly XP", + fields: { + enabled: { + type: "boolean", + label: "Enabled", + }, + expirationTimeInDays: { + type: "number", + label: "Expiration time in days", + min: 0, + hint: "This should atleast be 15, to allow for past week queries.", + }, + xpRewardBrackets: { + type: "array", + label: "XP Reward Brackets", + items: { + type: "object", + label: "Bracket", + fields: { + minRank: { + type: "number", + label: "Min Rank", + min: 1, + }, + maxRank: { + type: "number", + label: "Max Rank", + min: 1, + }, + minReward: { + type: "number", + label: "Min Reward", + min: 0, + }, + maxReward: { + type: "number", + label: "Max Reward", + min: 0, + }, }, }, }, @@ -562,5 +562,4 @@ export const CONFIGURATION_FORM_SCHEMA: ObjectSchema = { }, }, }, - }, -}; + }; diff --git a/backend/src/dal/user.ts b/backend/src/dal/user.ts index 122b9df8b..f83e30b16 100644 --- a/backend/src/dal/user.ts +++ b/backend/src/dal/user.ts @@ -7,7 +7,6 @@ import MonkeyError from "../utils/error"; import { Collection, ObjectId, WithId, Long, UpdateFilter } from "mongodb"; import Logger from "../utils/logger"; import { flattenObjectDeep, isToday, isYesterday } from "../utils/misc"; -import { Configuration } from "../types/shared"; const SECONDS_PER_HOUR = 3600; @@ -20,7 +19,7 @@ export async function addUser( email: string, uid: string ): Promise { - const newUserDocument: MonkeyTypes.User = { + const newUserDocument: Partial = { name, email, uid, @@ -549,7 +548,10 @@ export async function linkDiscord( discordId: string, discordAvatar?: string ): Promise { - const updates = _.pickBy({ discordId, discordAvatar }, _.identity); + const updates: Partial = _.pickBy( + { discordId, discordAvatar }, + _.identity + ); const result = await getUsersCollection().updateOne( { uid }, { $set: updates } @@ -845,7 +847,7 @@ interface AddToInboxBulkEntry { export async function addToInboxBulk( entries: AddToInboxBulkEntry[], - inboxConfig: Configuration["users"]["inbox"] + inboxConfig: MonkeyTypes.Configuration["users"]["inbox"] ): Promise { const { enabled, maxMail } = inboxConfig; @@ -873,7 +875,7 @@ export async function addToInboxBulk( export async function addToInbox( uid: string, mail: MonkeyTypes.MonkeyMail[], - inboxConfig: Configuration["users"]["inbox"] + inboxConfig: MonkeyTypes.Configuration["users"]["inbox"] ): Promise { const { enabled, maxMail } = inboxConfig; diff --git a/backend/src/init/configuration.ts b/backend/src/init/configuration.ts index 88c788995..dc19ab8d5 100644 --- a/backend/src/init/configuration.ts +++ b/backend/src/init/configuration.ts @@ -4,13 +4,12 @@ import { ObjectId } from "mongodb"; import Logger from "../utils/logger"; import { identity } from "../utils/misc"; import { BASE_CONFIGURATION } from "../constants/base-configuration"; -import { Configuration } from "../types/shared"; const CONFIG_UPDATE_INTERVAL = 10 * 60 * 1000; // 10 Minutes function mergeConfigurations( - baseConfiguration: Configuration, - liveConfiguration: Partial + baseConfiguration: MonkeyTypes.Configuration, + liveConfiguration: Partial ): void { if ( !_.isPlainObject(baseConfiguration) || @@ -46,7 +45,7 @@ let serverConfigurationUpdated = false; export async function getCachedConfiguration( attemptCacheUpdate = false -): Promise { +): Promise { if ( attemptCacheUpdate && lastFetchTime < Date.now() - CONFIG_UPDATE_INTERVAL @@ -58,7 +57,7 @@ export async function getCachedConfiguration( return configuration; } -export async function getLiveConfiguration(): Promise { +export async function getLiveConfiguration(): Promise { lastFetchTime = Date.now(); const configurationCollection = db.collection("configuration"); @@ -72,7 +71,7 @@ export async function getLiveConfiguration(): Promise { const liveConfigurationWithoutId = _.omit( liveConfiguration, "_id" - ) as Configuration; + ) as MonkeyTypes.Configuration; mergeConfigurations(baseConfiguration, liveConfigurationWithoutId); pushConfiguration(baseConfiguration); @@ -93,7 +92,9 @@ export async function getLiveConfiguration(): Promise { return configuration; } -async function pushConfiguration(configuration: Configuration): Promise { +async function pushConfiguration( + configuration: MonkeyTypes.Configuration +): Promise { if (serverConfigurationUpdated) { return; } @@ -110,7 +111,7 @@ async function pushConfiguration(configuration: Configuration): Promise { } export async function patchConfiguration( - configurationUpdates: Partial + configurationUpdates: Partial ): Promise { try { const currentConfiguration = _.cloneDeep(configuration); diff --git a/backend/src/middlewares/api-utils.ts b/backend/src/middlewares/api-utils.ts index 6fb1630ed..52d280df6 100644 --- a/backend/src/middlewares/api-utils.ts +++ b/backend/src/middlewares/api-utils.ts @@ -5,7 +5,6 @@ import { Response, NextFunction, RequestHandler } from "express"; import { handleMonkeyResponse, MonkeyResponse } from "../utils/monkey-response"; import { getUser } from "../dal/user"; import { isAdmin } from "../dal/admin-uids"; -import { Configuration } from "../types/shared"; interface ValidationOptions { criteria: (data: T) => boolean; @@ -23,7 +22,7 @@ const emptyMiddleware = ( * the criteria. */ function validateConfiguration( - options: ValidationOptions + options: ValidationOptions ): RequestHandler { const { criteria, diff --git a/backend/src/middlewares/auth.ts b/backend/src/middlewares/auth.ts index 9fb74de0c..584762299 100644 --- a/backend/src/middlewares/auth.ts +++ b/backend/src/middlewares/auth.ts @@ -13,7 +13,6 @@ import { } from "../utils/prometheus"; import crypto from "crypto"; import { performance } from "perf_hooks"; -import { Configuration } from "../types/shared"; interface RequestAuthenticationOptions { isPublic?: boolean; @@ -127,7 +126,7 @@ function authenticateWithBody( async function authenticateWithAuthHeader( authHeader: string, - configuration: Configuration, + configuration: MonkeyTypes.Configuration, options: RequestAuthenticationOptions ): Promise { const [authScheme, token] = authHeader.split(" "); @@ -210,7 +209,7 @@ async function authenticateWithBearerToken( async function authenticateWithApeKey( key: string, - configuration: Configuration, + configuration: MonkeyTypes.Configuration, options: RequestAuthenticationOptions ): Promise { if (!configuration.apeKeys.acceptKeys) { diff --git a/backend/src/queues/later-queue.ts b/backend/src/queues/later-queue.ts index ebfb65c40..56993b5ec 100644 --- a/backend/src/queues/later-queue.ts +++ b/backend/src/queues/later-queue.ts @@ -2,7 +2,6 @@ import LRUCache from "lru-cache"; import Logger from "../utils/logger"; import { MonkeyQueue } from "./monkey-queue"; import { getCurrentDayTimestamp, getCurrentWeekTimestamp } from "../utils/misc"; -import { ValidModeRule } from "../types/shared"; const QUEUE_NAME = "later"; @@ -18,7 +17,7 @@ export interface LaterTask { export type LaterTaskContexts = { "daily-leaderboard-results": { yesterdayTimestamp: number; - modeRule: ValidModeRule; + modeRule: MonkeyTypes.ValidModeRule; }; "weekly-xp-leaderboard-results": { lastWeekTimestamp: number; @@ -83,7 +82,7 @@ class LaterQueue extends MonkeyQueue> { async scheduleForTomorrow( taskName: LaterTaskType, taskId: string, - modeRule: ValidModeRule + modeRule: MonkeyTypes.ValidModeRule ): Promise { const currentDayTimestamp = getCurrentDayTimestamp(); const jobId = `${taskName}:${currentDayTimestamp}:${taskId}`; diff --git a/backend/src/services/weekly-xp-leaderboard.ts b/backend/src/services/weekly-xp-leaderboard.ts index ede6ca275..30b28fec6 100644 --- a/backend/src/services/weekly-xp-leaderboard.ts +++ b/backend/src/services/weekly-xp-leaderboard.ts @@ -1,6 +1,5 @@ import * as RedisClient from "../init/redis"; import LaterQueue from "../queues/later-queue"; -import { Configuration } from "../types/shared"; import { getCurrentWeekTimestamp } from "../utils/misc"; interface InternalWeeklyXpLeaderboardEntry { @@ -60,7 +59,7 @@ export class WeeklyXpLeaderboard { } public async addResult( - weeklyXpLeaderboardConfig: Configuration["leaderboards"]["weeklyXp"], + weeklyXpLeaderboardConfig: MonkeyTypes.Configuration["leaderboards"]["weeklyXp"], opts: AddResultOpts ): Promise { const { entry, xpGained, timeTypedSeconds } = opts; @@ -117,7 +116,7 @@ export class WeeklyXpLeaderboard { public async getResults( minRank: number, maxRank: number, - weeklyXpLeaderboardConfig: Configuration["leaderboards"]["weeklyXp"] + weeklyXpLeaderboardConfig: MonkeyTypes.Configuration["leaderboards"]["weeklyXp"] ): Promise { const connection = RedisClient.getConnection(); if (!connection || !weeklyXpLeaderboardConfig.enabled) { @@ -150,7 +149,7 @@ export class WeeklyXpLeaderboard { public async getRank( uid: string, - weeklyXpLeaderboardConfig: Configuration["leaderboards"]["weeklyXp"] + weeklyXpLeaderboardConfig: MonkeyTypes.Configuration["leaderboards"]["weeklyXp"] ): Promise { const connection = RedisClient.getConnection(); if (!connection || !weeklyXpLeaderboardConfig.enabled) { @@ -184,7 +183,7 @@ export class WeeklyXpLeaderboard { } export function get( - weeklyXpLeaderboardConfig: Configuration["leaderboards"]["weeklyXp"], + weeklyXpLeaderboardConfig: MonkeyTypes.Configuration["leaderboards"]["weeklyXp"], customTimestamp?: number ): WeeklyXpLeaderboard | null { const { enabled } = weeklyXpLeaderboardConfig; diff --git a/backend/src/types/types.d.ts b/backend/src/types/types.d.ts index fb17ebd67..31bfeffe2 100644 --- a/backend/src/types/types.d.ts +++ b/backend/src/types/types.d.ts @@ -3,6 +3,9 @@ type ObjectId = import("mongodb").ObjectId; type ExpressRequest = import("express").Request; declare namespace MonkeyTypes { + type Configuration = import("./shared").Configuration; + type ValidModeRule = import("./shared").ValidModeRule; + type RewardBracket = import("./shared").RewardBracket; interface DecodedToken { type: "Bearer" | "ApeKey" | "None"; uid: string; @@ -168,7 +171,7 @@ declare namespace MonkeyTypes { [language: string]: boolean; }; funbox: { - none?: boolean; + none: boolean; [funbox: string]: boolean; }; } @@ -361,9 +364,12 @@ declare namespace MonkeyTypes { type: string; } - interface PublicSpeedStats { + type PublicSpeedStats = TypedMongoEntry & PublicSpeedStatsByLanguage; + interface TypedMongoEntry { _id: string; type: "speedStats"; + } + interface PublicSpeedStatsByLanguage { [language_mode_mode2: string]: Record; } diff --git a/backend/src/utils/daily-leaderboards.ts b/backend/src/utils/daily-leaderboards.ts index aec329955..43376faeb 100644 --- a/backend/src/utils/daily-leaderboards.ts +++ b/backend/src/utils/daily-leaderboards.ts @@ -2,7 +2,6 @@ import _ from "lodash"; import * as RedisClient from "../init/redis"; import LaterQueue from "../queues/later-queue"; import { getCurrentDayTimestamp, matchesAPattern, kogascore } from "./misc"; -import { Configuration, ValidModeRule } from "../types/shared"; interface DailyLeaderboardEntry { uid: string; @@ -37,9 +36,9 @@ export class DailyLeaderboard { private leaderboardScoresKeyName: string; private leaderboardModeKey: string; private customTime: number; - private modeRule: ValidModeRule; + private modeRule: MonkeyTypes.ValidModeRule; - constructor(modeRule: ValidModeRule, customTime = -1) { + constructor(modeRule: MonkeyTypes.ValidModeRule, customTime = -1) { const { language, mode, mode2 } = modeRule; this.leaderboardModeKey = `${language}:${mode}:${mode2}`; @@ -68,7 +67,7 @@ export class DailyLeaderboard { public async addResult( entry: DailyLeaderboardEntry, - dailyLeaderboardsConfig: Configuration["dailyLeaderboards"] + dailyLeaderboardsConfig: MonkeyTypes.Configuration["dailyLeaderboards"] ): Promise { const connection = RedisClient.getConnection(); if (!connection || !dailyLeaderboardsConfig.enabled) { @@ -124,7 +123,7 @@ export class DailyLeaderboard { public async getResults( minRank: number, maxRank: number, - dailyLeaderboardsConfig: Configuration["dailyLeaderboards"] + dailyLeaderboardsConfig: MonkeyTypes.Configuration["dailyLeaderboards"] ): Promise { const connection = RedisClient.getConnection(); if (!connection || !dailyLeaderboardsConfig.enabled) { @@ -156,7 +155,7 @@ export class DailyLeaderboard { public async getRank( uid: string, - dailyLeaderboardsConfig: Configuration["dailyLeaderboards"] + dailyLeaderboardsConfig: MonkeyTypes.Configuration["dailyLeaderboards"] ): Promise { const connection = RedisClient.getConnection(); if (!connection || !dailyLeaderboardsConfig.enabled) { @@ -198,7 +197,7 @@ export class DailyLeaderboard { export async function purgeUserFromDailyLeaderboards( uid: string, - configuration: Configuration["dailyLeaderboards"] + configuration: MonkeyTypes.Configuration["dailyLeaderboards"] ): Promise { const connection = RedisClient.getConnection(); if (!connection || !configuration.enabled) { @@ -210,8 +209,8 @@ export async function purgeUserFromDailyLeaderboards( } function isValidModeRule( - modeRule: ValidModeRule, - modeRules: ValidModeRule[] + modeRule: MonkeyTypes.ValidModeRule, + modeRules: MonkeyTypes.ValidModeRule[] ): boolean { const { language, mode, mode2 } = modeRule; @@ -227,7 +226,7 @@ export function getDailyLeaderboard( language: string, mode: string, mode2: string, - dailyLeaderboardsConfig: Configuration["dailyLeaderboards"], + dailyLeaderboardsConfig: MonkeyTypes.Configuration["dailyLeaderboards"], customTimestamp = -1 ): DailyLeaderboard | null { const { validModeRules, enabled } = dailyLeaderboardsConfig; diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 033c4fb38..79c8ff51b 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -12,7 +12,7 @@ "allowSyntheticDefaultImports": true, "esModuleInterop": true, "strictNullChecks": true, - "skipLibCheck": true + "skipLibCheck": false }, "ts-node": { "files": true diff --git a/frontend/src/ts/ape/server-configuration.ts b/frontend/src/ts/ape/server-configuration.ts index 2619ccead..bec53f84d 100644 --- a/frontend/src/ts/ape/server-configuration.ts +++ b/frontend/src/ts/ape/server-configuration.ts @@ -1,9 +1,8 @@ import Ape from "."; -import * as SharedMonkeyTypes from "@backend/types/shared"; -let config: SharedMonkeyTypes.Configuration | undefined = undefined; +let config: MonkeyTypes.Configuration | undefined = undefined; -export function get(): SharedMonkeyTypes.Configuration | undefined { +export function get(): MonkeyTypes.Configuration | undefined { return config; } @@ -14,6 +13,6 @@ export async function sync(): Promise { console.error("Could not fetch configuration", response.message); return; } else { - config = response.data as SharedMonkeyTypes.Configuration; + config = response.data as MonkeyTypes.Configuration; } } diff --git a/frontend/src/ts/types/types.d.ts b/frontend/src/ts/types/types.d.ts index 6f1e826e7..e661cabfb 100644 --- a/frontend/src/ts/types/types.d.ts +++ b/frontend/src/ts/types/types.d.ts @@ -1,6 +1,10 @@ type typesSeparatedWithHash = T | `${T}#${typesSeparatedWithHash}`; declare namespace MonkeyTypes { + type Configuration = import("@backend/types/shared").Configuration; + type ValidModeRule = import("@backend/types/shared").ValidModeRule; + type RewardBracket = import("@backend/types/shared").RewardBracket; + type PageName = | "loading" | "test" diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 666365641..46e726e50 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -30,7 +30,7 @@ "noPropertyAccessFromIndexSignature": true, "allowUnusedLabels": false, "allowUnreachableCode": false, - "skipLibCheck": true, + "skipLibCheck": false, "paths": { "@backend/*": ["../backend/src/*"] }