From fdc8527dfe995019920f341a09b15cf9c3e4c303 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 06:17:18 +0100 Subject: [PATCH 01/24] Fix package, update package versions, enforce node v16 --- package-lock.json | 11296 +++++++++++++++++++++++++++++++------------- package.json | 24 +- 2 files changed, 8026 insertions(+), 3294 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e4668b29..f52d6e4b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,60 +1,6457 @@ { "name": "bloxy", - "version": "5.7.1", - "lockfileVersion": 1, + "version": "6.0.0-alpha", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "bloxy", + "version": "6.0.0-alpha", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "signalr-client": "0.0.20", + "tough-cookie": "^4.0.0", + "tslib": "^2.1.0" + }, + "devDependencies": { + "@types/debug": "^4.1.5", + "@types/lodash": "^4.14.167", + "@types/node": "^16.11.19", + "@types/tough-cookie": "^4.0.0", + "@types/websocket": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "codacy-coverage": "^3.4.0", + "eslint": "^8.6.0", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "fast-check": "^2.13.0", + "got": "^12.0.0", + "jest": "^27.4.7", + "joi": "^17.3.0", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.5.0", + "typedoc-plugin-markdown-pages": "^0.3.0", + "typescript": "^4.1.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", + "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", + "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.6", + "@jest/reporters": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.7", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-resolve-dependencies": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "jest-watcher": "^27.4.6", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", + "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", + "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", + "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/types": "^27.4.2", + "expect": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", + "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/source-map": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", + "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", + "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.4.6", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-runtime": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", + "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "dev": true + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", + "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", + "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/cacheable-lookup": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", + "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/codacy-coverage": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", + "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", + "deprecated": "Package being deprecated in favor of https://github.com/codacy/codacy-coverage-reporter", + "dev": true, + "dependencies": { + "bluebird": "^3.5.x", + "commander": "^2.x", + "jacoco-parse": "^2.x", + "joi": "^13.x", + "lcov-parse": "^1.x", + "lodash": "^4.17.4", + "log-driver": "^1.x", + "request": "^2.88.0", + "request-promise": "^4.x" + }, + "bin": { + "codacy-coverage": "bin/codacy-coverage.js" + }, + "engines": { + "node": ">= 8.12.0" + } + }, + "node_modules/codacy-coverage/node_modules/joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "dependencies": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "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", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-security": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", + "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "dev": true, + "dependencies": { + "safe-regex": "^1.1.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", + "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "node_modules/fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "dependencies": { + "pure-rand": "^5.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.0.0.tgz", + "integrity": "sha512-gNNNghQ1yw0hyzie1FLK6gY90BQlXU9zSByyRygnbomHPruKQ6hAKKbpO1RfNZp8b+qNzNipGeRG3tUelKcVsA==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.2.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.9", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.10.tgz", + "integrity": "sha512-QHgsdYkieKp+6JbXP25P+tepqiHYd+FVnDwXpxi/BlUcoIB0nsmTOymTNvETuTO+pDuwcSklPE72VR3DqV+Haw==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "dependencies": { + "punycode": "2.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jacoco-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", + "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", + "dev": true, + "dependencies": { + "mocha": "^5.2.0", + "xml2js": "^0.4.9" + } + }, + "node_modules/jest": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", + "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.4.7", + "import-local": "^3.0.2", + "jest-cli": "^27.4.7" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", + "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", + "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.4.7", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.7", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", + "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.4.6", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.6", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.4.6", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", + "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", + "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", + "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", + "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", + "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", + "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", + "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", + "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", + "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", + "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", + "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", + "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", + "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.6", + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-haste-map": "^27.4.6", + "jest-leak-detector": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", + "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/globals": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", + "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.4.6", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.4.6", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", + "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "leven": "^3.1.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", + "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.4.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true, + "bin": { + "lcov-parse": "bin/cli.js" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true, + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marked": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "node_modules/mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "dependencies": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/mocha/node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", + "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", + "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/signalr-client": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", + "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", + "deprecated": "This is no longer active", + "dependencies": { + "websocket": "^1.0.28" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dev": true, + "dependencies": { + "hoek": "6.x.x" + } + }, + "node_modules/topo/node_modules/hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", + "dev": true, + "dependencies": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.22.0" + } + }, + "node_modules/typedoc-plugin-markdown-pages": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", + "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "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": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.7" } }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "source-map": { @@ -65,153 +6462,175 @@ } } }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "@babel/generator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "requires": { - "@babel/types": "^7.12.11", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.16.7" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" - } - }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.16.7" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.12.11" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -222,13 +6641,49 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -250,12 +6705,12 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-import-meta": { @@ -331,73 +6786,67 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "@babel/traverse": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz", - "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==", + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.10", - "@babel/types": "^7.12.10", + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@babel/types": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", - "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -407,30 +6856,19 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, "@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.20", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -444,20 +6882,37 @@ } }, "@hapi/hoek": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", - "integrity": "sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", "dev": true }, "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dev": true, "requires": { "@hapi/hoek": "^9.0.0" } }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -471,6 +6926,25 @@ "resolve-from": "^5.0.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -480,135 +6954,135 @@ } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", + "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", "slash": "^3.0.0" } }, "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", + "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.4.6", + "@jest/reporters": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.7", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-resolve-dependencies": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "jest-watcher": "^27.4.6", + "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", + "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", "dev": true, "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", - "jest-mock": "^26.6.2" + "jest-mock": "^27.4.6" } }, "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", + "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" } }, "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", + "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" + "@jest/environment": "^27.4.6", + "@jest/types": "^27.4.2", + "expect": "^27.4.6" } }, "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", + "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" + "v8-to-istanbul": "^8.1.0" } }, "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -617,96 +7091,95 @@ } }, "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", + "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.4.6", + "@jest/types": "^27.4.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", + "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", + "@jest/test-result": "^27.4.6", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" + "jest-haste-map": "^27.4.6", + "jest-runtime": "^27.4.6" } }, "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", + "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", + "jest-haste-map": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" } }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@sideway/address": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.1.tgz", - "integrity": "sha512-+I5aaQr3m0OAmMr7RQ3fR9zx55sejEYR2BFJaxL+zT3VM2611X0SHvPWIbAUBZVTn/YzYKbV8gJ2oT/QELknfQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", "dev": true, "requires": { "@hapi/hoek": "^9.0.0" @@ -725,42 +7198,48 @@ "dev": true }, "@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", "dev": true }, "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } }, "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "requires": { - "defer-to-connect": "^2.0.0" + "defer-to-connect": "^2.0.1" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -771,18 +7250,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -790,18 +7269,18 @@ } }, "@types/babel__traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", - "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dev": true, "requires": { "@types/http-cache-semantics": "*", @@ -811,30 +7290,33 @@ } }, "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } }, "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { "@types/node": "*" } }, "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, "@types/istanbul-lib-report": { @@ -847,51 +7329,51 @@ } }, "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "dev": true, "requires": { "@types/node": "*" } }, "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", "dev": true }, - "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "@types/node": { + "version": "16.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==", "dev": true }, "@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", "dev": true }, "@types/responselike": { @@ -904,163 +7386,134 @@ } }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", "dev": true }, "@types/websocket": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.1.tgz", - "integrity": "sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", + "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", "dev": true, "requires": { "@types/node": "*" } }, "@types/yargs": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.12.tgz", - "integrity": "sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz", - "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.15.2", - "@typescript-eslint/scope-manager": "4.15.2", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz", - "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.15.2", - "@typescript-eslint/types": "4.15.2", - "@typescript-eslint/typescript-estree": "4.15.2", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz", - "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.15.2", - "@typescript-eslint/types": "4.15.2", - "@typescript-eslint/typescript-estree": "4.15.2", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", - "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.2", - "@typescript-eslint/visitor-keys": "4.15.2" - } - }, - "@typescript-eslint/types": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", - "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", - "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.2", - "@typescript-eslint/visitor-keys": "4.15.2", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", - "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.2", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" } }, - "@typescript-eslint/scope-manager": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", - "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", + "@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.2", - "@typescript-eslint/visitor-keys": "4.15.2" + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", - "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", - "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.2", - "@typescript-eslint/visitor-keys": "4.15.2", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", - "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.2", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" } }, "abab": { @@ -1070,9 +7523,9 @@ "dev": true }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-globals": { @@ -1083,13 +7536,22 @@ "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -1097,6 +7559,15 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1116,41 +7587,41 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -1158,30 +7629,9 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "array-union": { @@ -1190,16 +7640,10 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -1211,36 +7655,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1254,38 +7674,38 @@ "dev": true }, "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", + "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", "dev": true, "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.4.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" } }, "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -1315,76 +7735,21 @@ } }, "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^26.6.2", + "babel-plugin-jest-hoist": "^27.4.0", "babel-preset-current-node-syntax": "^1.0.0" } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -1431,6 +7796,19 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -1441,46 +7819,29 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "bufferutil": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", - "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "node-gyp-build": "^4.3.0" } }, "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", + "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", "dev": true }, "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "requires": { "clone-response": "^1.0.2", @@ -1488,8 +7849,25 @@ "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", + "normalize-url": "^6.0.1", "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } } }, "callsites": { @@ -1504,14 +7882,11 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } + "caniuse-lite": { + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "dev": true }, "caseless": { "version": "0.12.0", @@ -1520,54 +7895,13 @@ "dev": true }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "char-regex": { @@ -1577,74 +7911,26 @@ "dev": true }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } + "wrap-ansi": "^7.0.0" } }, "clone-response": { @@ -1698,35 +7984,19 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "combined-stream": { @@ -1744,12 +8014,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1757,20 +8021,14 @@ "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1841,36 +8099,17 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "decompress-response": { @@ -1890,10 +8129,16 @@ } } }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { @@ -1903,52 +8148,11 @@ "dev": true }, "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1968,9 +8172,9 @@ "dev": true }, "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", "dev": true }, "dir-glob": { @@ -2018,10 +8222,16 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "dev": true + }, "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { @@ -2048,15 +8258,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, "es5-ext": { "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", @@ -2086,25 +8287,37 @@ "ext": "^1.1.2" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2147,50 +8360,67 @@ } }, "eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -2219,45 +8449,37 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^3.1.0" } }, "esprima": { @@ -2276,9 +8498,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -2293,9 +8515,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -2312,284 +8534,62 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "expect": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", + "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "@jest/types": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "type": "^2.5.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -2597,18 +8597,18 @@ "dev": true }, "faker": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/faker/-/faker-5.4.0.tgz", - "integrity": "sha512-Y9n/Ky/xZx/Bj8DePvXspUYRtHl/rGQytoIT5LaxmNwSe3wWyOeOXb3lT6Dpipq240PVpeFaGKzScz/5fvff2g==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", "dev": true }, "fast-check": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.13.0.tgz", - "integrity": "sha512-IOfzKm/SCA+jpUEgAfqAuxHYPmgtmpnnwljQmYPRGrqYczcTKApXKHza/SNxFxYkecWfZilYa0DJdBvqz1bcSw==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", "dev": true, "requires": { - "pure-rand": "^4.1.1" + "pure-rand": "^5.0.0" } }, "fast-deep-equal": { @@ -2618,17 +8618,27 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -2644,9 +8654,9 @@ "dev": true }, "fastq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", - "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -2662,9 +8672,9 @@ } }, "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -2700,15 +8710,9 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, "forever-agent": { @@ -2717,34 +8721,22 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { - "map-cache": "^0.2.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } + "form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true }, "fs.realpath": { "version": "1.0.0", @@ -2753,9 +8745,9 @@ "dev": true }, "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -2790,18 +8782,9 @@ "dev": true }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "getpass": { @@ -2814,9 +8797,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2828,27 +8811,27 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -2860,28 +8843,30 @@ } }, "got": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz", - "integrity": "sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.0.0.tgz", + "integrity": "sha512-gNNNghQ1yw0hyzie1FLK6gY90BQlXU9zSByyRygnbomHPruKQ6hAKKbpO1RfNZp8b+qNzNipGeRG3tUelKcVsA==", "dev": true, "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", + "@sindresorhus/is": "^4.2.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.9", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", "responselike": "^2.0.0" } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "growl": { @@ -2890,17 +8875,10 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -2936,63 +8914,11 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -3005,12 +8931,6 @@ "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", "dev": true }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -3032,6 +8952,17 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -3044,19 +8975,29 @@ } }, "http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.10.tgz", + "integrity": "sha512-QHgsdYkieKp+6JbXP25P+tepqiHYd+FVnDwXpxi/BlUcoIB0nsmTOymTNvETuTO+pDuwcSklPE72VR3DqV+Haw==", "dev": true, "requires": { "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "resolve-alpn": "^1.2.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "iconv-lite": { @@ -3069,9 +9010,9 @@ } }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -3085,9 +9026,9 @@ } }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -3116,120 +9057,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3249,9 +9085,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3263,25 +9099,16 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-typedarray": { @@ -3289,28 +9116,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isemail": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", @@ -3326,12 +9131,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -3339,20 +9138,21 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "requires": { - "@babel/core": "^7.7.5", + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" }, "dependencies": { @@ -3373,57 +9173,23 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -3441,273 +9207,265 @@ } }, "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", + "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", "dev": true, "requires": { - "@jest/core": "^26.6.3", + "@jest/core": "^27.4.7", "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - } + "jest-cli": "^27.4.7" } }, "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - } + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", + "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", + "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", + "dev": true, + "requires": { + "@jest/core": "^27.4.7", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.7", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "prompts": "^2.0.1", + "yargs": "^16.2.0" } }, "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", + "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.4.6", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.6", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" + "jest-circus": "^27.4.6", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0" } }, "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", + "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" } }, "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", + "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6" } }, "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", + "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", + "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" } }, "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", "dev": true }, "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", + "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", + "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/environment": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.6.2", + "expect": "^27.4.6", "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "throat": "^6.0.1" } }, "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", + "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", "dev": true, "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" } }, "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", + "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" } }, "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", + "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", + "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*" } }, @@ -3715,108 +9473,108 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", "dev": true }, "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", + "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", + "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.6" } }, "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", + "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.4.6", + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.7.1", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-haste-map": "^27.4.6", + "jest-leak-detector": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "throat": "^6.0.1" } }, "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", + "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/globals": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", + "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", + "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" + "strip-bom": "^4.0.0" } }, "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { "@types/node": "*", @@ -3824,101 +9582,101 @@ } }, "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", + "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", "dev": true, "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^26.6.2", + "expect": "^27.4.6", "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", + "pretty-format": "^27.4.6", "semver": "^7.3.2" } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "picomatch": "^2.2.3" } }, "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", + "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", + "jest-get-type": "^27.4.0", "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "pretty-format": "^27.4.6" }, "dependencies": { "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true } } }, "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", + "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^26.6.2", + "jest-util": "^27.4.2", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -3927,14 +9685,14 @@ } }, "joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", "dev": true, "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", + "@sideway/address": "^4.1.3", "@sideway/formula": "^3.0.0", "@sideway/pinpoint": "^2.0.0" } @@ -3946,13 +9704,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsbn": { @@ -3962,50 +9719,38 @@ "dev": true }, "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", + "abab": "^2.0.5", + "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", - "cssstyle": "^2.2.0", + "cssstyle": "^2.3.0", "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", + "decimal.js": "^10.2.1", "domexception": "^2.0.1", - "escodegen": "^1.14.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", + "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } } }, "jsesc": { @@ -4020,16 +9765,10 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { @@ -4051,59 +9790,41 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", "dev": true, "requires": { "json-buffer": "3.0.1" } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -4132,12 +9853,6 @@ "type-check": "~0.4.0" } }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4148,15 +9863,15 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "log-driver": { @@ -4166,9 +9881,9 @@ "dev": true }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true }, "lru-cache": { @@ -4204,33 +9919,18 @@ } }, "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "requires": { - "object-visit": "^1.0.0" + "tmpl": "1.0.5" } }, "marked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", - "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", "dev": true }, "merge-stream": { @@ -4246,28 +9946,28 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -4297,27 +9997,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -4369,6 +10048,12 @@ "ms": "2.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -4383,6 +10068,18 @@ "path-is-absolute": "^1.0.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -4395,28 +10092,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "natural-compare": { "version": "1.4.0", @@ -4435,16 +10113,10 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, "node-gyp-build": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", - "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" }, "node-int64": { "version": "0.4.0", @@ -4452,47 +10124,12 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, - "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4500,26 +10137,18 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - } + "path-key": "^3.0.0" } }, "nwsapi": { @@ -4534,55 +10163,6 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4601,32 +10181,6 @@ "mimic-fn": "^2.1.0" } }, - "onigasm": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", - "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", - "dev": true, - "requires": { - "lru-cache": "^5.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -4642,21 +10196,9 @@ } }, "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true }, "p-limit": { @@ -4692,28 +10234,10 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "path-exists": { @@ -4735,9 +10259,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -4752,20 +10276,23 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", + "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", + "dev": true }, "pkg-dir": { "version": "4.2.0", @@ -4776,12 +10303,6 @@ "find-up": "^4.0.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4789,39 +10310,20 @@ "dev": true }, "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", + "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "dependencies": { "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } @@ -4833,9 +10335,9 @@ "dev": true }, "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -4863,9 +10365,9 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pure-rand": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-4.1.2.tgz", - "integrity": "sha512-uLzZpQWfroIqyFWmX/pl0OL2JHJdoU3dbh0dvZ25fChHFJJi56J5oQZhW6QgbT2Llwh1upki84LnTwlZvsungA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", "dev": true }, "qs": { @@ -4874,90 +10376,28 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "request": { @@ -5008,12 +10448,6 @@ "psl": "^1.1.28", "punycode": "^2.1.1" } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true } } }, @@ -5050,61 +10484,27 @@ "lodash": "^4.17.19" } }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "resolve-cwd": { @@ -5130,10 +10530,10 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, "responselike": { @@ -5143,6 +10543,14 @@ "dev": true, "requires": { "lowercase-keys": "^2.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } } }, "ret": { @@ -5166,17 +10574,14 @@ "glob": "^7.1.3" } }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "safe-buffer": { "version": "5.1.2", @@ -5193,508 +10598,102 @@ "ret": "~0.1.10" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "shiki": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.2.tgz", - "integrity": "sha512-BjUCxVbxMnvjs8jC4b+BQ808vwjJ9Q8NtLqPwXShZ307HdXiDFYP968ORSVfaTNNSWYDBYdMnVKJ0fYNsoZUBA==", - "dev": true, - "requires": { - "onigasm": "^2.2.5", - "vscode-textmate": "^5.2.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "signalr-client": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", - "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", - "requires": { - "websocket": "^1.0.28" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "xmlchars": "^2.2.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "lru-cache": "^6.0.0" } }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "shebang-regex": "^3.0.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, + "signalr-client": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", + "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "websocket": "^1.0.28" } }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "sprintf-js": { @@ -5721,9 +10720,9 @@ } }, "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -5737,27 +10736,6 @@ } } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -5765,9 +10743,9 @@ "dev": true }, "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", @@ -5775,23 +10753,23 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -5800,12 +10778,6 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -5819,79 +10791,36 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", - "dev": true, - "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ajv": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz", - "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -5920,15 +10849,15 @@ "dev": true }, "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { @@ -5937,38 +10866,6 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6006,23 +10903,23 @@ } }, "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "punycode": "^2.1.1" } }, "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -6072,9 +10969,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typedarray-to-buffer": { @@ -6086,37 +10983,25 @@ } }, "typedoc": { - "version": "0.20.27", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.27.tgz", - "integrity": "sha512-Y61T2wEpBo6x0t0zeMNH6CH0n2Jt8E1IHObcK4fGT9nK9Zq6+Rurf0A9WqVbhRmkGpu1wBsGl+4kSJdIN+AOtg==", + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", "dev": true, "requires": { - "colors": "^1.4.0", - "fs-extra": "^9.1.0", - "handlebars": "^4.7.6", - "lodash": "^4.17.20", + "glob": "^7.2.0", "lunr": "^2.3.9", - "marked": "^2.0.0", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "shiki": "^0.9.2", - "typedoc-default-themes": "^0.12.7" + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" } }, - "typedoc-default-themes": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.7.tgz", - "integrity": "sha512-0XAuGEqID+gon1+fhi4LycOEFM+5Mvm2PjwaiVZNAzU7pn3G2DEpsoXnFOPlLDnHY6ZW0BY0nO7ur9fHOFkBLQ==", - "dev": true - }, "typedoc-plugin-markdown": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.5.0.tgz", - "integrity": "sha512-UzSTK5RpQVbIrcxV1ypHt3Pqr4O3DObYZIhcAXBazitHnpdl500cggXFHmxH7F/j3P3P2IBvPKpfnU6lzRdk8w==", + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", "dev": true, "requires": { - "handlebars": "^4.7.6" + "handlebars": "^4.7.7" } }, "typedoc-plugin-markdown-pages": { @@ -6126,121 +11011,56 @@ "dev": true }, "typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, "uglify-js": { - "version": "3.12.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.4.tgz", - "integrity": "sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A==", + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", "dev": true, "optional": true }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "utf-8-validate": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz", - "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", "requires": { - "node-gyp-build": "^4.2.0" + "node-gyp-build": "^4.3.0" } }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -6256,16 +11076,6 @@ } } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -6277,6 +11087,12 @@ "extsprintf": "^1.2.0" } }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, "vscode-textmate": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", @@ -6302,12 +11118,12 @@ } }, "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "requires": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "webidl-conversions": { @@ -6317,9 +11133,9 @@ "dev": true }, "websocket": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.33.tgz", - "integrity": "sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "requires": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -6336,6 +11152,11 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -6355,13 +11176,13 @@ "dev": true }, "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", + "lodash": "^4.7.0", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, @@ -6374,12 +11195,6 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -6393,63 +11208,14 @@ "dev": true }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } } }, "wrappy": { @@ -6471,10 +11237,11 @@ } }, "ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", - "dev": true + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -6505,9 +11272,9 @@ "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yaeti": { @@ -6522,58 +11289,25 @@ "dev": true }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } } diff --git a/package.json b/package.json index 43fe984c4..d039275ce 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "bloxy", "private": false, - "version": "5.7.1", + "version": "6.0.0-alpha", "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" }, "main": "./dist/index.js", "description": "A Node.JS library for interacting with the Roblox website and its API.", @@ -21,7 +21,6 @@ "test-with-coverage": "jest --coverage && cat ./coverage/lcov.info | codacy-coverage", "build": "tsc --skipLibCheck", "eslint": "eslint . --ext .ts", - "postinstall": "npm install got && echo \"\nThank you for installing bloxy! Dependency 'got' has been installed automatically, uninstall it if you plan to use bloxy in a browser-related project!\"", "prepublishOnly": "npm run build", "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'" @@ -37,25 +36,25 @@ "roblox nodejs", "roblox module" ], - "author": "ScriptBased", + "author": "VisualizeMeme", "license": "MIT", "devDependencies": { "@types/debug": "^4.1.5", "@types/lodash": "^4.14.167", - "@types/node": "^14.14.31", + "@types/node": "^16.11.19", "@types/tough-cookie": "^4.0.0", "@types/websocket": "^1.0.1", - "@typescript-eslint/eslint-plugin": "^4.15.2", - "@typescript-eslint/parser": "^4.15.2", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", "codacy-coverage": "^3.4.0", - "eslint": "^7.20.0", + "eslint": "^8.6.0", "eslint-plugin-security": "^1.4.0", "faker": "^5.1.0", "fast-check": "^2.13.0", - "got": "^11.8.1", - "jest": "^26.6.3", + "got": "^12.0.0", + "jest": "^27.4.7", "joi": "^17.3.0", - "typedoc": "^0.20.27", + "typedoc": "^0.22.10", "typedoc-plugin-markdown": "^3.5.0", "typedoc-plugin-markdown-pages": "^0.3.0", "typescript": "^4.1.3" @@ -69,6 +68,5 @@ "jest": { "collectCoverage": true, "coverageDirectory": "./coverage/" - }, - "optionalDependencies": {} + } } From 64095abf37e956c537321689e328ae2b81d6f493 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 07:14:36 +0100 Subject: [PATCH 02/24] Remove captcha api (#281) --- src/client/apis/CaptchaAPI.ts | 45 ----------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 src/client/apis/CaptchaAPI.ts diff --git a/src/client/apis/CaptchaAPI.ts b/src/client/apis/CaptchaAPI.ts deleted file mode 100644 index 230ec0abe..000000000 --- a/src/client/apis/CaptchaAPI.ts +++ /dev/null @@ -1,45 +0,0 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; - - -export type GetCaptchaMetadata = { - funCaptchaPublicKeys: { - type: string; - value: string; - }[]; -} -export type GetLanguageResources = { - languageResources: unknown; -} - - -export default class CaptchaAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://captcha.roblox.com/" - }); - } - - getCaptchaMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/captcha/metadata` - }, - json: true - }) - .then(response => response.body); - } - - getLanguageResources (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/language-resources` - }, - json: true - }) - .then(response => response.body); - } -} From 2b9272939415e61553fe7cc0fa507c2293eacb5f Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 08:08:17 +0100 Subject: [PATCH 03/24] Remove captcha api fully (#281) --- src/client/apis/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/client/apis/index.ts b/src/client/apis/index.ts index 3cfb22648..d35163f9e 100644 --- a/src/client/apis/index.ts +++ b/src/client/apis/index.ts @@ -9,7 +9,6 @@ import AuthAPI from "./AuthAPI"; import AvatarAPI from "./AvatarAPI"; import BadgesAPI from "./BadgesAPI"; import BillingAPI from "./BillingAPI"; -import CaptchaAPI from "./CaptchaAPI"; import CatalogAPI from "./CatalogAPI"; import ChatAPI from "./ChatAPI"; import ContactsAPI from "./ContactsAPI"; @@ -50,7 +49,6 @@ export declare type APIs = { avatarAPI: AvatarAPI; badgesAPI: BadgesAPI; billingAPI: BillingAPI; - captchaAPI: CaptchaAPI; catalogAPI: CatalogAPI; chatAPI: ChatAPI; contactsAPI: ContactsAPI; @@ -93,7 +91,6 @@ export default function initAPIs (client: Client): APIs { avatarAPI: new AvatarAPI(client), badgesAPI: new BadgesAPI(client), billingAPI: new BillingAPI(client), - captchaAPI: new CaptchaAPI(client), catalogAPI: new CatalogAPI(client), chatAPI: new ChatAPI(client), contactsAPI: new ContactsAPI(client), From a7c9de16984f5dec690269d0a17f4e812e2a5f6b Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 08:09:11 +0100 Subject: [PATCH 04/24] Add .prettierrc --- .prettierrc | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..bdf18c214 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 4, + "trailingComma": "none" +} From b84c0c15738d3c2ebe9568acda0662676d717b8e Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 08:09:26 +0100 Subject: [PATCH 05/24] Export all types (#264) --- src/index.ts | 1023 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1023 insertions(+) diff --git a/src/index.ts b/src/index.ts index bf892f388..fca589611 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,1024 @@ export { default as Client } from "./client"; + +export type { + AddStarCodeAffiliate, + AddStarCodeAffiliateOptions, + DeletePhone, + DeletePhoneOptions, + GetConsecutiveXboxLoginDays, + GetMetaData as AccountInformationAPIGetMetaData, + GetSelfPromotionChannels, + GetStarCodeAffiliate, + GetUserBirthdate, + GetUserDescription, + GetUserGender, + GetUserPromotionChannels, + GetUserPromotionChannelsOptions, + GetVerifiedPhoneNumber, + RemoveStarCodeAffiliate, + ResendPhoneCode, + ResendPhoneCodeOptions, + SetPhoneNumber, + SetPhoneNumberOptions, + UpdateUserBirthdate, + UpdateUserBirthdateOptions, + UpdateUserDescription, + UpdateUserDescriptionOptions, + UpdateUserGender, + UpdateUserGenderOptions, + UpdateUserPromotionChannelsOptions, + VerifyPhone, + VerifyPhoneOptions +} from "./client/apis/AccountInformationAPI"; +export type { + GetAppChatPrivacy, + GetContactUpsell, + GetGameChatPrivacy, + GetInventoryPrivacy, + GetIsXboxUsernameValid, + GetIsXboxUsernameValidOptions, + GetSettingsGroups, + GetUserEmailStatus, + GetUserPrivacy, + GetUserPrivacySettingsInfo, + GetUserPrivateMessagePrivacy, + GetUserTradePrivacy, + GetUserTradeQualityFilter, + GetWebsiteTheme, + GetWebsiteThemes, + SendEmailVerification, + UpdateAppChatPrivacy, + UpdateAppChatPrivacyOptions, + UpdateContactUpsellSuppression, + UpdateContactUpsellSuppressionOptions, + UpdateGameChatPrivacy, + UpdateGameChatPrivacyOptions, + UpdateInventoryPrivacy, + UpdateInventoryPrivacyOptions, + UpdateTwoStepStatus, + UpdateTwoStepStatusOptions, + UpdateUserEmail, + UpdateUserEmailOptions, + UpdateUserPrivacy, + UpdateUserPrivacyOptions, + UpdateUserPrivateMessagePrivacy, + UpdateUserPrivateMessagePrivacyOptions, + UpdateUserPromotionChannels, + UpdateUserTradePrivacy, + UpdateUserTradePrivacyOptions, + UpdateUserTradeQualityFilter, + UpdateUserTradeQualityFilterOptions, + UpdateWebsiteTheme, + UpdateWebsiteThemeOptions +} from "./client/apis/AccountSettingsAPI"; +export type { + CreateAd, + CreateAdOptions, + GetCreateAdMetaData, + GetSponsoredGames, + GetSponsoredGamesOptions, + RunAd, + RunAdOptions, + StopAd, + StopAdOptions +} from "./client/apis/AdConfigurationAPI"; +export type { + CreateAssetAd, + CreateAssetAdOptions, + CreateGamePassAd, + CreateGamePassAdOptions, + CreateGroupAd, + CreateGroupAdOptions +} from "./client/apis/AdsAPI"; +export type { + BaseAsset, + BaseAssetDeliveryOptions, + BaseAssetRaw, + GetAssetByAlias, + GetAssetByAliasOptions, + GetAssetByAssetId, + GetAssetByAssetIdOptions, + GetAssetByAssetVersionId, + GetAssetByAssetVersionIdOptions, + GetAssetByHash, + GetAssetByHashOptions, + GetAssetById, + GetAssetByIdOptions, + GetAssetByMarAssetHash, + GetAssetByMarAssetHashOptions, + GetAssetByUserAssetId, + GetAssetByUserAssetIdOptions, + GetAssetVersionByAssetId, + GetAssetVersionByAssetIdOptions, + GetBatchAssets, + GetBatchAssetsOptions +} from "./client/apis/AssetDeliveryAPI"; +export type { + ChangeUserPassword, + ChangeUserPasswordOptions, + ChangeUsername, + ChangeUsernameOptions, + GetAuthMetaData, + GetAuthTicket, + GetCredentialsVerificationStatus, + GetCredentialsVerificationStatusOptions, + GetCurrentPasswordStatus, + GetExistingUsernames, + GetExistingUsernamesOptions, + GetMetaData as GetAuthAPIMetaData, + GetPasswordResetMetaData, + GetPasswordResetMetaDataOptions, + GetRecoveryMetaData, + GetSAMLMetaData, + GetTwoStepVerificationMetaData as GetAuthTwoStepVerificationMetaData, + Login, + LoginOptions, + Logout, + RecoverUsernames, + RecoverUsernamesOptions, + RequestTwoStepVerification, + ResendTwoStepVerification, + ResendTwoStepVerificationOptions, + ResetPassword, + ResetPasswordOptions, + RevertAccount, + RevertAccountInfo, + RevertAccountInfoOptions, + RevertAccountOptions, + SAMLRequest, + SendCredentialsVerificationMessage, + SendCredentialsVerificationMessageOptions, + SendPasswordReset, + SendPasswordResetOptions, + SignUp, + SignUpOptions, + ValidatePassword, + ValidatePasswordOptions, + ValidateUsername, + ValidateUsernameOptions, + VerifyPasswordReset, + VerifyPasswordResetOptions, + VerifyTwoStepVerification, + VerifyTwoStepVerificationOptions +} from "./client/apis/AuthAPI"; +export type { + BodyColors, + BodyScales, + ColorPalette, + CreateOutfit, + CreateOutfitOptions, + DeleteOutfit, + DeleteOutfitOptions, + GetAvatarMetadata, + GetAvatarRules, + GetOutfit, + GetOutfitOptions, + GetRecentItems, + GetRecentItemsOptions, + GetUserAvatar, + GetUserAvatarOptions, + GetUserCurrentlyWearing, + GetUserCurrentlyWearingOptions, + GetUserOutfits, + GetUserOutfitsOptions, + RedrawThumbnail, + RemoveAssetFromAvatar, + RemoveAssetFromAvatarOptions, + Scale, + SetBodyColors, + SetBodyColorsOptions, + SetPlayerAvatarScales, + SetPlayerAvatarScalesOptions, + SetPlayerAvatarType, + SetPlayerAvatarTypeOptions, + SetPlayerAvatarWearingAssets, + SetPlayerAvatarWearingAssetsOptions, + UpdateOutfit, + UpdateOutfitOptions, + UserAvatar, + WearAssetOnAvatar, + WearAssetOnAvatarOptions, + WearOutfit, + WearOutfitOptions +} from "./client/apis/AvatarAPI"; +export type { + DeleteBadgeFromSelf, + DeleteBadgeFromSelfOptions, + DeleteBadgeFromUser, + DeleteBadgeFromUserOptions, + GetBadge, + GetBadgeOptions, + GetUniverseBadges, + GetUniverseBadgesOptions, + GetUserBadges, + GetUserBadgesAwardedDates, + GetUserBadgesAwardedDatesOptions, + GetUserBadgesOptions, + UpdateBadge, + UpdateBadgeOptions +} from "./client/apis/BadgesAPI"; +export type { BaseAPIRequestOptions } from "./client/apis/BaseAPI"; +export type { + GetDeveloperExchangeRate, + GetLatestLuobuDeveloperExchangeStatus, + GetLuobuDeveloperExchangeBalance, + GetLuobuDeveloperExchangeEligibility, + GetUserPayments, + GetUserPaymentsOptions, + GetXsollaIFrameToken, + GetXsollaIFrameTokenOptions, + IncrementCounterByAgent, + IncrementCounterByAgentOptions, + PurchaseAmazonProduct, + PurchaseAmazonProductOptions, + PurchaseAppleProduct, + PurchaseAppleProductOptions, + PurchaseGoogleProduct, + PurchaseGoogleProductOptions, + RedeemDigitalCode, + RedeemDigitalCodeOptions, + RedeemGameCard, + RedeemGameCardOptions, + RedeemPromoCode, + RedeemPromoCodeOptions, + ReverseGameCard, + ReverseGameCardOptions, + SendXsollaWebhook, + SendXsollaWebhookOptions, + SubmitLuobuDeveloperExchange, + SubmitLuobuDeveloperExchangeOptions, + ValidateAmazonProduct, + ValidateAmazonProductOptions, + ValidateAppleProduct, + ValidateAppleProductOptions, + ValidateGoogleProduct, + ValidateGoogleProductOptions +} from "./client/apis/BillingAPI"; +export type { + FavoriteAsset, + FavoriteAssetOptions, + FavoriteBundle, + FavoriteBundleOptions, + GetAppStoreExclusiveBundles, + GetAppStoreExclusiveBundlesOptions, + GetAssetBundles, + GetAssetBundlesOptions, + GetAssetFavoriteCount, + GetAssetFavoriteCountOptions, + GetAssetToCategory, + GetAssetToSubCategory, + GetBundleDetails, + GetBundleDetailsOptions, + GetBundleFavoriteCount, + GetBundleFavoriteCountOptions, + GetBundleRecommendationsByBundleId, + GetBundleRecommendationsByBundleIdOptions, + GetCategories, + GetMultiBundleDetails, + GetMultiBundleDetailsOptions, + GetSelfFavoriteBundle, + GetSelfFavoriteBundleOptions, + GetSubCategories, + GetUserBundles, + GetUserBundlesByType, + GetUserBundlesByTypeOptions, + GetUserBundlesOptions, + GetUserFavoriteAsset, + GetUserFavoriteAssetOptions, + ProductDetails, + RemoveFavoriteBundle, + RemoveFavoriteBundleOptions, + RemoveSelfAssetFavorite, + RemoveSelfAssetFavoriteOptions, + UnpackBundle, + UnpackBundleOptions +} from "./client/apis/CatalogAPI"; +export type { + AddUsersToConversation, + AddUsersToConversationOptions, + GetChatSettings, + GetConversationMessages, + GetConversationMessagesOptions, + GetConversations, + GetConversationsOptions, + GetMetaData as GetChatAPIMetaData, + GetMultiLatestConversationMessages, + GetMultiLatestConversationMessagesOptions, + GetRolloutSettings, + GetRolloutSettingsOptions, + GetUnreadConversationCount, + GetUnreadMessagesInConversations, + GetUnreadMessagesInConversationsOptions, + GetUserConversations, + GetUserConversationsOptions, + MarkConversationsAsSeen, + MarkConversationsAsSeenOptions, + MarkMessageInConversationAsRead, + MarkMessageInConversationAsReadOptions, + RemoveUserFromConversation, + RemoveUserFromConversationOptions, + RenameGroupConversation, + RenameGroupConversationOptions, + ResetConversationUniverse, + ResetConversationUniverseOptions, + SendGameLinkMessage, + SendGameLinkMessageOptions, + SendMessage as SendChatMessage, + SendMessageOptions as SendChatMessageOptions, + SetConversationUniverse, + SetConversationUniverseOptions, + StartCloudEditConversation, + StartCloudEditConversationOptions, + StartGroupConversation, + StartGroupConversationOptions, + StartOneToOneConversation, + StartOneToOneConversationOptions, + UpdateUserTypingStatus, + UpdateUserTypingStatusOptions +} from "./client/apis/ChatAPI"; +export type { + GetContactsMetaData, + GetUsersTags, + GetUsersTagsOptions, + SetPendingUserTag, + SetPendingUserTagOptions, + SetUserTag, + SetUserTagOptions +} from "./client/apis/ContactsAPI"; +export type { + UploadDataOptions, + UploadDataResult +} from "./client/apis/DataAPI"; +export type { + ActivateUniverse, + ActivateUniverseOptions, + CreateDeveloperProduct, + CreateDeveloperProductOptions, + CreateUniverseAlias, + CreateUniverseAliasOptions, + DeactivateUniverse, + DeactivateUniverseOptions, + DeleteUniverseAlias, + DeleteUniverseAliasOptions, + DownloadUniverseStatisticsReportByTime, + DownloadUniverseStatisticsReportByTimeOptions, + FilterPublishGameNotification, + FilterPublishGameNotificationOptions, + GenerateUniverseStatisticReportsByTime, + GenerateUniverseStatisticReportsByTimeOptions, + GetAssetsVoteInformation, + GetAssetsVoteInformationOptions, + GetGameTemplates, + GetGameUpdatesHistory, + GetGameUpdatesHistoryOptions, + GetGroupUniverses, + GetGroupUniversesOptions, + GetNotificationsStatisticReports, + GetPlaceCompatibilities, + GetPlaceCompatibilitiesOptions, + GetPlaceStatisticsByType, + GetPlaceStatisticsByTypeOptions, + GetPluginsById, + GetPluginsByIdOptions, + GetSelfGroupsAccess, + GetSelfTeamCreateUniversesAccess, + GetSelfTeamCreateUniversesAccessOptions, + GetSelfUniverses, + GetSelfUniversesOptions, + GetStudioData, + GetStudioDataOptions, + GetUniverse, + GetUniverseConfiguration, + GetUniverseConfigurationOptions, + GetUniverseOptions, + GetUniversePermissions, + GetUniversePermissionsOptions, + GetUniversePlaces, + GetUniversePlacesOptions, + GetUniverseStatisticsReportByTime, + GetUniverseStatisticsReports, + GetUniverseStatisticsReportsByTimeOptions, + GetUniverseStatisticsReportsOptions, + GetUniverseTeamCreateSettings, + GetUniverseTeamCreateSettingsOptions, + GetUniverseVIPServersConfiguration, + GetUniverseVIPServersConfigurationOptions, + GetUsersInUniverseTeamCreate, + GetUsersInUniverseTeamCreateOptions, + MultiGetUniverses, + MultiGetUniversesOptions, + MultiGetUniversesPermissions, + MultiGetUniversesPermissionsOptions, + PublishGameNotification, + PublishGameNotificationOptions, + RemoveUserFromUniverseTeamCreate, + RemoveUserFromUniverseTeamCreateOptions, + SearchToolbox, + SearchToolboxOptions, + SearchUniverseData, + SearchUniverses, + SearchUniversesOptions, + SetStudioData, + SetStudioDataOptions, + UpdateDeveloperProduct, + UpdateDeveloperProductOptions, + UpdatePlaceConfiguration, + UpdatePlaceConfigurationOptions, + UpdatePlugin, + UpdatePluginOptions, + UpdateUniverseAlias, + UpdateUniverseAliasOptions, + UpdateUniverseConfiguration, + UpdateUniverseConfigurationOptions, + UpdateUniverseTeamCreateSettings, + UpdateUniverseTeamCreateSettingsOptions +} from "./client/apis/DevelopAPI"; +export type { + GetAssetResaleData, + GetAssetResaleDataOptions, + GetAssetResellers, + GetAssetResellersOptions, + GetDeveloperExchangeAbility, + GetDeveloperExchangeHelp, + GetDeveloperExchangeInfo, + GetDeveloperExchangeInfoOptions, + GetGroupCurrency, + GetGroupCurrencyOptions, + GetGroupRevenueSummaryInTimeFrame, + GetGroupRevenueSummaryInTimeFrameOptions, + GetGroupTransactions, + GetGroupTransactionsOptions, + GetResaleTaxRate, + GetSelfCurrency, + GetSelfCurrencyOptions, + GetSelfRevenueSummaryInTimeFrame, + GetSelfRevenueSummaryInTimeFrameOptions, + GetSelfTransactions, + GetSelfTransactionsOptions, + GetUserResellableAssetCopies, + GetUserResellableAssetCopiesOptions, + SetAssetCopies, + SetAssetCopiesOptions, + SubmitDeveloperExchange, + SubmitDeveloperExchangeOptions +} from "./client/apis/EconomyAPI"; +export type { + GetUniverseStats, + GetUniverseStatsOptions +} from "./client/apis/EconomyCreatorStatsAPI"; +export type { + GetUniversePayoutHistory, + GetUniversePayoutHistoryOptions +} from "./client/apis/EngagementPayoutsAPI"; +export type { + FollowUniverse, + FollowUniverseOptions, + GetUserFollowedUniverses, + GetUserFollowedUniversesOptions, + GetUserFollowingUniverseStatus, + GetUserFollowingUniverseStatusOptions, + UnFollowUniverse, + UnFollowUniverseOptions +} from "./client/apis/FollowingsAPI"; +export type { + CheckSessionHealth, + DeclineAllFriendRequests, + DeleteQRCodeSession, + DeleteSession, + FindFriendByCode, + FindFriendByCodeOptions, + FollowUser as FriendsAPIFollowUser, + FollowUserOptions as FriendsAPIFollowUserOptions, + GetMetaData, + GetMetaDataOptions, + GetOrCreateNearbySession, + GetOrCreateQRCodeSession, + GetSelfFriendRequests, + GetSelfFriendRequestsCount, + GetSelfFriendRequestsOptions, + GetSelfFriendsCount, + GetSelfRecommendedUsers, + GetUserFollowers, + GetUserFollowersCount, + GetUserFollowersCountOptions, + GetUserFollowersOptions, + GetUserFollowing, + GetUserFollowingCount, + GetUserFollowingCountOptions, + GetUserFollowingOptions, + GetUserFriends as FriendsAPIGetUserFriends, + GetUserFriendsOptions as FriendsAPIGetUserFriendsOptions, + GetUserFriendsWithStatuses, + GetUserFriendsWithStatusesOptions, + GetUserOnlineFriends, + GetUserOnlineFriendsOptions, + RedeemNearbyFriendCode, + RedeemNearbyFriendCodeOptions, + RedeemQRCode, + RedeemQRCodeOptions, + SendFriendRequest as FriendsAPISendFriendRequest, + SendFriendRequestOptions as FriendsAPISendFriendRequestOptions, + UnFollowUser, + UnFollowUserOptions, + UnfriendUser as FriendsAPIUnfriendUser, + UnfriendUserOptions as FriendsAPIUnfriendUserOptions +} from "./client/apis/FriendsAPI"; +export type { + GetGameAutomaticTranslationResults, + GetGameAutomaticTranslationResultsOptions, + GetGameInfo, + GetGameInfoHistory, + GetGameInfoHistoryOptions, + GetGameInfoOptions, + GetGameSourceLanguage, + GetGameSourceLanguageOptions, + GetGameSupportedLanguages, + GetGameSupportedLanguagesOptions, + GetNameDescriptionMetaData, + GetSupportedLanguagesMetaData, + ModifyGameSupportedLanguages, + ModifyGameSupportedLanguagesOptions, + ToggleAutomaticGameTranslation, + ToggleAutomaticGameTranslationOptions, + UpdateGameInfo, + UpdateGameInfoOptions, + UpdateGameSourceLanguage, + UpdateGameSourceLanguageOptions +} from "./client/apis/GameInternationalizationAPI"; +export type { + CanSelfInviteUserToVIPServer, + CanSelfInviteUserToVIPServerOptions, + CreateVIPServer, + CreateVIPServerOptions, + GameGamesProductInfo, + GameServer, + GetGameFavoriteCount, + GetGameFavoriteCountOptions, + GetGameGamePasses, + GetGameGamePassesOptions, + GetGameRecommendationsByAlgorithm, + GetGameRecommendationsByAlgorithmOptions, + GetGameRecommendationsByGame, + GetGameRecommendationsByGameOptions, + GetGameServersByType, + GetGameServersByTypeOptions, + GetGameSorts, + GetGameSortsOptions, + GetGameUniverses, + GetGameUniversesOptions, + GetGamesProductInfoOptions, + GetGamesVotes, + GetGamesVotesOptions, + GetSelfUniverseVoteStatus, + GetSelfUniverseVoteStatusOptions, + GetVIPServer, + GetVIPServerOptions, + IsGameFavorited, + IsGameFavoritedOptions, + ListGames, + ListGamesOptions, + MultiGetGameUniversesPlayability, + MultiGetGameUniversesPlayabilityOptions, + MultiGetPlaces, + MultiGetPlacesOptions, + SetSelfGameVote, + SetSelfGameVoteOptions, + ToggleGameFavorite, + ToggleGameFavoriteOptions, + UpdateVIPServer, + UpdateVIPServerOptions, + UpdateVIPServerPermissions, + UpdateVIPServerPermissionsOptions, + UpdateVIPServerSubscription, + UpdateVIPServerSubscriptionOptions +} from "./client/apis/GamesAPI"; +export type { + AcceptFriendRequest, + AcceptFriendRequestOptions, + AwardBadge, + AwardBadgeOptions, + BlockUser, + BlockUserOptions, + DeclineFriendRequest, + DeclineFriendRequestOptions, + FollowUser, + FollowUserOptions, + GetAssetVersionOptions, + GetAssetVersions, + GetBalance, + GetDeviceInfo, + GetGamePassProductInfo, + GetGamePassProductInfoOptions, + GetGroup as GeneralAPIGetGroup, + GetGroupAllies, + GetGroupAlliesOptions, + GetGroupEnemies, + GetGroupEnemiesOptions, + GetGroupOptions as GeneralAPIGetGroupOptions, + GetIncomingItems, + GetProductInfo, + GetProductInfoOptions, + GetUserById as GeneralAPIGetUserById, + GetUserByIdOptions as GeneralAPIGetUserByIdOptions, + GetUserByUsername, + GetUserByUsernameOptions, + GetUserFriends, + GetUserFriendsCount, + GetUserFriendsCountOptions, + GetUserFriendsOptions, + GetUserGroups as GeneralAPIGetUserGroups, + GetUserGroupsOptions as GeneralAPIGetUserGroupsOptions, + IsUserFollowing, + IsUserFollowingOptions, + SendFriendRequest, + SendFriendRequestOptions, + UnblockUser, + UnblockUserOptions, + UnfollowUser, + UnfollowUserOptions, + UnfriendUser, + UnfriendUserOptions, + UserCanManageAsset, + UserCanManageAssetOptions, + UserOwnsAsset, + UserOwnsAssetOptions +} from "./client/apis/GeneralAPI"; +export type { + AcceptJoinRequest, + AcceptJoinRequestOptions, + AcceptJoinRequests, + AcceptJoinRequestsOptions, + AcceptRelationshipRequest, + AcceptRelationshipRequestOptions, + AcceptRelationshipRequests, + AcceptRelationshipRequestsOptions, + ChangeOwner, + ChangeOwnerOptions, + ClaimGroup, + ClaimGroupOptions, + CreateGroup, + CreateGroupOptions, + CreateRelationship, + CreateRelationshipOptions, + CreateRole, + CreateRoleOptions, + CreateWallPost, + CreateWallPostOptions, + DeclineJoinRequest, + DeclineJoinRequestOptions, + DeclineJoinRequests, + DeclineJoinRequestsOptions, + DeclineRelationshipRequest, + DeclineRelationshipRequestOptions, + DeclineRelationshipRequests, + DeclineRelationshipRequestsOptions, + DeleteRelationship, + DeleteRelationshipOptions, + DeleteRole, + DeleteRoleOptions, + DeleteSocialLink, + DeleteSocialLinkOptions, + DeleteWallPost, + DeleteWallPostOptions, + DeleteWallPostsByUser, + DeleteWallPostsByUserOptions, + GetAllRolesPermissions, + GetAllRolesPermissionsOptions, + GetGroup, + GetGroupAuditLogs, + GetGroupAuditLogsOptions, + GetGroupConfigurationMetaData, + GetGroupOptions, + GetGroupPayouts, + GetGroupPayoutsOptions, + GetGroupRelationships, + GetGroupRelationshipsOptions, + GetGroupRoles, + GetGroupRolesOptions, + GetGroupSearchMetaData, + GetGroupSettings, + GetGroupSettingsOptions, + GetGroupsMetaData, + GetGuestPermissions, + GetGuestPermissionsOptions, + GetJoinRequest, + GetJoinRequestOptions, + GetJoinRequests, + GetJoinRequestsOptions, + GetMembers, + GetMembersOptions, + GetMembersWithRole, + GetMembersWithRoleOptions, + GetMultiGroups, + GetMultiGroupsOptions, + GetRelationshipRequests, + GetRelationshipRequestsOptions, + GetRolePermissions, + GetRolePermissionsOptions, + GetRolesByIds, + GetRolesByIdsOptions, + GetSelfGroupMembership, + GetSelfGroupMembershipOptions, + GetSelfPendingGroupJoins, + GetSocialLinks, + GetSocialLinksOptions, + GetUserGroups, + GetUserGroupsOptions, + GetUserPrimaryGroup, + GetUserPrimaryGroupOptions, + GetWallPosts, + GetWallPostsOptions, + JoinGroup, + JoinGroupOptions, + KickMember, + KickMemberOptions, + PayoutMembers, + PayoutMembersOptions, + PostSocialLink, + PostSocialLinkOptions, + RemovePrimaryGroup, + SearchGroups, + SearchGroupsByKeyword, + SearchGroupsByKeywordOptions, + SearchGroupsOptions, + SetPrimaryGroup, + SetPrimaryGroupOptions, + UpdateGroupDescription, + UpdateGroupDescriptionOptions, + UpdateGroupIcon, + UpdateGroupIconOptions, + UpdateGroupSettings, + UpdateGroupSettingsOptions, + UpdateGroupStatus, + UpdateGroupStatusOptions, + UpdateMember, + UpdateMemberOptions, + UpdateRecurringPayouts, + UpdateRecurringPayoutsOptions, + UpdateRole, + UpdateRoleOptions, + UpdateRolePermissions, + UpdateRolePermissionsOptions, + UpdateSocialLink, + UpdateSocialLinkOptions +} from "./client/apis/GroupsAPI"; +export type { + GetAssetOwners, + GetAssetOwnersOptions, + GetPackageAssets, + GetPackageAssetsOptions, + GetUserCollectibles, + GetUserCollectiblesOptions, + GetUserInventory, + GetUserInventoryByAssetTypeId, + GetUserInventoryByAssetTypeIdOptions, + GetUserInventoryOptions, + GetUserItemsByTypeAndTargetId, + GetUserItemsByTypeAndTargetIdOptions +} from "./client/apis/InventoryAPI"; +export type { + CreateItemTag, + CreateItemTagOptions, + DeleteItemTag, + DeleteItemTagOptions, + GetCreatedAssets, + GetCreatedAssetsOptions, + GetItemTagsByItemIds, + GetItemTagsByItemIdsOptions, + GetItemTagsMetaData, + GetMultiCreatedAssetDetails, + GetMultiCreatedAssetDetailsOptions, + GetTagsByTagIds, + GetTagsByTagIdsOptions, + SearchTags, + SearchTagsOptions +} from "./client/apis/ItemConfigurationAPI"; +export type { + GetCountryRegions, + GetCountryRegionsOptions, + GetLocales, + GetLocalesOptions, + GetLocusSupportedLocales, + GetSupportedLocales, + GetUserLocale, + SetUserLocale, + SetUserLocaleOptions +} from "./client/apis/LocaleAPI"; +export type { + GetThumbnailsMetaData, + RecordBundleLoad, + RecordBundleLoadOptions, + RecordThumbnailLoad, + RecordThumbnailLoadOptions +} from "./client/apis/MetricsAPI"; +export type { + AllowNotificationSource, + AllowNotificationSourceOptions, + AllowNotificationsDestination, + AllowNotificationsDestinationOptions, + ClearUnreadStreamNotifications, + DeregisterAllDevices, + DeregisterCurrentDevice, + DisallowNotificationSource, + DisallowNotificationSourceOptions, + DisallowNotificationsDestination, + DisallowNotificationsDestinationOptions, + GetChromeNotificationsManifest, + GetCurrentNotificationDeviceDestination, + GetLatestUniverseUpdates, + GetLatestUniversesUpdatesOptions, + GetNotificationDestinations, + GetNotificationIds, + GetNotificationIdsOptions, + GetNotificationsMetaData, + GetNotificationsMetaDataOptions, + GetNotificationsSettings, + GetRealtimeNotificationsSettings, + GetRecentStreamNotifications, + GetRecentStreamNotificationsOptions, + GetStreamNotificationsMetaData, + GetStreamNotificationsPromptSettings, + GetStreamNotificationsUnreadCount, + MarkNotificationCategoryRead, + MarkNotificationCategoryReadOptions, + MarkNotificationInteraction, + MarkNotificationInteractionOptions, + MarkNotificationRead, + MarkNotificationReadOptions, + MarkStreamNotificationInteracted, + MarkStreamNotificationInteractedOptions, + RegisterAmazonAndroid, + RegisterAmazonAndroidOptions, + RegisterAndroidNative, + RegisterAndroidNativeOptions, + RegisterAndroidTencentService, + RegisterAndroidTencentServiceOptions, + RegisterChrome, + RegisterChromeOptions, + RegisterFirefox, + RegisterFirefoxOptions, + RegisterIOSNative, + RegisterIOSNativeOptions, + SendGameUpdateNotificationInteracted, + SendGameUpdateNotificationInteractedOptions, + SendGameUpdateNotificationRead, + SendGameUpdateNotificationReadOptions, + SuppressStreamNotificationsPrompt, + UpdateNotificationDestinationSettings, + UpdateNotificationDestinationSettingsOptions, + UpdateNotificationSettings, + UpdateNotificationSettingsOptions +} from "./client/apis/NotificationsAPI"; +export type { + GetUserProfileHeader, + GetUserProfileHeaderOptions +} from "./client/apis/OtherAPI"; +export type { + PremiumUpsellCheck, + PremiumUpsellCheckOptions, + ValidateUserMembership, + ValidateUserMembershipOptions +} from "./client/apis/PremiumFeaturesAPI"; +export type { + GetUsersPresences, + GetUsersPresencesOptions, + RegisterAppPresence, + RegisterAppPresenceOptions +} from "./client/apis/PresenceAPI"; +export type { + ArchiveMessages, + ArchiveMessagesOptions, + GetAnnouncements, + GetAnnouncementsMetaData, + GetMessage, + GetMessageOptions, + GetMessages, + GetMessagesOptions, + GetUnreadMessagesCount, + MarkMessagesRead, + MarkMessagesReadOptions, + MarkMessagesUnread, + MarkMessagesUnreadOptions, + SendMessage, + SendMessageOptions, + UnArchiveMessages, + UnArchiveMessagesOptions +} from "./client/apis/PrivateMessagesAPI"; +export type { + PublishAudio, + PublishAudioOptions, + PublishBadgeIcon, + PublishBadgeIconOptions, + PublishGamePassIcon, + PublishGamePassIconOptions, + UploadAssets, + UploadAssetsOptions, + UploadGameThumbnail, + UploadGameThumbnailOptions, + UploadPluginIcon, + UploadPluginIconOptions, + VerifyAudio, + VerifyAudioOptions +} from "./client/apis/PublishAPI"; +export type { + GetAssetsThumbnails, + GetAssetsThumbnailsOptions, + GetBadgesIcons, + GetBadgesIconsOptions, + GetBatchImages, + GetBatchImagesOptions, + GetBundlesThumbnails, + GetBundlesThumbnailsOptions, + GetDeveloperProductsIcons, + GetDeveloperProductsIconsOptions, + GetGamePassesIcons, + GetGamePassesIconsOptions, + GetGroupsIcons, + GetGroupsIconsOptions, + GetUniverseThumbnails, + GetUniverseThumbnailsOptions, + GetUniversesRootPlaceThumbnails, + GetUniversesRootPlaceThumbnailsOptions, + GetUniversesThumbnails, + GetUniversesThumbnailsOptions, + GetUsersAvatarBustImages, + GetUsersAvatarBustImagesOptions, + GetUsersAvatarHeadShotsImages, + GetUsersAvatarHeadShotsImagesOptions, + GetUsersFullBodyAvatarImages, + GetUsersFullBodyAvatarImagesOptions, + GetUsersOutfitsImages, + GetUsersOutfitsImagesOptions +} from "./client/apis/ThumbnailsAPI"; +export type { + AcceptTrade, + AcceptTradeOptions, + CanSelfTradeWithUser, + CanSelfTradeWithUserOptions, + CounterTrade, + CounterTradeOptions, + DeclineTrade, + DeclineTradeOptions, + GetTrade, + GetTradeOptions, + GetTradesByStatusType, + GetTradesByStatusTypeOptions, + GetTradesCountByStatusType, + GetTradesCountByStatusTypeOptions, + GetTradesMetaData, + SendTrade, + SendTradeOptions +} from "./client/apis/TradesAPI"; +export type { + GetGameRoleAssignees, + GetGameRoleAssigneesOptions, + GetSelfGameRoles, + GetSelfGameRolesOptions, + GetSelfGamesAccessByRole, + GetSelfGamesAccessByRoleOptions, + UpdateUser, + UpdateUserAccess +} from "./client/apis/TranslationRolesAPI"; +export type { + AuthenticatorDisable, + AuthenticatorDisableOptions, + AuthenticatorEnable, + AuthenticatorEnableOptions, + AuthenticatorVerify, + AuthenticatorVerifyOptions, + AuthenticatorVerifySetup, + AuthenticatorVerifySetupOptions, + EmailDisable, + EmailDisableOptions, + EmailEnable, + EmailEnableOptions, + EmailSendCode, + EmailSendCodeOptions, + EmailVerify, + EmailVerifyOptions, + GetTwoStepConfiguration, + GetTwoStepConfigurationOptions, + GetTwoStepVerificationMetaData, + GetTwoStepVerificationMetaDataOptions +} from "./client/apis/TwoStepVerificationAPI"; +export type { + GetSelfAuthenticatedUserInformation, + GetUserById, + GetUserByIdOptions, + GetUserStatus, + GetUserStatusOptions, + GetUsersByUserIds, + GetUsersByUserIdsOptions, + GetUsersByUsernames, + GetUsersByUsernamesOptions, + SearchUsers, + SearchUsersOptions, + SetSelfDisplayName, + SetSelfDisplayNameOptions, + UpdateSelfStatus, + UpdateSelfStatusOptions, + ValidateDisplayNameExistingUser, + ValidateDisplayNameExistingUserOptions, + ValidateDisplayNameNewUser, + ValidateDisplayNameNewUserOptions +} from "./client/apis/UsersAPI"; From 0fff13432ca3ab3c50ae8f5abed8b7823a36e8c2 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 08:15:00 +0100 Subject: [PATCH 06/24] Fix CircleCI errors (npm run eslint) --- .../lib/DataStoreManager/structures/GenericDataStore.ts | 6 +++--- .../lib/DataStoreManager/structures/GlobalDataStore.ts | 2 +- .../lib/DataStoreManager/structures/OrderedDataStore.ts | 2 +- .../DataStoreManager/structures/OrderedDataStorePage.ts | 2 +- src/controllers/rest/response/RESTResponse.ts | 7 ++++--- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts index 3baf15f3e..ecc334cfc 100644 --- a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts @@ -14,7 +14,7 @@ type DataStoreKey = { }; type DataStoreValue = string; -export default class GenericDataStore { +export default class GenericDataStore { public manager: DataStoreManager; public name: string; public scope: string; @@ -109,7 +109,7 @@ export default class GenericDataStore { return `${this.baseAPIUrl}increment?${encodedQueryString}`; } - public parseRetrievedData (data: string): [boolean, Result | any] { + public parseRetrievedData (data: string): [boolean, Result | any] { let result = ""; if (data.length === 0) { @@ -240,7 +240,7 @@ export default class GenericDataStore { if (this.advanced.parseData) { return this.advanced.parseData(data); } else { - return data as DataType; + return (data as unknown) as DataType; } } diff --git a/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts b/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts index db21ee948..8b1149cfb 100644 --- a/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts @@ -2,7 +2,7 @@ import GenericDataStore from "./GenericDataStore"; import DataStoreManager from "../DataStoreManager"; -export default class GlobalDataStore extends GenericDataStore { +export default class GlobalDataStore extends GenericDataStore { constructor (manager: DataStoreManager, placeId: number, name: string, scope?: string, legacy?: boolean) { super(manager, "GlobalDataStore", placeId, name, scope || null, legacy || false); } diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts index 7ea3f1ad7..465894708 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts @@ -22,7 +22,7 @@ export type OrderedDataStoreResultType = { } }; -export default class OrderedDataStore extends GenericDataStore { +export default class OrderedDataStore extends GenericDataStore { constructor (manager: DataStoreManager, placeId: number, name: string, scope?: string, legacy?: boolean) { super(manager, "OrderedDataStore", placeId, name, scope || null, legacy || false); } diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts index f35203316..87d20b95e 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts @@ -1,7 +1,7 @@ import OrderedDataStore, { GetSortedUrlOptions, OrderedDataStoreResultType } from "./OrderedDataStore"; -export default class OrderedDataStorePage { +export default class OrderedDataStorePage { public orderedDataStore: OrderedDataStore; public options: GetSortedUrlOptions; public data: { key: string; value: number }[]; diff --git a/src/controllers/rest/response/RESTResponse.ts b/src/controllers/rest/response/RESTResponse.ts index 33dcfae0b..effd7b215 100644 --- a/src/controllers/rest/response/RESTResponse.ts +++ b/src/controllers/rest/response/RESTResponse.ts @@ -17,14 +17,15 @@ export default class RESTResponse { this.responseData = responseData; } + // eslint-disable-next-line require-await async process (): Promise { const allProcessed = this.controller.responseHandlers.map(handler => handler(this)); if (allProcessed.every(processed => processed === true)) { return this.responseData; } else { - const error = allProcessed.find(error => error instanceof BloxyHttpError && error.name === - "BloxyInvalidStatusMessageError" && error.statusMessage.includes("Token Validation Failed")); + const error = allProcessed.find(err => err instanceof BloxyHttpError && err.name === + "BloxyInvalidStatusMessageError" && err.statusMessage.includes("Token Validation Failed")); if (error) { // 1 attempt = 0 retries @@ -36,7 +37,7 @@ export default class RESTResponse { } } - throw allProcessed.find(error => error instanceof Error); + throw allProcessed.find(err => err instanceof Error); } } } From b8eb2a849f89addf5143cc420298f5f1c7060368 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Fri, 7 Jan 2022 22:10:03 +0100 Subject: [PATCH 07/24] Use `got` as http package again --- package-lock.json | 22438 ++++++++++----------- package.json | 141 +- src/controllers/rest/lib/getRequester.ts | 4 +- 3 files changed, 11237 insertions(+), 11346 deletions(-) diff --git a/package-lock.json b/package-lock.json index f52d6e4b0..8729b4cfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11313 +1,11203 @@ { - "name": "bloxy", - "version": "6.0.0-alpha", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "bloxy", - "version": "6.0.0-alpha", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1", - "signalr-client": "0.0.20", - "tough-cookie": "^4.0.0", - "tslib": "^2.1.0" - }, - "devDependencies": { - "@types/debug": "^4.1.5", - "@types/lodash": "^4.14.167", - "@types/node": "^16.11.19", - "@types/tough-cookie": "^4.0.0", - "@types/websocket": "^1.0.1", - "@typescript-eslint/eslint-plugin": "^5.9.0", - "@typescript-eslint/parser": "^5.9.0", - "codacy-coverage": "^3.4.0", - "eslint": "^8.6.0", - "eslint-plugin-security": "^1.4.0", - "faker": "^5.1.0", - "fast-check": "^2.13.0", - "got": "^12.0.0", - "jest": "^27.4.7", - "joi": "^17.3.0", - "typedoc": "^0.22.10", - "typedoc-plugin-markdown": "^3.5.0", - "typedoc-plugin-markdown-pages": "^0.3.0", - "typescript": "^4.1.3" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", - "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", - "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.6", - "@jest/reporters": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.7", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-resolve-dependencies": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "jest-watcher": "^27.4.6", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", - "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", - "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", - "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/types": "^27.4.2", - "expect": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", - "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", - "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", - "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-runtime": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", - "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", - "dev": true - }, - "node_modules/@types/websocket": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", - "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", - "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.9.0", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/type-utils": "5.9.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", - "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", - "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", - "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.9.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.9.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", - "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/cacheable-lookup": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", - "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/codacy-coverage": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", - "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", - "deprecated": "Package being deprecated in favor of https://github.com/codacy/codacy-coverage-reporter", - "dev": true, - "dependencies": { - "bluebird": "^3.5.x", - "commander": "^2.x", - "jacoco-parse": "^2.x", - "joi": "^13.x", - "lcov-parse": "^1.x", - "lodash": "^4.17.4", - "log-driver": "^1.x", - "request": "^2.88.0", - "request-promise": "^4.x" - }, - "bin": { - "codacy-coverage": "bin/codacy-coverage.js" - }, - "engines": { - "node": ">= 8.12.0" - } - }, - "node_modules/codacy-coverage/node_modules/joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "dependencies": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", - "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "dependencies": { - "safe-regex": "^1.1.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", - "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", - "dev": true - }, - "node_modules/fast-check": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", - "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", - "dev": true, - "dependencies": { - "pure-rand": "^5.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.0.0.tgz", - "integrity": "sha512-gNNNghQ1yw0hyzie1FLK6gY90BQlXU9zSByyRygnbomHPruKQ6hAKKbpO1RfNZp8b+qNzNipGeRG3tUelKcVsA==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.2.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.9", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.10.tgz", - "integrity": "sha512-QHgsdYkieKp+6JbXP25P+tepqiHYd+FVnDwXpxi/BlUcoIB0nsmTOymTNvETuTO+pDuwcSklPE72VR3DqV+Haw==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "dependencies": { - "punycode": "2.x.x" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jacoco-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", - "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", - "dev": true, - "dependencies": { - "mocha": "^5.2.0", - "xml2js": "^0.4.9" - } - }, - "node_modules/jest": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", - "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.4.7", - "import-local": "^3.0.2", - "jest-cli": "^27.4.7" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", - "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", - "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", - "dev": true, - "dependencies": { - "@jest/core": "^27.4.7", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.7", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", - "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.4.6", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.6", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.6", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", - "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", - "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", - "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", - "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", - "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", - "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", - "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", - "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", - "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", - "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", - "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", - "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", - "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.6", - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-haste-map": "^27.4.6", - "jest-leak-detector": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", - "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/globals": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", - "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.4.6", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", - "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "leven": "^3.1.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", - "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.4.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true, - "bin": { - "lcov-parse": "bin/cli.js" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true, - "engines": { - "node": ">=0.8.6" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marked": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", - "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/mocha/node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-format": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", - "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", - "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "name": "bloxy", + "version": "6.0.0-alpha", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "bloxy", + "version": "6.0.0-alpha", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "got": "^11.8.3", + "signalr-client": "0.0.20", + "tough-cookie": "^4.0.0", + "tslib": "^2.1.0" + }, + "devDependencies": { + "@types/debug": "^4.1.5", + "@types/lodash": "^4.14.167", + "@types/node": "^16.11.19", + "@types/tough-cookie": "^4.0.0", + "@types/websocket": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "codacy-coverage": "^3.4.0", + "eslint": "^8.6.0", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "fast-check": "^2.13.0", + "jest": "^27.4.7", + "joi": "^17.3.0", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.5.0", + "typedoc-plugin-markdown-pages": "^0.3.0", + "typescript": "^4.1.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", + "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", + "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.6", + "@jest/reporters": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.7", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-resolve-dependencies": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "jest-watcher": "^27.4.6", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", + "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", + "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", + "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/types": "^27.4.2", + "expect": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", + "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/source-map": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", + "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", + "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.4.6", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-runtime": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", + "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" + }, + "node_modules/@types/prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "dev": true + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", + "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", + "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/codacy-coverage": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", + "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", + "deprecated": "Package being deprecated in favor of https://github.com/codacy/codacy-coverage-reporter", + "dev": true, + "dependencies": { + "bluebird": "^3.5.x", + "commander": "^2.x", + "jacoco-parse": "^2.x", + "joi": "^13.x", + "lcov-parse": "^1.x", + "lodash": "^4.17.4", + "log-driver": "^1.x", + "request": "^2.88.0", + "request-promise": "^4.x" + }, + "bin": { + "codacy-coverage": "bin/codacy-coverage.js" + }, + "engines": { + "node": ">= 8.12.0" + } + }, + "node_modules/codacy-coverage/node_modules/joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "dependencies": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "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", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-security": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", + "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "dev": true, + "dependencies": { + "safe-regex": "^1.1.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", + "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "node_modules/fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "dependencies": { + "pure-rand": "^5.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "11.8.3", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", + "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "dependencies": { + "punycode": "2.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jacoco-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", + "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", + "dev": true, + "dependencies": { + "mocha": "^5.2.0", + "xml2js": "^0.4.9" + } + }, + "node_modules/jest": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", + "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.4.7", + "import-local": "^3.0.2", + "jest-cli": "^27.4.7" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", + "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", + "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.4.7", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.7", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", + "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.4.6", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.6", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.4.6", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", + "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", + "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", + "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", + "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", + "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", + "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", + "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", + "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", + "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", + "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", + "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", + "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", + "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.6", + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-haste-map": "^27.4.6", + "jest-leak-detector": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", + "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/globals": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", + "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.4.6", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.4.6", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", + "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "leven": "^3.1.0", + "pretty-format": "^27.4.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", + "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.4.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true, + "bin": { + "lcov-parse": "bin/cli.js" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true, + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marked": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "node_modules/mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "dependencies": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/mocha/node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", + "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", + "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/signalr-client": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", + "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", + "deprecated": "This is no longer active", + "dependencies": { + "websocket": "^1.0.28" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dev": true, + "dependencies": { + "hoek": "6.x.x" + } + }, + "node_modules/topo/node_modules/hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", + "dev": true, + "dependencies": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.22.0" + } + }, + "node_modules/typedoc-plugin-markdown-pages": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", + "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "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": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", - "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/signalr-client": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", - "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", - "deprecated": "This is no longer active", - "dependencies": { - "websocket": "^1.0.28" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dev": true, - "dependencies": { - "hoek": "6.x.x" - } - }, - "node_modules/topo/node_modules/hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dev": true - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typedoc": { - "version": "0.22.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", - "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", - "dev": true, - "dependencies": { - "glob": "^7.2.0", - "lunr": "^2.3.9", - "marked": "^3.0.8", - "minimatch": "^3.0.4", - "shiki": "^0.9.12" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 12.10.0" - }, - "peerDependencies": { - "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x" - } - }, - "node_modules/typedoc-plugin-markdown": { - "version": "3.11.9", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", - "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", - "dev": true, - "dependencies": { - "handlebars": "^4.7.7" - }, - "peerDependencies": { - "typedoc": ">=0.22.0" - } - }, - "node_modules/typedoc-plugin-markdown-pages": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", - "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", - "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vscode-oniguruma": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", - "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "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": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", + "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", + "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", + "dev": true, + "requires": { + "@jest/console": "^27.4.6", + "@jest/reporters": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.7", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-resolve-dependencies": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "jest-watcher": "^27.4.6", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", + "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6" + } + }, + "@jest/fake-timers": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", + "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" + } + }, + "@jest/globals": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", + "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/types": "^27.4.2", + "expect": "^27.4.6" + } + }, + "@jest/reporters": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", + "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", + "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", + "dev": true, + "requires": { + "@jest/console": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", + "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", + "dev": true, + "requires": { + "@jest/test-result": "^27.4.6", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-runtime": "^27.4.6" + } + }, + "@jest/transform": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", + "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/node": { + "version": "16.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" + }, + "@types/prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true + }, + "@types/websocket": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", + "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-jest": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", + "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", + "dev": true, + "requires": { + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "bufferutil": { - "optional": true + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "codacy-coverage": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", + "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.x", + "commander": "^2.x", + "jacoco-parse": "^2.x", + "joi": "^13.x", + "lcov-parse": "^1.x", + "lodash": "^4.17.4", + "log-driver": "^1.x", + "request": "^2.88.0", + "request-promise": "^4.x" + }, + "dependencies": { + "joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "dev": true, + "requires": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + } + } + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "dev": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-plugin-security": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", + "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "dev": true, + "requires": { + "safe-regex": "^1.1.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expect": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", + "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "requires": { + "pure-rand": "^5.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "got": { + "version": "11.8.3", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", + "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "requires": { + "punycode": "2.x.x" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jacoco-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", + "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", + "dev": true, + "requires": { + "mocha": "^5.2.0", + "xml2js": "^0.4.9" + } + }, + "jest": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", + "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", + "dev": true, + "requires": { + "@jest/core": "^27.4.7", + "import-local": "^3.0.2", + "jest-cli": "^27.4.7" + } + }, + "jest-changed-files": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", + "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", + "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", + "dev": true, + "requires": { + "@jest/core": "^27.4.7", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.7", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-config": { + "version": "27.4.7", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", + "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.4.6", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.6", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.4.6", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-runner": "^27.4.6", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0" + } + }, + "jest-diff": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", + "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + } + }, + "jest-docblock": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", + "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6" + } + }, + "jest-environment-jsdom": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", + "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", + "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.6", + "jest-util": "^27.4.2" + } + }, + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "jest-haste-map": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", + "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", + "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.4.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.6", + "throat": "^6.0.1" + } + }, + "jest-leak-detector": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", + "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", + "dev": true, + "requires": { + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + } + }, + "jest-matcher-utils": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", + "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.6" + } + }, + "jest-message-util": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", + "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", + "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-resolve": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", + "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.6", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", + "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.6" + } + }, + "jest-runner": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", + "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", + "dev": true, + "requires": { + "@jest/console": "^27.4.6", + "@jest/environment": "^27.4.6", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.6", + "jest-environment-node": "^27.4.6", + "jest-haste-map": "^27.4.6", + "jest-leak-detector": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-resolve": "^27.4.6", + "jest-runtime": "^27.4.6", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.6", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true - }, - "@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "jest-runtime": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", + "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.6", + "@jest/fake-timers": "^27.4.6", + "@jest/globals": "^27.4.6", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.6", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-mock": "^27.4.6", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.6", + "jest-snapshot": "^27.4.6", + "jest-util": "^27.4.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "jest-snapshot": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", + "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.4.6", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.4.6", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.6", + "jest-matcher-utils": "^27.4.6", + "jest-message-util": "^27.4.6", + "jest-util": "^27.4.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.4.6", + "semver": "^7.3.2" + } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "jest-validate": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", + "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "leven": "^3.1.0", + "pretty-format": "^27.4.6" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "jest-watcher": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", + "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", + "dev": true, + "requires": { + "@jest/test-result": "^27.4.6", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.4.2", + "string-length": "^4.0.1" + } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "jest-worker": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", - "dev": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", - "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", - "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", - "dev": true, - "requires": { - "@jest/console": "^27.4.6", - "@jest/reporters": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.7", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-resolve-dependencies": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "jest-watcher": "^27.4.6", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", - "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6" - } - }, - "@jest/fake-timers": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", - "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - } - }, - "@jest/globals": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", - "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/types": "^27.4.2", - "expect": "^27.4.6" - } - }, - "@jest/reporters": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", - "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - } - }, - "@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", - "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", - "dev": true, - "requires": { - "@jest/console": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", - "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-runtime": "^27.4.6" - } - }, - "@jest/transform": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", - "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", - "dev": true - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "@types/node": { - "version": "16.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/tough-cookie": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", - "dev": true - }, - "@types/websocket": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", - "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", - "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.9.0", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/type-utils": "5.9.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", - "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", - "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", - "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.9.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-jest": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", - "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", - "dev": true, - "requires": { - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "cacheable-lookup": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", - "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "codacy-coverage": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", - "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.x", - "commander": "^2.x", - "jacoco-parse": "^2.x", - "joi": "^13.x", - "lcov-parse": "^1.x", - "lodash": "^4.17.4", - "log-driver": "^1.x", - "request": "^2.88.0", - "request-promise": "^4.x" - }, - "dependencies": { - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "dev": true, - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - } - } - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.4.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", - "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "marked": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", + "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } + "pretty-format": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", + "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "requires": { - "safe-regex": "^1.1.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true - }, - "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", - "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", - "dev": true - }, - "fast-check": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", - "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", - "dev": true, - "requires": { - "pure-rand": "^5.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "got": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.0.0.tgz", - "integrity": "sha512-gNNNghQ1yw0hyzie1FLK6gY90BQlXU9zSByyRygnbomHPruKQ6hAKKbpO1RfNZp8b+qNzNipGeRG3tUelKcVsA==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.2.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.9", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.10.tgz", - "integrity": "sha512-QHgsdYkieKp+6JbXP25P+tepqiHYd+FVnDwXpxi/BlUcoIB0nsmTOymTNvETuTO+pDuwcSklPE72VR3DqV+Haw==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jacoco-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", - "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", - "dev": true, - "requires": { - "mocha": "^5.2.0", - "xml2js": "^0.4.9" - } - }, - "jest": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", - "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", - "dev": true, - "requires": { - "@jest/core": "^27.4.7", - "import-local": "^3.0.2", - "jest-cli": "^27.4.7" - } - }, - "jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", - "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-cli": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", - "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", - "dev": true, - "requires": { - "@jest/core": "^27.4.7", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.7", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "jest-config": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", - "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.4.6", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.6", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.6", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0" - } - }, - "jest-diff": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", - "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - } - }, - "jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", - "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6" - } - }, - "jest-environment-jsdom": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", - "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", - "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - } - }, - "jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", - "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", - "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", - "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", - "dev": true, - "requires": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - } - }, - "jest-matcher-utils": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", - "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - } - }, - "jest-message-util": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", - "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", - "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", - "dev": true - }, - "jest-resolve": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", - "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", - "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.6" - } - }, - "jest-runner": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", - "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", - "dev": true, - "requires": { - "@jest/console": "^27.4.6", - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-haste-map": "^27.4.6", - "jest-leak-detector": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", - "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/globals": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", - "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.4.6", - "semver": "^7.3.2" - } - }, - "jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", - "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "leven": "^3.1.0", - "pretty-format": "^27.4.6" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", - "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.4.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "marked": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", - "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "signalr-client": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", + "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", + "requires": { + "websocket": "^1.0.28" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-format": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", - "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pure-rand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", - "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "dev": true, + "requires": { + "hoek": "6.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "dev": true + } + } }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "requires": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shiki": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", - "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", - "dev": true, - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "signalr-client": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", - "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", - "requires": { - "websocket": "^1.0.28" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "dev": true - } - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typedoc": { - "version": "0.22.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", - "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", - "dev": true, - "requires": { - "glob": "^7.2.0", - "lunr": "^2.3.9", - "marked": "^3.0.8", - "minimatch": "^3.0.4", - "shiki": "^0.9.12" - } - }, - "typedoc-plugin-markdown": { - "version": "3.11.9", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", - "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", - "dev": true, - "requires": { - "handlebars": "^4.7.7" - } - }, - "typedoc-plugin-markdown-pages": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", - "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", - "dev": true - }, - "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", - "dev": true - }, - "uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", - "dev": true, - "optional": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", - "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vscode-oniguruma": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", - "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", - "dev": true - }, - "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typedoc": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", + "dev": true, + "requires": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" + } + }, + "typedoc-plugin-markdown": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typedoc-plugin-markdown-pages": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", + "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", + "dev": true + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true + }, + "uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "optional": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "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": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "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": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } - } } diff --git a/package.json b/package.json index d039275ce..e236abe51 100644 --- a/package.json +++ b/package.json @@ -1,72 +1,73 @@ { - "name": "bloxy", - "private": false, - "version": "6.0.0-alpha", - "engines": { - "node": ">=16.0.0" - }, - "main": "./dist/index.js", - "description": "A Node.JS library for interacting with the Roblox website and its API.", - "bugs": { - "url": "https://github.com/visualizememe/bloxy/issues" - }, - "repository": { - "directory": "https://github.com", - "url": "https://github.com/visualizememe/bloxy", - "type": "github" - }, - "homepage": "https://bloxy.js.org/", - "scripts": { - "test": "jest", - "test-with-coverage": "jest --coverage && cat ./coverage/lcov.info | codacy-coverage", - "build": "tsc --skipLibCheck", - "eslint": "eslint . --ext .ts", - "prepublishOnly": "npm run build", - "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", - "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'" - }, - "types": "./dist/index.d.ts", - "keywords": [ - "roblox", - "roblox api", - "roblox group", - "roblox groups", - "bloxy", - "nodejs roblox", - "roblox nodejs", - "roblox module" - ], - "author": "VisualizeMeme", - "license": "MIT", - "devDependencies": { - "@types/debug": "^4.1.5", - "@types/lodash": "^4.14.167", - "@types/node": "^16.11.19", - "@types/tough-cookie": "^4.0.0", - "@types/websocket": "^1.0.1", - "@typescript-eslint/eslint-plugin": "^5.9.0", - "@typescript-eslint/parser": "^5.9.0", - "codacy-coverage": "^3.4.0", - "eslint": "^8.6.0", - "eslint-plugin-security": "^1.4.0", - "faker": "^5.1.0", - "fast-check": "^2.13.0", - "got": "^12.0.0", - "jest": "^27.4.7", - "joi": "^17.3.0", - "typedoc": "^0.22.10", - "typedoc-plugin-markdown": "^3.5.0", - "typedoc-plugin-markdown-pages": "^0.3.0", - "typescript": "^4.1.3" - }, - "dependencies": { - "debug": "^4.3.1", - "signalr-client": "0.0.20", - "tough-cookie": "^4.0.0", - "tslib": "^2.1.0" - }, - "jest": { - "collectCoverage": true, - "coverageDirectory": "./coverage/" - } + "name": "bloxy", + "private": false, + "version": "6.0.0-alpha", + "engines": { + "node": ">=16.0.0" + }, + "main": "./dist/index.js", + "description": "A Node.JS library for interacting with the Roblox website and its API.", + "bugs": { + "url": "https://github.com/visualizememe/bloxy/issues" + }, + "repository": { + "directory": "https://github.com", + "url": "https://github.com/visualizememe/bloxy", + "type": "github" + }, + "homepage": "https://bloxy.js.org/", + "scripts": { + "test": "jest", + "test-with-coverage": "jest --coverage && cat ./coverage/lcov.info | codacy-coverage", + "build": "tsc --skipLibCheck", + "eslint": "eslint . --ext .ts", + "prepublishOnly": "npm run build", + "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", + "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'", + "postinstall": "npm install got && echo 'The package got has been installed. You can now use the bloxy package.'" + }, + "types": "./dist/index.d.ts", + "keywords": [ + "roblox", + "roblox api", + "roblox group", + "roblox groups", + "bloxy", + "nodejs roblox", + "roblox nodejs", + "roblox module" + ], + "author": "VisualizeMeme", + "license": "MIT", + "devDependencies": { + "@types/debug": "^4.1.5", + "@types/lodash": "^4.14.167", + "@types/node": "^16.11.19", + "@types/tough-cookie": "^4.0.0", + "@types/websocket": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "codacy-coverage": "^3.4.0", + "eslint": "^8.6.0", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "fast-check": "^2.13.0", + "jest": "^27.4.7", + "joi": "^17.3.0", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.5.0", + "typedoc-plugin-markdown-pages": "^0.3.0", + "typescript": "^4.1.3" + }, + "dependencies": { + "debug": "^4.3.1", + "got": "^11.8.3", + "signalr-client": "0.0.20", + "tough-cookie": "^4.0.0", + "tslib": "^2.1.0" + }, + "jest": { + "collectCoverage": true, + "coverageDirectory": "./coverage/" + } } diff --git a/src/controllers/rest/lib/getRequester.ts b/src/controllers/rest/lib/getRequester.ts index 6833da4c3..67fa3aca3 100644 --- a/src/controllers/rest/lib/getRequester.ts +++ b/src/controllers/rest/lib/getRequester.ts @@ -1,12 +1,12 @@ import RESTController from "../RESTController"; - +import got from "got"; export default function getRequester (controller: RESTController, customRequester?: RESTController["requester"]) { if (!controller.requester && !controller.client.options.rest!.requester && customRequester === undefined) { let requester: null | any; try { - requester = require("got"); + requester = got; } catch (e) { throw new Error(`Failed to retrieve module "got" and no custom requester provided!`); } From 7da9a49fa540e859fa9d217023920c6b3a79cd67 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 01:01:52 +0100 Subject: [PATCH 08/24] Switch from Jest to Mocha, rewrite tests --- .eslintrc.json | 419 ++-- .gitignore | 4 + .prettierrc | 2 +- package-lock.json | 2080 ++++++++++++++++- package.json | 148 +- tests/apis/AccountInformationAPI.test.js | 46 - tests/apis/AccountSettingsAPI.test.js | 224 -- tests/apis/AuthAPI.test.js | 28 - tests/apis/AvatarAPI.test.js | 40 - tests/apis/BadgesAPI.test.js | 34 - tests/apis/BillingAPI.test.js | 29 - tests/apis/CatalogAPI.test.js | 122 - tests/apis/ChatAPI.test.js | 24 - tests/apis/DevelopAPI.test.js | 254 -- tests/apis/TwoStepVerification.test.js | 92 - tests/getCookie.js | 8 - tests/index.js | 19 - tests/internal/client.spec.ts | 84 + tests/internal/client/client.test.js | 99 - .../internal/client/datastoremanager.test.js | 24 - tests/internal/datastoremanager.spec.ts | 66 + tests/util.js | 1 - tests/util/schemas.js | 49 - tests/util/schemas.ts | 48 + tsconfig.json | 176 +- 25 files changed, 2526 insertions(+), 1594 deletions(-) delete mode 100644 tests/apis/AccountInformationAPI.test.js delete mode 100644 tests/apis/AccountSettingsAPI.test.js delete mode 100644 tests/apis/AuthAPI.test.js delete mode 100644 tests/apis/AvatarAPI.test.js delete mode 100644 tests/apis/BadgesAPI.test.js delete mode 100644 tests/apis/BillingAPI.test.js delete mode 100644 tests/apis/CatalogAPI.test.js delete mode 100644 tests/apis/ChatAPI.test.js delete mode 100644 tests/apis/DevelopAPI.test.js delete mode 100644 tests/apis/TwoStepVerification.test.js delete mode 100644 tests/getCookie.js delete mode 100644 tests/index.js create mode 100644 tests/internal/client.spec.ts delete mode 100644 tests/internal/client/client.test.js delete mode 100644 tests/internal/client/datastoremanager.test.js create mode 100644 tests/internal/datastoremanager.spec.ts delete mode 100644 tests/util.js delete mode 100644 tests/util/schemas.js create mode 100644 tests/util/schemas.ts diff --git a/.eslintrc.json b/.eslintrc.json index c26896f46..dee71c29b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,231 +1,194 @@ { - "root": true, - "parser": "@typescript-eslint/parser", - "env": { - "es6": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:security/recommended" + "root": true, + "parser": "@typescript-eslint/parser", + "env": { + "es6": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:security/recommended" + ], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "rules": { + "semi": ["error", "always"], + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/explicit-member-accessibility": "off", + "@typescript-eslint/prefer-interface": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/indent": ["error", 4], + "no-await-in-loop": "warn", + "no-compare-neg-zero": "error", + "no-template-curly-in-string": "error", + "no-unsafe-negation": "error", + "accessor-pairs": "warn", + "array-callback-return": "error", + "complexity": "warn", + "curly": ["error", "multi-line", "consistent"], + "dot-location": ["error", "property"], + "dot-notation": "error", + "eqeqeq": "error", + "no-empty-function": "error", + "no-floating-decimal": "error", + "no-lone-blocks": "error", + "no-multi-spaces": "error", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-new": "error", + "no-octal": "error", + "no-return-assign": "error", + "no-return-await": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-throw-literal": "error", + "no-unmodified-loop-condition": "error", + "no-unused-expressions": "error", + "no-useless-call": "error", + "no-useless-concat": "error", + "no-useless-escape": "error", + "no-useless-return": "error", + "no-void": "error", + "no-warning-comments": "warn", + "prefer-promise-reject-errors": "error", + "require-await": "warn", + "yoda": "error", + "no-label-var": "error", + "no-shadow": "off", + "no-undef-init": "error", + "callback-return": "error", + "getter-return": "off", + "handle-callback-err": "error", + "no-mixed-requires": "error", + "no-new-require": "error", + "no-path-concat": "error", + "array-bracket-spacing": "error", + "block-spacing": "error", + "brace-style": [ + "error", + "1tbs", + { + "allowSingleLine": true + } ], - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "rules": { - "semi": [ - "error", - "always" - ], - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/prefer-interface": "off", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/indent": [ - "error", - 4 - ], - "no-await-in-loop": "warn", - "no-compare-neg-zero": "error", - "no-template-curly-in-string": "error", - "no-unsafe-negation": "error", - "accessor-pairs": "warn", - "array-callback-return": "error", - "complexity": "warn", - "curly": [ - "error", - "multi-line", - "consistent" - ], - "dot-location": [ - "error", - "property" - ], - "dot-notation": "error", - "eqeqeq": "error", - "no-empty-function": "error", - "no-floating-decimal": "error", - "no-lone-blocks": "error", - "no-multi-spaces": "error", - "no-new-func": "error", - "no-new-wrappers": "error", - "no-new": "error", - "no-octal": "error", - "no-return-assign": "error", - "no-return-await": "error", - "no-self-compare": "error", - "no-sequences": "error", - "no-throw-literal": "error", - "no-unmodified-loop-condition": "error", - "no-unused-expressions": "error", - "no-useless-call": "error", - "no-useless-concat": "error", - "no-useless-escape": "error", - "no-useless-return": "error", - "no-void": "error", - "no-warning-comments": "warn", - "prefer-promise-reject-errors": "error", - "require-await": "warn", - "yoda": "error", - "no-label-var": "error", - "no-shadow": "off", - "no-undef-init": "error", - "callback-return": "error", - "getter-return": "off", - "handle-callback-err": "error", - "no-mixed-requires": "error", - "no-new-require": "error", - "no-path-concat": "error", - "array-bracket-spacing": "error", - "block-spacing": "error", - "brace-style": [ - "error", - "1tbs", - { - "allowSingleLine": true - } - ], - "capitalized-comments": [ - "error", - "always", - { - "ignoreConsecutiveComments": true - } - ], - "comma-dangle": [ - "error", - "never" - ], - "comma-spacing": "error", - "comma-style": "error", - "computed-property-spacing": "error", - "consistent-this": [ - "error", - "$this" - ], - "eol-last": "error", - "func-names": "error", - "func-name-matching": "error", - "func-style": [ - "error", - "declaration", - { - "allowArrowFunctions": true - } - ], - "indent": [ - "error", - 4, - { - "SwitchCase": 1 - } - ], - "key-spacing": "error", - "keyword-spacing": "error", - "max-depth": "error", - "max-nested-callbacks": [ - "error", - { - "max": 4 - } - ], - "max-statements-per-line": [ - "error", - { - "max": 2 - } - ], - "new-cap": "off", - "newline-per-chained-call": [ - "error", - { - "ignoreChainWithDepth": 3 - } - ], - "no-array-constructor": "error", - "no-inline-comments": "error", - "no-lonely-if": "error", - "no-mixed-operators": "error", - "no-multiple-empty-lines": [ - "error", - { - "max": 2, - "maxEOF": 1, - "maxBOF": 0 - } - ], - "no-new-object": "error", - "no-trailing-spaces": "error", - "no-unneeded-ternary": "error", - "no-whitespace-before-property": "error", - "nonblock-statement-body-position": "error", - "object-curly-spacing": [ - "error", - "always" - ], - "operator-assignment": "error", - "operator-linebreak": [ - "error", - "after" - ], - "padded-blocks": [ - "error", - "never" - ], - "quote-props": [ - "error", - "as-needed" - ], - "quotes": [ - "error", - "double", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "semi-spacing": "error", - "space-before-blocks": "error", - "space-before-function-paren": [ - "error", - { - "anonymous": "always", - "named": "always", - "asyncArrow": "always" - } - ], - "space-in-parens": "error", - "space-infix-ops": "error", - "space-unary-ops": "error", - "spaced-comment": "error", - "template-tag-spacing": "error", - "unicode-bom": "error", - "arrow-body-style": "error", - "arrow-parens": [ - "error", - "as-needed" - ], - "arrow-spacing": "error", - "no-duplicate-imports": "error", - "no-useless-computed-key": "error", - "no-useless-constructor": "error", - "prefer-arrow-callback": "error", - "prefer-numeric-literals": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "prefer-template": "error", - "rest-spread-spacing": "error", - "template-curly-spacing": "error", - "yield-star-spacing": "error" - }, - "plugins": [ - "@typescript-eslint", - "security" - ] + "capitalized-comments": [ + "error", + "always", + { + "ignoreConsecutiveComments": true + } + ], + "comma-dangle": ["error", "never"], + "comma-spacing": "error", + "comma-style": "error", + "computed-property-spacing": "error", + "consistent-this": ["error", "$this"], + "eol-last": "error", + "func-names": "error", + "func-name-matching": "error", + "func-style": [ + "error", + "declaration", + { + "allowArrowFunctions": true + } + ], + "indent": [ + "error", + 2, + { + "SwitchCase": 1 + } + ], + "key-spacing": "error", + "keyword-spacing": "error", + "max-depth": "error", + "max-nested-callbacks": [ + "error", + { + "max": 4 + } + ], + "max-statements-per-line": [ + "error", + { + "max": 2 + } + ], + "new-cap": "off", + "newline-per-chained-call": [ + "error", + { + "ignoreChainWithDepth": 3 + } + ], + "no-array-constructor": "error", + "no-inline-comments": "error", + "no-lonely-if": "error", + "no-mixed-operators": "error", + "no-multiple-empty-lines": [ + "error", + { + "max": 2, + "maxEOF": 1, + "maxBOF": 0 + } + ], + "no-new-object": "error", + "no-trailing-spaces": "error", + "no-unneeded-ternary": "error", + "no-whitespace-before-property": "error", + "nonblock-statement-body-position": "error", + "object-curly-spacing": ["error", "always"], + "operator-assignment": "error", + "operator-linebreak": ["error", "after"], + "padded-blocks": ["error", "never"], + "quote-props": ["error", "as-needed"], + "quotes": [ + "error", + "double", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ], + "semi-spacing": "error", + "space-before-blocks": "error", + "space-before-function-paren": [ + "error", + { + "anonymous": "always", + "named": "always", + "asyncArrow": "always" + } + ], + "space-in-parens": "error", + "space-infix-ops": "error", + "space-unary-ops": "error", + "spaced-comment": "error", + "template-tag-spacing": "error", + "unicode-bom": "error", + "arrow-body-style": "error", + "arrow-parens": ["error", "as-needed"], + "arrow-spacing": "error", + "no-duplicate-imports": "error", + "no-useless-computed-key": "error", + "no-useless-constructor": "error", + "prefer-arrow-callback": "error", + "prefer-numeric-literals": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "rest-spread-spacing": "error", + "template-curly-spacing": "error", + "yield-star-spacing": "error" + }, + "plugins": ["@typescript-eslint", "security"] } diff --git a/.gitignore b/.gitignore index 26ae198f1..140608d38 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ dist docs site .idea +.nyc_output + +# temporary +tests_jest \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index bdf18c214..953636624 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,4 @@ { - "tabWidth": 4, + "tabWidth": 2, "trailingComma": "none" } diff --git a/package-lock.json b/package-lock.json index 8729b4cfd..7468f162d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,13 +17,16 @@ "tslib": "^2.1.0" }, "devDependencies": { + "@types/chai": "^4.3.0", "@types/debug": "^4.1.5", "@types/lodash": "^4.14.167", + "@types/mocha": "^9.0.0", "@types/node": "^16.11.19", "@types/tough-cookie": "^4.0.0", "@types/websocket": "^1.0.1", "@typescript-eslint/eslint-plugin": "^5.9.0", "@typescript-eslint/parser": "^5.9.0", + "chai": "^4.3.4", "codacy-coverage": "^3.4.0", "eslint": "^8.6.0", "eslint-plugin-security": "^1.4.0", @@ -31,6 +34,9 @@ "fast-check": "^2.13.0", "jest": "^27.4.7", "joi": "^17.3.0", + "mocha": "^9.1.3", + "nyc": "^15.1.0", + "ts-node": "^10.4.0", "typedoc": "^0.22.10", "typedoc-plugin-markdown": "^3.5.0", "typedoc-plugin-markdown-pages": "^0.3.0", @@ -627,6 +633,27 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -1092,6 +1119,30 @@ "node": ">= 6" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/babel__core": { "version": "7.1.18", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", @@ -1144,6 +1195,12 @@ "@types/responselike": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -1211,6 +1268,12 @@ "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", "dev": true }, + "node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -1456,6 +1519,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "node_modules/abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -1526,6 +1595,19 @@ "node": ">= 6.0.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1615,6 +1697,30 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1648,6 +1754,15 @@ "node": ">=0.8" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1776,6 +1891,15 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1905,6 +2029,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1939,6 +2078,23 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1964,6 +2120,48 @@ "node": ">=10" } }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", @@ -1976,6 +2174,15 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2086,6 +2293,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2107,6 +2320,12 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2196,6 +2415,18 @@ } } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -2233,6 +2464,18 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2248,6 +2491,18 @@ "node": ">=0.10.0" } }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -2275,9 +2530,9 @@ } }, "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" @@ -2401,6 +2656,12 @@ "next-tick": "~1.0.0" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", @@ -2939,6 +3200,23 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2952,6 +3230,15 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -2971,6 +3258,19 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2994,6 +3294,26 @@ "node": ">= 6" } }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3044,6 +3364,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3245,10 +3574,35 @@ "node": ">=8" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "bin": { "he": "bin/he" @@ -3415,6 +3769,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3431,6 +3794,18 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -3491,6 +3866,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -3514,6 +3898,27 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isemail": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", @@ -3547,10 +3952,22 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -3572,6 +3989,24 @@ "semver": "bin/semver.js" } }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -3623,6 +4058,118 @@ "xml2js": "^0.4.9" } }, + "node_modules/jacoco-parse/node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "node_modules/jacoco-parse/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/jacoco-parse/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/jacoco-parse/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/jacoco-parse/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jacoco-parse/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jacoco-parse/node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/jacoco-parse/node_modules/mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "dependencies": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jacoco-parse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/jacoco-parse/node_modules/supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/jest": { "version": "27.4.7", "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", @@ -4461,6 +5008,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4476,6 +5029,22 @@ "node": ">=0.8.6" } }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -4526,6 +5095,12 @@ "semver": "bin/semver.js" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -4651,59 +5226,91 @@ "dev": true }, "node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", "growl": "1.10.5", - "he": "1.1.1", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, "node_modules/mocha/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -4715,33 +5322,84 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -4749,6 +5407,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4782,6 +5452,18 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -4826,6 +5508,155 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -4910,6 +5741,18 @@ "node": ">=8" } }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4919,6 +5762,21 @@ "node": ">=6" } }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4979,6 +5837,15 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -5059,6 +5926,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -5153,12 +6032,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -5171,6 +6071,18 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -5286,6 +6198,12 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/resolve": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", @@ -5466,6 +6384,21 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5550,6 +6483,23 @@ "source-map": "^0.6.0" } }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5819,19 +6769,78 @@ "universalify": "^0.1.2" }, "engines": { - "node": ">=6" + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, "node_modules/tslib": { @@ -6196,6 +7205,12 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -6211,6 +7226,12 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "node_modules/workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -6349,6 +7370,54 @@ "engines": { "node": ">=10" } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -6798,6 +7867,21 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -7176,6 +8260,30 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/babel__core": { "version": "7.1.18", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", @@ -7228,6 +8336,12 @@ "@types/responselike": "*" } }, + "@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -7295,6 +8409,12 @@ "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", "dev": true }, + "@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -7451,6 +8571,12 @@ "eslint-visitor-keys": "^3.0.0" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -7503,6 +8629,16 @@ "debug": "4" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -7563,6 +8699,27 @@ "picomatch": "^2.0.4" } }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -7590,6 +8747,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -7694,6 +8857,12 @@ "tweetnacl": "^0.14.3" } }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -7796,6 +8965,18 @@ } } }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7820,6 +9001,20 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7836,6 +9031,39 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", @@ -7848,6 +9076,12 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -7939,6 +9173,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7960,6 +9200,12 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8031,6 +9277,12 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -8058,6 +9310,15 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8070,6 +9331,15 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, "defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -8088,9 +9358,9 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "diff-sequences": { @@ -8189,6 +9459,12 @@ "next-tick": "~1.0.0" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", @@ -8610,6 +9886,17 @@ "to-regex-range": "^5.0.1" } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -8620,6 +9907,12 @@ "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -8636,6 +9929,16 @@ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -8653,6 +9956,12 @@ "mime-types": "^2.1.12" } }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8690,6 +9999,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -8831,10 +10146,28 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hoek": { @@ -8951,6 +10284,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -8967,6 +10306,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -9009,6 +10357,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -9026,6 +10380,18 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isemail": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", @@ -9053,6 +10419,15 @@ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, "istanbul-lib-instrument": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", @@ -9074,6 +10449,21 @@ } } }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + } + }, "istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -9114,6 +10504,95 @@ "requires": { "mocha": "^5.2.0", "xml2js": "^0.4.9" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "jest": { @@ -9776,6 +11255,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -9788,6 +11273,16 @@ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -9825,6 +11320,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -9921,49 +11422,68 @@ } }, "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", "growl": "1.10.5", - "he": "1.1.1", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -9974,26 +11494,53 @@ "path-is-absolute": "^1.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -10002,6 +11549,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10030,6 +11583,15 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -10062,6 +11624,130 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -10122,12 +11808,33 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10173,6 +11880,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -10231,6 +11944,15 @@ } } }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -10289,18 +12011,45 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -10391,6 +12140,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", @@ -10519,6 +12274,21 @@ "lru-cache": "^6.0.0" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10587,6 +12357,20 @@ "source-map": "^0.6.0" } }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -10802,6 +12586,40 @@ "punycode": "^2.1.1" } }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -11086,6 +12904,12 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -11098,6 +12922,12 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11198,6 +13028,38 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index e236abe51..4131c200f 100644 --- a/package.json +++ b/package.json @@ -1,73 +1,79 @@ { - "name": "bloxy", - "private": false, - "version": "6.0.0-alpha", - "engines": { - "node": ">=16.0.0" - }, - "main": "./dist/index.js", - "description": "A Node.JS library for interacting with the Roblox website and its API.", - "bugs": { - "url": "https://github.com/visualizememe/bloxy/issues" - }, - "repository": { - "directory": "https://github.com", - "url": "https://github.com/visualizememe/bloxy", - "type": "github" - }, - "homepage": "https://bloxy.js.org/", - "scripts": { - "test": "jest", - "test-with-coverage": "jest --coverage && cat ./coverage/lcov.info | codacy-coverage", - "build": "tsc --skipLibCheck", - "eslint": "eslint . --ext .ts", - "prepublishOnly": "npm run build", - "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", - "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'", - "postinstall": "npm install got && echo 'The package got has been installed. You can now use the bloxy package.'" - }, - "types": "./dist/index.d.ts", - "keywords": [ - "roblox", - "roblox api", - "roblox group", - "roblox groups", - "bloxy", - "nodejs roblox", - "roblox nodejs", - "roblox module" - ], - "author": "VisualizeMeme", - "license": "MIT", - "devDependencies": { - "@types/debug": "^4.1.5", - "@types/lodash": "^4.14.167", - "@types/node": "^16.11.19", - "@types/tough-cookie": "^4.0.0", - "@types/websocket": "^1.0.1", - "@typescript-eslint/eslint-plugin": "^5.9.0", - "@typescript-eslint/parser": "^5.9.0", - "codacy-coverage": "^3.4.0", - "eslint": "^8.6.0", - "eslint-plugin-security": "^1.4.0", - "faker": "^5.1.0", - "fast-check": "^2.13.0", - "jest": "^27.4.7", - "joi": "^17.3.0", - "typedoc": "^0.22.10", - "typedoc-plugin-markdown": "^3.5.0", - "typedoc-plugin-markdown-pages": "^0.3.0", - "typescript": "^4.1.3" - }, - "dependencies": { - "debug": "^4.3.1", - "got": "^11.8.3", - "signalr-client": "0.0.20", - "tough-cookie": "^4.0.0", - "tslib": "^2.1.0" - }, - "jest": { - "collectCoverage": true, - "coverageDirectory": "./coverage/" - } + "name": "bloxy", + "private": false, + "version": "6.0.0-alpha", + "engines": { + "node": ">=16.0.0" + }, + "main": "./dist/index.js", + "description": "A Node.JS library for interacting with the Roblox website and its API.", + "bugs": { + "url": "https://github.com/visualizememe/bloxy/issues" + }, + "repository": { + "directory": "https://github.com", + "url": "https://github.com/visualizememe/bloxy", + "type": "github" + }, + "homepage": "https://bloxy.js.org/", + "scripts": { + "test": "nyc mocha --require ts-node/register tests/**/*.spec.ts", + "test-with-coverage": "nyc report --reporter=text-lcov | codacy-coverage", + "build": "tsc --skipLibCheck", + "eslint": "eslint . --ext .ts", + "prepublishOnly": "npm run build", + "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", + "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'", + "postinstall": "npm install got && echo 'The package got has been installed. You can now use the bloxy package.'" + }, + "types": "./dist/index.d.ts", + "keywords": [ + "roblox", + "roblox api", + "roblox group", + "roblox groups", + "bloxy", + "nodejs roblox", + "roblox nodejs", + "roblox module" + ], + "author": "VisualizeMeme", + "license": "MIT", + "devDependencies": { + "@types/chai": "^4.3.0", + "@types/debug": "^4.1.5", + "@types/lodash": "^4.14.167", + "@types/mocha": "^9.0.0", + "@types/node": "^16.11.19", + "@types/tough-cookie": "^4.0.0", + "@types/websocket": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "chai": "^4.3.4", + "codacy-coverage": "^3.4.0", + "eslint": "^8.6.0", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "fast-check": "^2.13.0", + "jest": "^27.4.7", + "joi": "^17.3.0", + "mocha": "^9.1.3", + "nyc": "^15.1.0", + "ts-node": "^10.4.0", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.5.0", + "typedoc-plugin-markdown-pages": "^0.3.0", + "typescript": "^4.1.3" + }, + "dependencies": { + "debug": "^4.3.1", + "got": "^11.8.3", + "signalr-client": "0.0.20", + "tough-cookie": "^4.0.0", + "tslib": "^2.1.0" + }, + "jest": { + "collectCoverage": true, + "coverageDirectory": "./coverage/" + } } diff --git a/tests/apis/AccountInformationAPI.test.js b/tests/apis/AccountInformationAPI.test.js deleted file mode 100644 index 9bf519b40..000000000 --- a/tests/apis/AccountInformationAPI.test.js +++ /dev/null @@ -1,46 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const Joi = require("joi"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing AccountInformationAPI", function () { - const birthdateSchema = Joi.object({ - birthMonth: Joi.number(), - birthDay: Joi.number(), - birthYear: Joi.number() - }); - - it("should retrieve the birthdate", async function () { - const data = await client.apis.accountInformationAPI.getUserBirthdate(); - - return expect(birthdateSchema.validate(data)) - .not - .toHaveProperty("error"); - }); - - it("should update the birthdate", async function () { - return expect(client.apis.accountInformationAPI.updateUserBirthdate({ - birthDay: 1, - birthMonth: 1, - birthYear: 1990 - })) - .resolves - .not - .toThrow(); - }); -}); diff --git a/tests/apis/AccountSettingsAPI.test.js b/tests/apis/AccountSettingsAPI.test.js deleted file mode 100644 index 7cc4a80ed..000000000 --- a/tests/apis/AccountSettingsAPI.test.js +++ /dev/null @@ -1,224 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing AccountSettingsAPI", function () { - it("should return settings groups", async function () { - const data = await client.apis.accountSettingsAPI.getSettingsGroups(); - - return expect(data) - .toBeDefined(); - }); - - it("should return app chat privacy", async function () { - const appChatPrivacy = await client.apis.accountSettingsAPI.getAppChatPrivacy(); - - return expect(appChatPrivacy) - .toStrictEqual({ - appChatPrivacy: "NoOne" - }); - }); - - it("should update app chat privacy", function () { - return expect(client.apis.accountSettingsAPI.updateAppChatPrivacy({ - appChatPrivacy: "NoOne" - })) - .resolves - .not - .toThrow(); - }); - - it("should return game chat privacy", function () { - return expect(client.apis.accountSettingsAPI.getGameChatPrivacy()) - .resolves - .toStrictEqual({ - gameChatPrivacy: "AllUsers" - }); - }); - - it("should update game chat privacy", function () { - return expect(client.apis.accountSettingsAPI.updateGameChatPrivacy({ - gameChatPrivacy: "AllUsers" - })) - .resolves - .not - .toThrow(); - }); - - it("should get inventory privacy", function () { - return expect(client.apis.accountSettingsAPI.getInventoryPrivacy()) - .resolves - .toStrictEqual({ - inventoryPrivacy: "AllUsers" - }); - }); - - it("should update inventory privacy", function () { - return expect(client.apis.accountSettingsAPI.updateInventoryPrivacy({ - inventoryPrivacy: "AllUsers" - })) - .resolves - .not - .toThrow(); - }); - - it("should get user privacy", function () { - return expect(client.apis.accountSettingsAPI.getUserPrivacy()) - .resolves - .toStrictEqual({ - phoneDiscovery: "AllUsers" - }); - }); - - it("should update user privacy", function () { - return expect(client.apis.accountSettingsAPI.updateUserPrivacy({ - phoneDiscovery: "AllUsers" - })) - .resolves - .not - .rejects; - }); - - it("should get privacy settings info", function () { - return expect(client.apis.accountSettingsAPI.getUserPrivacySettingsInfo()) - .resolves - .toStrictEqual({ - isPhoneDiscoveryEnabled: false - }); - }); - - it("should get private message privacy", function () { - return expect(client.apis.accountSettingsAPI.getUserPrivateMessagePrivacy()) - .resolves - .toStrictEqual({ - privateMessagePrivacy: "All" - }); - }); - - it("should update the message privacy", function () { - return expect(client.apis.accountSettingsAPI.updateUserPrivateMessagePrivacy({ - privateMessagePrivacy: "All" - })) - .resolves - .not - .toThrow(); - }); - - it("should get email status", function () { - return expect(client.apis.accountSettingsAPI.getUserEmailStatus()) - .resolves - .toStrictEqual({ - emailAddress: "o*****************@awdrt.net", - verified: true - }); - }); - - it("should fail to send email verification (as it's verified already)", function () { - return expect(client.apis.accountSettingsAPI.sendEmailVerification()) - .rejects - .toThrow(); - }); - - it("should get website theme", function () { - return expect(client.apis.accountSettingsAPI.getWebsiteTheme()) - .resolves - .toStrictEqual({ - themeType: "Light" - }); - }); - - it("should update the website theme", function () { - return expect(client.apis.accountSettingsAPI.updateWebsiteTheme({ - themeType: "Light" - })) - .resolves - .not - .toThrow(); - }); - - it("should get website themes", function () { - return expect(client.apis.accountSettingsAPI.getWebsiteThemes()) - .resolves - .toMatchObject({ - data: ["Light", "Dark"] - }); - }); - - it("should get trade privacy", function () { - return expect(client.apis.accountSettingsAPI.getUserTradePrivacy()) - .resolves - .toStrictEqual({ - tradePrivacy: "All" - }); - }); - - it("should update the trade privacy", function () { - return expect(client.apis.accountSettingsAPI.updateUserTradePrivacy({ - tradePrivacy: "All" - })) - .rejects - .toThrowError("not have permission") - }); - - it("should get trade quality filter", function () { - return expect(client.apis.accountSettingsAPI.getUserTradeQualityFilter()) - .resolves - .toStrictEqual({ - tradeValue: "None" - }); - }); - - it("should update the trade quality filter", function () { - return expect(client.apis.accountSettingsAPI.updateUserTradeQualityFilter({ - tradeValue: "None" - })) - .rejects - .toThrowError("not have permission"); - }); - - it("should get contact upsell", function () { - return expect(client.apis.accountSettingsAPI.getContactUpsell()) - .resolves - .toStrictEqual({ - upsellScreenType: "None" - }); - }); - - it("should update contact upsell suppression", function () { - return expect(client.apis.accountSettingsAPI.updateContactUpsellSuppression({ - suppress: "None" - })) - .resolves - .not - .toThrow(); - }); - - it("should update promotion channels", function () { - return expect(client.apis.accountSettingsAPI.updateUserPromotionChannels({ - promotionChannelsVisibilityPrivacy: "AllUsers", - youtube: "https://youtube.com/a", - twitter: "@1Noobest", - twitch: "https://twitch.tv/Visualizeme", - facebook: "https://facebook.com/yes" - })) - .resolves - .not - .toThrow(); - }); - -}); diff --git a/tests/apis/AuthAPI.test.js b/tests/apis/AuthAPI.test.js deleted file mode 100644 index 5f3ed47c8..000000000 --- a/tests/apis/AuthAPI.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("test AuthAPI", function () { - it("should return password status", function () { - return expect(client.apis.authAPI.getCurrentUserPasswordStatus()) - .resolves - .toStrictEqual({ - valid: true - }) - }); -}); diff --git a/tests/apis/AvatarAPI.test.js b/tests/apis/AvatarAPI.test.js deleted file mode 100644 index 0f6767062..000000000 --- a/tests/apis/AvatarAPI.test.js +++ /dev/null @@ -1,40 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing AvatarAPI", function () { - it("should wear asset", function () { - expect(client.apis.avatarAPI.wearAssetOnAvatar({ - assetId: 102611803 - })) - .resolves - .toStrictEqual({ - success: true - }) - }); - - it("should set avatar type", function () { - expect(client.apis.avatarAPI.setSelfAvatarType({ - playerAvatarType: "R6" - })) - .resolves - .toStrictEqual({ - success: true - }) - }); -}); diff --git a/tests/apis/BadgesAPI.test.js b/tests/apis/BadgesAPI.test.js deleted file mode 100644 index 9e0184ea4..000000000 --- a/tests/apis/BadgesAPI.test.js +++ /dev/null @@ -1,34 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing BadgesAPI", function () { - it("should retrieve badge info", function () { - expect(client.apis.badgesAPI.getBadge({ - badgeId: 2124564087 - })) - .resolves - .toStrictEqual({ - id: 2124564087, - created: "2020-06-20T13:45:20.717-05:00", - awardingUniverse: { - id: 111958650 - } - }); - }); -}); diff --git a/tests/apis/BillingAPI.test.js b/tests/apis/BillingAPI.test.js deleted file mode 100644 index 6a4dec02d..000000000 --- a/tests/apis/BillingAPI.test.js +++ /dev/null @@ -1,29 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing BillingAPI", function () { - it("should retrieve developer exchange rate", function () { - return expect(client.apis.billingAPI.getDeveloperExchangeRate()) - .resolves - .toMatchObject({ - rate: 0.0035, - "currency-code": "USD" - }); - }); -}); diff --git a/tests/apis/CatalogAPI.test.js b/tests/apis/CatalogAPI.test.js deleted file mode 100644 index caf3198ff..000000000 --- a/tests/apis/CatalogAPI.test.js +++ /dev/null @@ -1,122 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing CatalogAPI", function () { - it("should retrieve bundle info", function () { - return expect(client.apis.catalogAPI.getBundleDetails({ - bundleId: 192 - })) - .resolves - .toMatchObject({ - id: 192, - bundleType: "BodyParts", - product: { - id: 369653841 - }, - creator: { - id: 1 - } - }); - }); - - it("should retrieve bundle info in bulk", function () { - return expect(client.apis.catalogAPI.getMultiBundleDetails({ - bundleIds: [192] - })) - .resolves - .toMatchObject([ - { - id: 192, - bundleType: "BodyParts" - } - ]); - }); - - it("should retrieve categories", function () { - expect(client.apis.catalogAPI.getCategories()) - .resolves - .toStrictEqual({ - Featured: 0, - All: 1, - Collectibles: 2, - Clothing: 3, - BodyParts: 4, - Gear: 5, - Models: 6, - Plugins: 7, - Decals: 8, - Audio: 9, - Meshes: 10, - Accessories: 11, - AvatarAnimations: 12, - CommunityCreations: 13, - Video: 14, - Recommended: 15 - }); - }); - - it("should retrieve sub-categories", function () { - expect(client.apis.catalogAPI.getSubCategories()) - .resolves - .toStrictEqual({ - Featured: 0, - All: 1, - Collectibles: 2, - Clothing: 3, - BodyParts: 4, - Gear: 5, - Models: 6, - Plugins: 7, - Decals: 8, - Hats: 9, - Faces: 10, - Packages: 11, - Shirts: 12, - Tshirts: 13, - Pants: 14, - Heads: 15, - Audio: 16, - RobloxCreated: 17, - Meshes: 18, - Accessories: 19, - HairAccessories: 20, - FaceAccessories: 21, - NeckAccessories: 22, - ShoulderAccessories: 23, - FrontAccessories: 24, - BackAccessories: 25, - WaistAccessories: 26, - AvatarAnimations: 27, - ClimbAnimations: 28, - FallAnimations: 30, - IdleAnimations: 31, - JumpAnimations: 32, - RunAnimations: 33, - SwimAnimations: 34, - WalkAnimations: 35, - AnimationPackage: 36, - Bundles: 37, - AnimationBundles: 38, - EmoteAnimations: 39, - CommunityCreations: 40, - Video: 41, - Recommended: 51 - }) - }); -}); diff --git a/tests/apis/ChatAPI.test.js b/tests/apis/ChatAPI.test.js deleted file mode 100644 index 7747fee13..000000000 --- a/tests/apis/ChatAPI.test.js +++ /dev/null @@ -1,24 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing ChatAPI", function () { - it("should retreive badge info", function () { - - }); -}); diff --git a/tests/apis/DevelopAPI.test.js b/tests/apis/DevelopAPI.test.js deleted file mode 100644 index dfcabac22..000000000 --- a/tests/apis/DevelopAPI.test.js +++ /dev/null @@ -1,254 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const schemas = require("../util/schemas"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); -const Joi = require("joi"); - -describe("testing DevelopAPI", function () { - beforeAll(() => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`${new Date()} logged in!`); - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }) - .catch(e => { - console.log(`Error: ${e}`); - }); - }); - - let firstUniverseFound; - - it("fetching first universe found..", async () => { - console.log(`${new Date()} fetching universes..`); - firstUniverseFound = await client.apis.developAPI.getSelfUniverses({ - sortOrder: "Desc", - limit: 10 - }) - .catch(e => e) - .then(response => { - return response.data[0]; - }) - .catch(e => { - throw new Error(`Failed to retrieve first universe! ${e}`); - }); - }); - - describe("testing standalone APIs", function () { - it("should return game templates, verifying the default Baseplate one", async function () { - const templates = await client.apis.developAPI.getGameTemplates(); - - return expect(templates) - .toContainEqual({ - gameTemplateType: "Generic", - hasTutorials: false, - universe: { - id: 28220420, - name: "Baseplate", - description: "", - isArchived: false, - rootPlaceId: 95206881, - isActive: true, - privacyType: "Public", - creatorType: "User", - creatorTargetId: 998796, - creatorName: "Templates", - created: "2013-11-01T03:47:14.07-05:00", - updated: "2019-07-08T11:53:21.81-05:00" - } - }); - }); - it("should attempt to publish game update notification and fail", function () { - const d = client.apis.developAPI.publishGameUpdateNotification({ - gameUpdateText: `hi`, - universeId: 1350045202 - }); - - expect(d) - .rejects - .toThrow("Only one update allowed per week"); - }); - it("should get game's update history", async function () { - const d = await client.apis.developAPI.getGameUpdatesHistory({ - universeId: 1350045202 - }); - - console.log(d); - - expect(true) - .toBe(true); - }); - it("should get multiple plugins' information", async function () { - const d = await client.apis.developAPI.getMultiPlugins({ - pluginIds: [6158541297, 6216851661] - }); - const multiPluginsSchema = Joi.object({ - data: Joi.array() - .items(schemas.PluginDataSchema) - }); - - expect(multiPluginsSchema.validate(d)) - .not - .toHaveProperty("error"); - }); - it("should search universes", async function () { - const d = await client.apis.developAPI.searchUniverses({ - q: { - creator: "user" - } - }); - const schema = Joi.object({ - previousPageCursor: Joi.allow(Joi.string(), null), - nextPageCursor: Joi.allow(Joi.string(), null), - data: Joi.array() - .items(schemas.SearchUniverseDataSchema) - }); - - expect(schema.validate(d)) - .not - .toHaveProperty("error"); - }); - }); - - describe("testing universe-related APIs", () => { - /* - it(`should create a developer product in the first universe`, async function () { - await firstUniverseFound; - - const createdProduct = await client.apis.developAPI.createDeveloperProduct({ - universeId: firstUniverseFound.id, - priceInRobux: 10, - name: `Test${("123").repeat(Math.floor(Math.random() * 30))} - music${("").repeat(Math.floor(Math.random() * 30))} ${(".").repeat(Math.floor(Math.random() * 50))}`, - iconImageAssetId: 5874994712, - description: `A developer product automatically created using bloxy at ${new Date().toISOString()}` - }) - .catch(e => e); - - console.log(createdProduct); - expect(createdProduct) - .toHaveProperty("id"); - expect(createdProduct) - .toHaveProperty("name"); - expect(createdProduct) - .toHaveProperty("Description"); - expect(createdProduct) - .toHaveProperty("shopId"); - expect(createdProduct) - .toHaveProperty("iconImageAssetId"); - }); - */ - - it("should deactivate the universe", async function () { - await firstUniverseFound; - return expect( - client.apis.developAPI.deactivateUniverse({ - universeId: firstUniverseFound.id - }) - ) - .resolves - .not - .toThrow(); - }); - - it("should activate the universe", async function () { - await firstUniverseFound; - return expect( - client.apis.developAPI.activateUniverse({ - universeId: firstUniverseFound.id - }) - ) - .resolves - .not - .toThrow(); - }); - it("should filter \"fuck\"", function () { - return expect( - client.apis.developAPI.filterGameUpdateNotificationText({ - text: `fuck` - }) - ) - .resolves - .toMatchObject({ - filteredGameUpdateText: "####", - isFiltered: true, - moderationLevel: 3 - }); - }); - it("should not filter", function () { - return expect( - client.apis.developAPI.filterGameUpdateNotificationText({ - text: "roblox" - }) - ) - .resolves - .toMatchObject({ - filteredGameUpdateText: "roblox", - isFiltered: false, - moderationLevel: 1 - }); - }); - it("should get places in the universe found and root place id should be in one of them", async function () { - await firstUniverseFound; - return expect( - client.apis.developAPI.getPlacesInUniverse({ - universeId: firstUniverseFound.id - }) - ) - .resolves - .toMatchObject({ - data: [ - { - id: firstUniverseFound.rootPlaceId, - universeId: firstUniverseFound.id, - name: firstUniverseFound.name, - description: firstUniverseFound.description - } - ] - }); - }); - it("should test place statistics", async function () { - await firstUniverseFound; - return expect( - client.apis.developAPI.getPlaceStatistics({ - placeId: firstUniverseFound.rootPlaceId, - type: "Revenue", - granularity: "Hourly" - }) - ) - .resolves - .toMatchObject({ - placeId: firstUniverseFound.rootPlaceId, - dataType: 0, - dataGranularity: 0, - data: { - Total: { - type: "Total", - data: {} - } - } - }); - }); - it("should retrieve root place compatibilities", async function () { - jest.setTimeout(15000); - await firstUniverseFound; - const retrievedCompatibilities = await client.apis.developAPI.getPlaceCompatibilities({ - placeId: firstUniverseFound.rootPlaceId - }); - - expect(retrievedCompatibilities.Compatibilities) - .toContainEqual({ - crashRatePercentage: "NaN", - platformName: "iPhone 11 Pro Max", - status: "Unknown" - }); - - }); - }); -}); diff --git a/tests/apis/TwoStepVerification.test.js b/tests/apis/TwoStepVerification.test.js deleted file mode 100644 index adc2def59..000000000 --- a/tests/apis/TwoStepVerification.test.js +++ /dev/null @@ -1,92 +0,0 @@ -const TEST_COOKIE = require("../getCookie"); -const bloxy = require("../../dist"); -const faker = require("faker"); -const client = new bloxy.Client({ - credentials: { - cookie: TEST_COOKIE - } -}); -const { wait } = require("../util"); - -beforeAll(async () => { - return client.login( - TEST_COOKIE - ) - .then(clientUser => { - console.log(`Using test account ${clientUser.id} with name ${clientUser.name}`); - }); -}); - -describe("testing TwoStepVerificationAPI", function () { - it("should retrieve metadata", function () { - return expect( - client.apis.twpStepVerification.getMetaData({ - userId: client.user.id - }) - ) - .resolves - .toStrictEqual({ - twoStepVerificationEnabled: true, - authenticatorEnabled: false, - authenticatorQrCodeSize: "420x420", - emailCodeLength: 6, - authenticatorCodeLength: 6 - }); - }); - - it("should retrieve user twostep configuration", function () { - return expect( - client.apis.twpStepVerification.getConfiguration({ - userId: client.user.id - }) - ) - .resolves - .toStrictEqual({ - primaryMediaType: null, - methods: [] - }); - }); - - it("should error when attepmting to verify, as it's not implemented yet", function () { - return expect( - client.apis.twpStepVerification.verifyWithAuthenticator({ - challengeId: "a", - actionType: "b", - code: "c" - }) - ) - .rejects - .toThrowError("Two step verification is currently under maintenance."); - }); - - it("should error when attempting to disable authenticator, as it's WIP", function () { - return expect( - client.apis.twpStepVerification.disableAuthenticator({ - password: "" - }) - ) - .rejects - .toThrowError("Two step verification is currently under maintenance."); - }); - - it("should error when attempting to enable authenticator, as it's WIP", function () { - return expect( - client.apis.twpStepVerification.enableAuthenticator({ - userId: client.user.id - }) - ) - .rejects - .toThrowError("Two step verification is currently under maintenance."); - }); - - it("should error when attempting to verify and enable, as it's WIP", function () { - return expect( - client.apis.twpStepVerification.verifyAuthenticatorSetup({ - code: "a", - setupToken: "b" - }) - ) - .rejects - .toThrowError("Two step verification is currently under maintenance."); - }); -}); diff --git a/tests/getCookie.js b/tests/getCookie.js deleted file mode 100644 index 512d690c9..000000000 --- a/tests/getCookie.js +++ /dev/null @@ -1,8 +0,0 @@ -const TEST_COOKIE = process.env.TEST_COOKIE; - -if (!TEST_COOKIE) { - console.error(`Failed to start tests, the test cookie was not provided!`); -} - -module.exports = TEST_COOKIE.slice(1) - .substr(0, TEST_COOKIE.length - 2); diff --git a/tests/index.js b/tests/index.js deleted file mode 100644 index d00cb3e78..000000000 --- a/tests/index.js +++ /dev/null @@ -1,19 +0,0 @@ -const cookie = require("./getCookie"); - -(async () => { - const Bloxy = require("../dist"); - const client = new Bloxy.Client({ - credentials: { - cookie - } - }); - await client.login(); - console.log(`Logged in as ${client.user.name}`); - - - const friends = await client.apis.friendsAPI.getUserFriendsOnline({ - userId: 18442032 - }); - - console.log(friends.data.map(x => x.userPresence)); -})(); diff --git a/tests/internal/client.spec.ts b/tests/internal/client.spec.ts new file mode 100644 index 000000000..574660728 --- /dev/null +++ b/tests/internal/client.spec.ts @@ -0,0 +1,84 @@ +import { expect } from "chai"; +import { utilMergeDeep } from "../../dist/util/utilFunctions"; +import { generalIdentifierToNumber } from "../../dist/util/converter"; +import * as bloxy from "../../dist"; + +describe("Bloxy", function () { + describe("Exporting of the client", function () { + it("should export anything", function () { + expect(bloxy).to.exist; + }); + it("should export Client", function () { + expect(bloxy.Client).to.exist; + }); + }); + describe("Creation of the client", function () { + it("should not error without any options", function () { + expect(function () { + new bloxy.Client(); + }).to.not.throw; + }); + it("should not error with empty options", function () { + expect(function () { + new bloxy.Client({}); + }).to.not.throw; + }); + it("should not error with empty credentials options", function () { + expect(function () { + new bloxy.Client({ credentials: {} }); + }).to.not.throw; + }); + it("should not error with empty rest options", function () { + expect(function () { + new bloxy.Client({ rest: {} }); + }).to.not.throw; + }); + }); + describe("utilDeepMerge", function () { + it("should merge two objects and let the last object be dominating", function () { + const merger1 = { + hello: "world", + world: { + hello: "world" + } + }; + const merger2 = { + hello: "bye", + world: { + hi: "there" + } + }; + const expectedObj = { + hello: "bye", + world: { + hello: "world", + hi: "there" + } + }; + const merged = utilMergeDeep(merger1, merger2); + expect(merged).to.deep.equal(expectedObj); + }); + }); + describe("converter", () => { + it("should convert string to number using #generalIdentifierToNumber", function () { + expect(generalIdentifierToNumber("5")).to.equal(5); + expect(generalIdentifierToNumber(5)).to.equal(5); + }); + }); + describe("Testing login of Client", function () { + it("should error because of no credentials provided", function () { + const client = new bloxy.Client(); + expect(function () { + client.login(); + }).to.throw; + }); + it("should error with an invalid cookie", function () { + const client = new bloxy.Client({ + credentials: { cookie: "invalid" } + }); + expect(function () { + client.login(); + }).to.throw; + }); + }); +}); diff --git a/tests/internal/client/client.test.js b/tests/internal/client/client.test.js deleted file mode 100644 index 04cb2444b..000000000 --- a/tests/internal/client/client.test.js +++ /dev/null @@ -1,99 +0,0 @@ -const { utilMergeDeep } = require("../../../dist/util/utilFunctions"); -const converter = require("../../../dist/util/converter"); - - -const bloxy = require("../../../dist"); -const TEST_COOKIE = require("../../getCookie"); - - -describe("testing client", function () { - describe("testing creation of client", function () { - it("should have .Client property", function () { - expect(bloxy) - .toBeDefined(); - expect(bloxy.Client) - .toBeDefined(); - }); - - describe("should be created without erroring without client options", function () { - it("should not error without any options", function () { - expect(() => new bloxy.Client()) - .not - .toThrow(); - }); - it("should not error with empty options", function () { - expect(() => new bloxy.Client({})) - .not - .toThrow(); - }); - it("should not error with empty credentials options", function () { - expect(() => new bloxy.Client({ credentials: {} })) - .not - .toThrow(); - }); - it("should not error with empty rest options", function () { - expect(() => new bloxy.Client({ rest: {} })) - .not - .toThrow(); - }); - }); - }); - describe("testing misc internal functions", function () { - it("should merge two objects and let the last object be dominating", async function () { - const merger1 = { - hello: "world", - world: { - hello: "world" - } - }; - const merger2 = { - hello: "bye", - world: { - hi: "there" - } - }; - const expectObj = { - hello: "bye", - world: { - hello: "world", - hi: "there" - } - }; - - const merged = utilMergeDeep(merger1, merger2); - - expect(merged) - .toStrictEqual(expectObj); - }); - it("should convert string to number using converter.generalIdentifierToNumber", async function () { - expect( - converter.generalIdentifierToNumber("5") - ) - .toStrictEqual(5); - expect( - converter.generalIdentifierToNumber(5) - ) - .toStrictEqual(5); - }); - }); - - describe("testing login function of client", function () { - it("should error because of no credentials provided", function () { - const client = new bloxy.Client(); - expect(client.login()) - .rejects - .toThrow(); - }); - it("should error because invalid cookie", function () { - const client = new bloxy.Client({ - credentials: { - cookie: "test" - } - }); - - expect(client.login()) - .rejects - .toThrow(); - }); - }); -}); diff --git a/tests/internal/client/datastoremanager.test.js b/tests/internal/client/datastoremanager.test.js deleted file mode 100644 index 7abab452e..000000000 --- a/tests/internal/client/datastoremanager.test.js +++ /dev/null @@ -1,24 +0,0 @@ -const bloxy = require("../../../dist"); -const TEST_COOKIE = require("../../getCookie"); - - -const unauthenticatedClient = new bloxy.Client(); -const authenticatedClient = new bloxy.Client(); - -beforeAll(async () => { - await authenticatedClient.login(TEST_COOKIE) - .then(user => { - console.log(`Logged in as ${user.id} with name ${user.name}`); - }); -}); - -describe("testing datastore manager", function () { - describe("ensuring construction of instance is optimal", function () { - it("should error when not logged in", function () { - expect( - unauthenticatedClient.dataStoreManager.getDataStore.bind(undefined, 1, "y") - ) - .toThrow(); - }); - }); -}); diff --git a/tests/internal/datastoremanager.spec.ts b/tests/internal/datastoremanager.spec.ts new file mode 100644 index 000000000..03a6bad1a --- /dev/null +++ b/tests/internal/datastoremanager.spec.ts @@ -0,0 +1,66 @@ +import { Client } from "../../dist"; +import { expect } from "chai"; +import GlobalDataStore from "../../dist/client/lib/DataStoreManager/structures/GlobalDataStore"; +import {} from "mocha"; + +const authenticatedClient = new Client(); +const unauthenticatedClient = new Client(); + +before(async () => { + const authenticatedUser = await authenticatedClient.login( + process.env.ROBLOSECURITY + ); + console.log( + `Logged in as ${authenticatedUser.name} (${authenticatedUser.id})` + ); +}); + +describe("DataStoreManager", function () { + describe("Unauthorized client", function () { + it("should error when accessing a datastore", function () { + expect(() => + unauthenticatedClient.dataStoreManager.getDataStore(1, "test") + ).to.throw; + }); + }); + describe("Authorized client", function () { + let dataStore!: GlobalDataStore; + it("should get the datastore", function () { + dataStore = authenticatedClient.dataStoreManager.getDataStore( + 8406754815, + "test" + ); + expect(dataStore).to.exist; + }); + it("should write to the datastore", async function () { + this.slow(1000); + expect(dataStore, "DataStore does not exist, did the previous test fail?") + .to.exist; + expect( + await (async function () { + dataStore.setAsync("testKey", "testValue"); + })() + ).to.not.throw; + }); + it("should read the datastore", async function () { + this.slow(1000); + expect(dataStore, "DataStore does not exist, did the previous test fail?") + .to.exist; + let value!: string; + expect( + await (async function () { + const returnedValue = JSON.parse( + (await dataStore.getAsync("testKey")) as string + ); + value = returnedValue; + })() + ).to.not.throw; + expect(value).to.equal("testValue"); + }); + it("should error when accessing a datastore without permissions", async function () { + expect(function () { + authenticatedClient.dataStoreManager.getDataStore(1, "test"); + }).to.throw; + }); + }); +}); diff --git a/tests/util.js b/tests/util.js deleted file mode 100644 index e9d668357..000000000 --- a/tests/util.js +++ /dev/null @@ -1 +0,0 @@ -module.exports.wait = (time) => new Promise(resolve => setTimeout(resolve, time * 1000)); diff --git a/tests/util/schemas.js b/tests/util/schemas.js deleted file mode 100644 index 49d2ccdfc..000000000 --- a/tests/util/schemas.js +++ /dev/null @@ -1,49 +0,0 @@ -const Joi = require("joi"); - -exports.GameUniverseSchema = Joi.object({ - id: Joi.number(), - rootPlaceId: Joi.number(), - name: Joi.string(), - description: Joi.string(), - creatorType: Joi.string(), - creator: Joi.object({ - id: Joi.number(), - name: Joi.string(), - }), - price: Joi.number(), - allowedGearGenres: Joi.array().items(Joi.string()), - allowedGearCategories: Joi.array().items(Joi.string()), - playing: Joi.number(), - visits: Joi.number(), - maxPlayers: Joi.number(), - created: Joi.string(), - updated: Joi.string(), - studioAccessToApisAllowed: Joi.bool(), - createVipServersAllowed: Joi.bool(), - universeAvatarType: Joi.string(), - genre: Joi.string(), -}); -exports.SearchUniverseDataSchema = Joi.object({ - id: Joi.number(), - rootPlaceId: Joi.number(), - name: Joi.string(), - description: Joi.string(), - isArchived: Joi.bool(), - isActive: Joi.bool(), - privacyType: Joi.string(), - creatorType: Joi.string(), - creatorTargetId: Joi.number(), - creatorName: Joi.string(), - created: Joi.string(), - updated: Joi.string() -}) - -exports.PluginDataSchema = Joi.object({ - id: Joi.number(), - name: Joi.string(), - description: Joi.string().allow(""), - commentsEnabled: Joi.bool(), - versionId: Joi.number(), - created: Joi.string(), - updated: Joi.string() -}); diff --git a/tests/util/schemas.ts b/tests/util/schemas.ts new file mode 100644 index 000000000..d9d9b48c2 --- /dev/null +++ b/tests/util/schemas.ts @@ -0,0 +1,48 @@ +import Joi from "joi"; + +export const GameUniverseSchema = Joi.object({ + id: Joi.number(), + rootPlaceId: Joi.number(), + name: Joi.string(), + description: Joi.string(), + creatorType: Joi.string(), + creator: Joi.object({ + id: Joi.number(), + name: Joi.string() + }), + price: Joi.number(), + allowedGearGenres: Joi.array().items(Joi.string()), + allowedGearCategories: Joi.array().items(Joi.string()), + playing: Joi.number(), + visits: Joi.number(), + maxPlayers: Joi.number(), + created: Joi.string(), + updated: Joi.string(), + studioAccessToApisAllowed: Joi.bool(), + createVipServersAllowed: Joi.bool(), + universeAvatarType: Joi.string(), + genre: Joi.string() +}); +export const SearchUniverseDataSchema = Joi.object({ + id: Joi.number(), + rootPlaceId: Joi.number(), + name: Joi.string(), + description: Joi.string(), + isArchived: Joi.bool(), + isActive: Joi.bool(), + privacyType: Joi.string(), + creatorType: Joi.string(), + creatorTargetId: Joi.number(), + creatorName: Joi.string(), + created: Joi.string(), + updated: Joi.string() +}); +export const PluginDataSchema = Joi.object({ + id: Joi.number(), + name: Joi.string(), + description: Joi.string().allow(""), + commentsEnabled: Joi.bool(), + versionId: Joi.number(), + created: Joi.string(), + updated: Joi.string() +}); diff --git a/tsconfig.json b/tsconfig.json index f254350e8..f218c06fe 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,99 +1,91 @@ { - "compilerOptions": { - "types": [ - "node" - ], - /* Basic Options */ - // "incremental": true, - /* Enable incremental compilation */ - "target": "ES6", - /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ - "module": "commonjs", - /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true, - /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist", - /* Redirect output structure to the directory. */ - "rootDir": "./src", - /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - "removeComments": false, - /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - "importHelpers": true, - /* Import emit helpers from 'tslib'. */ - "downlevelIteration": true, - /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + "compilerOptions": { + "types": ["node", "mocha"], + /* Basic Options */ + // "incremental": true, + /* Enable incremental compilation */ + "target": "ES6", + /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "commonjs", + /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true, + /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist", + /* Redirect output structure to the directory. */ + "rootDir": "./src", + /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + "removeComments": false, + /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + "importHelpers": true, + /* Import emit helpers from 'tslib'. */ + "downlevelIteration": true, + /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true, - /* Enable all strict type-checking options. */ - "noImplicitAny": true, - /* Raise error on expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, - /* Enable strict null checks. */ - "strictFunctionTypes": true, - /* Enable strict checking of function types. */ - "strictBindCallApply": true, - /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": true, - /* Enable strict checking of property initialization in classes. */ - "noImplicitThis": true, - /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true, - /* Parse in strict mode and emit "use strict" for each source file. */ + /* Strict Type-Checking Options */ + "strict": true, + /* Enable all strict type-checking options. */ + "noImplicitAny": true, + /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, + /* Enable strict null checks. */ + "strictFunctionTypes": true, + /* Enable strict checking of function types. */ + "strictBindCallApply": true, + /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, + /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, + /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, + /* Parse in strict mode and emit "use strict" for each source file. */ - /* Additional Checks */ - "noUnusedLocals": true, - /* Report errors on unused locals. */ - "noUnusedParameters": true, - /* Report errors on unused parameters. */ - "noImplicitReturns": true, - /* Report error when not all code paths in function return a value. */ - "noFallthroughCasesInSwitch": true, - /* Report errors for fallthrough cases in switch statement. */ + /* Additional Checks */ + "noUnusedLocals": true, + /* Report errors on unused locals. */ + "noUnusedParameters": true, + /* Report errors on unused parameters. */ + "noImplicitReturns": true, + /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, + /* Report errors for fallthrough cases in switch statement. */ - /* Module Resolution Options */ - "moduleResolution": "node", - /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true - /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, - /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + /* Module Resolution Options */ + "moduleResolution": "node", + /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true + /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, + /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - }, - "compileOnSave": true, - "exclude": [ - "dist", - "node_modules", - ".circleci" - ], - "include": [ - "src" - ] + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + }, + "compileOnSave": true, + "exclude": ["dist", "node_modules", ".circleci"], + "include": ["src"] } From 4216beee30c4390cb3a68b5d05b7199584f744b0 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 01:27:36 +0100 Subject: [PATCH 09/24] Run prettier, fix REST typings --- .eslintrc.json | 4 +- src/client/Client.ts | 349 +-- src/client/ClientBase.ts | 110 +- src/client/apis/AccountInformationAPI.ts | 496 ++-- src/client/apis/AccountSettingsAPI.ts | 742 +++-- src/client/apis/AdConfigurationAPI.ts | 196 +- src/client/apis/AdsAPI.ts | 133 +- src/client/apis/AssetDeliveryAPI.ts | 501 ++-- src/client/apis/AuthAPI.ts | 961 ++++--- src/client/apis/AvatarAPI.ts | 746 ++--- src/client/apis/BadgesAPI.ts | 234 +- src/client/apis/BaseAPI.ts | 93 +- src/client/apis/BillingAPI.ts | 686 ++--- src/client/apis/CatalogAPI.ts | 623 ++--- src/client/apis/ChatAPI.ts | 820 +++--- src/client/apis/ContactsAPI.ts | 135 +- src/client/apis/DataAPI.ts | 52 +- src/client/apis/DevelopAPI.ts | 1769 ++++++------ src/client/apis/EconomyAPI.ts | 612 ++-- src/client/apis/EconomyCreatorStatsAPI.ts | 60 +- src/client/apis/EngagementPayoutsAPI.ts | 45 +- src/client/apis/FollowingsAPI.ts | 139 +- src/client/apis/FriendsAPI.ts | 866 +++--- .../apis/GameInternationalizationAPI.ts | 433 +-- src/client/apis/GamesAPI.ts | 1002 +++---- src/client/apis/GeneralAPI.ts | 801 +++--- src/client/apis/GroupsAPI.ts | 2478 +++++++++-------- src/client/apis/InventoryAPI.ts | 380 +-- src/client/apis/ItemConfigurationAPI.ts | 317 ++- src/client/apis/LocaleAPI.ts | 217 +- src/client/apis/MetricsAPI.ts | 112 +- src/client/apis/NotificationsAPI.ts | 1177 ++++---- src/client/apis/OtherAPI.ts | 112 +- src/client/apis/PremiumFeaturesAPI.ts | 72 +- src/client/apis/PresenceAPI.ts | 99 +- src/client/apis/PrivateMessagesAPI.ts | 362 ++- src/client/apis/PublishAPI.ts | 260 +- src/client/apis/ThumbnailsAPI.ts | 679 +++-- src/client/apis/TradesAPI.ts | 355 ++- src/client/apis/TranslationRolesAPI.ts | 171 +- src/client/apis/TwoStepVerificationAPI.ts | 332 +-- src/client/apis/UsersAPI.ts | 353 ++- src/client/apis/index.ts | 157 +- src/client/lib/ChatManager/ChatManager.ts | 385 +-- src/client/lib/ClientSocket/ClientSocket.ts | 258 +- .../handlers/chatNotifications.ts | 146 +- .../handlers/friendShipnotifications.ts | 68 +- src/client/lib/ClientSocket/handlers/index.ts | 6 +- .../handlers/messageNotifications.ts | 65 +- .../handlers/presenceBulkNotifications.ts | 29 +- .../lib/DataStoreManager/DataStoreManager.ts | 43 +- .../structures/DataStoreHttpRequest.ts | 55 +- .../structures/GenericDataStore.ts | 567 ++-- .../structures/GlobalDataStore.ts | 24 +- .../structures/OrderedDataStore.ts | 116 +- .../structures/OrderedDataStorePage.ts | 53 +- .../lib/DataStoreManager/util/checks.ts | 69 +- .../lib/DataStoreManager/util/constants.ts | 31 +- src/controllers/index.ts | 3 +- src/controllers/rest/RESTController.ts | 448 +-- src/controllers/rest/lib/getRequester.ts | 35 +- src/controllers/rest/lib/updateXCSRFToken.ts | 44 +- src/controllers/rest/request/RESTRequest.ts | 81 +- src/controllers/rest/request/prepare.ts | 106 +- src/controllers/rest/response/RESTResponse.ts | 78 +- .../rest/response/handlers/index.ts | 9 +- .../rest/response/handlers/updateHeaders.ts | 33 +- .../rest/response/handlers/validBody.ts | 2 +- .../rest/response/handlers/validStatusCode.ts | 78 +- .../response/handlers/validStatusMessage.ts | 78 +- src/index.ts | 1890 ++++++------- src/interfaces/APIInterfaces.ts | 5 +- src/interfaces/GeneralInterfaces.ts | 25 +- src/interfaces/RESTInterfaces.ts | 280 +- src/structures/Asset.ts | 676 ++--- src/structures/Chat.ts | 453 ++- src/structures/ClientUser.ts | 530 ++-- src/structures/Game.ts | 857 +++--- src/structures/Group.ts | 1832 ++++++------ src/structures/User.ts | 1510 +++++----- src/util/constants.ts | 112 +- src/util/converter.ts | 22 +- src/util/errors/errors.ts | 48 +- src/util/errors/index.ts | 5 +- src/util/errors/messages.ts | 2 +- src/util/utilFunctions.ts | 53 +- 86 files changed, 16269 insertions(+), 15182 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index dee71c29b..839b8ef81 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,7 +24,7 @@ "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/indent": ["error", 4], + "@typescript-eslint/indent": ["error", 2], "no-await-in-loop": "warn", "no-compare-neg-zero": "error", "no-template-curly-in-string": "error", @@ -162,7 +162,7 @@ "semi-spacing": "error", "space-before-blocks": "error", "space-before-function-paren": [ - "error", + "off", { "anonymous": "always", "named": "always", diff --git a/src/client/Client.ts b/src/client/Client.ts index f98d32666..844b77b3a 100644 --- a/src/client/Client.ts +++ b/src/client/Client.ts @@ -7,181 +7,206 @@ import * as ClientSocket from "./lib/ClientSocket/ClientSocket"; import ChatManager from "./lib/ChatManager/ChatManager"; import DataStoreManager from "./lib/DataStoreManager/DataStoreManager"; - export default class Client extends ClientBase { - public user: ClientUser | null; - public apis: APIs; - public rest: RESTController; - public socket: ClientSocket.Socket; - public dataStoreManager: DataStoreManager; - public chat: ChatManager; - - constructor (options?: ClientOptions) { - super(options); - - this.user = null; - this.apis = initAPIs(this); - this.rest = new RESTController(this, this.options.rest); - this.socket = new ClientSocket.Socket(this); - this.dataStoreManager = new DataStoreManager(this); - this.chat = new ChatManager(this); - - this.init(); + public user: ClientUser | null; + public apis: APIs; + public rest: RESTController; + public socket: ClientSocket.Socket; + public dataStoreManager: DataStoreManager; + public chat: ChatManager; + + constructor (options?: ClientOptions) { + super(options); + + this.user = null; + this.apis = initAPIs(this); + this.rest = new RESTController(this, this.options.rest); + this.socket = new ClientSocket.Socket(this); + this.dataStoreManager = new DataStoreManager(this); + this.chat = new ChatManager(this); + + this.init(); + } + + public isLoggedIn (): boolean { + return this.user !== null; + } + + init (): void { + if (this.options.rest) { + this.rest.setOptions(this.options.rest); } + } - public isLoggedIn (): boolean { - return this.user !== null; - } + public async login (cookie?: string): Promise { + this.log("info", { + name: "Client.login", + description: `Started login process..` + }); + cookie = cookie || (this.options.credentials || {}).cookie || undefined; - init (): void { - if (this.options.rest) { - this.rest.setOptions(this.options.rest); - } + if (!cookie) { + throw new Error("Attempted to log in without a cookie!"); } - - public async login (cookie?: string): Promise { - this.log("info", { - name: "Client.login", - description: `Started login process..` - }); - cookie = cookie || (this.options.credentials || {}).cookie || undefined; - - if (!cookie) { - throw new Error("Attempted to log in without a cookie!"); + this.options.credentials = { + ...this.options.credentials, + cookie + }; + + const createdCookie = this.rest.createCookie({ + key: ".ROBLOSECURITY", + value: cookie, + domain: "roblox.com", + hostOnly: false, + httpOnly: false + }); + + this.rest.addCookie(createdCookie); + + this.log("info", { + name: "Client.login", + description: `Added cookie to cookie jar, proceeding to fetching authenticated user information..` + }); + + const getAuthenticationData = + await this.apis.usersAPI.getAuthenticatedUserInformation(); + this.user = new ClientUser( + { + id: getAuthenticationData.id, + name: getAuthenticationData.name + }, + this + ); + this.emit("loggedIn"); + + this.log("info", { + name: "Client.login", + description: `Successfully logged in as ${getAuthenticationData.name}` + }); + + return this.user; + } + + getGroup (groupId: number): Promise { + return this.apis.groupsAPI + .getGroup({ + groupId + }) + .then(data => { + if (!data) { + throw new Error(`Group not found: ${groupId}`); + } else { + return new Group(data, this); } - this.options.credentials = { - ...this.options.credentials, - cookie - }; - - const createdCookie = this.rest.createCookie({ - key: ".ROBLOSECURITY", - value: cookie, - domain: "roblox.com", - hostOnly: false, - httpOnly: false - }); - - this.rest.addCookie(createdCookie); - - this.log("info", { - name: "Client.login", - description: `Added cookie to cookie jar, proceeding to fetching authenticated user information..` - }); - - const getAuthenticationData = await this.apis.usersAPI.getAuthenticatedUserInformation(); - this.user = new ClientUser({ - id: getAuthenticationData.id, - name: getAuthenticationData.name - }, this); - this.emit("loggedIn"); - - this.log("info", { - name: "Client.login", - description: `Successfully logged in as ${getAuthenticationData.name}` - }); - - return this.user; - } + }); + } - getGroup (groupId: number): Promise { - return this.apis.groupsAPI.getGroup({ - groupId - }) - .then(data => { - if (!data) { - throw new Error(`Group not found: ${groupId}`); - } else { - return new Group(data, this); - } - }); + getUser (userId: number | string): Promise { + if (typeof userId === "string") { + userId = parseInt(userId); } - getUser (userId: number | string): Promise { - if (typeof userId === "string") { - userId = parseInt(userId); + return this.apis.otherAPI + .getUserProfileHeader({ + userId + }) + .then( + data => + new User( + { + id: data.ProfileUserId, + name: data.ProfileUserName, + displayName: data.ProfileDisplayName, + canFollow: data.CanBeFollowed, + canSeeInventory: data.CanSeeInventory, + canTrade: data.CanTrade, + incomingFriendRequest: data.IncomingFriendRequestPending, + sentFriendRequest: data.FriendRequestPending, + canMessage: data.CanMessage, + isViewerBlocked: data.IsViewerBlocked, + isVieweeBlocked: data.IsVieweeBlocked, + followingsCount: data.FollowingsCount, + followersCount: data.FollowersCount, + userPlaceId: data.UserPlaceId, + userStatusDate: data.UserStatusDate, + userStatus: data.UserStatus, + presenceType: data.UserPresenceType, + friendsCount: data.FriendsCount, + canFriend: data.MaySendFriendInvitation, + areFriends: data.AreFriends, + lastLocation: data.LastLocation, + canSeeFavorites: data.CanSeeFavorites, + headShotImage: { + final: data.HeadShotImage.Final, + endpointType: data.HeadShotImage.EndpointType, + retryUrl: data.HeadShotImage.RetryUrl, + url: data.HeadShotImage.Url, + userId: data.HeadShotImage.UserId + }, + messagesDisabled: data.MessagesDisabled, + previousUsernames: data.PreviousUserNames + }, + this + ) + ); + } + + getUserIdFromUsername (username: string): Promise { + return this.apis.usersAPI + .getUsersByUsernames({ + usernames: [username], + excludeBannedUsers: false + }) + .then(response => { + if (response.data && response.data[0]) { + return new PartialUser(response.data[0], this); + } else { + throw new Error("Got invalid response from getUserIdFromUsername"); } + }); + } - return this.apis.otherAPI.getUserProfileHeader({ - userId - }) - .then(data => new User({ - id: data.ProfileUserId, - name: data.ProfileUserName, - displayName: data.ProfileDisplayName, - canFollow: data.CanBeFollowed, - canSeeInventory: data.CanSeeInventory, - canTrade: data.CanTrade, - incomingFriendRequest: data.IncomingFriendRequestPending, - sentFriendRequest: data.FriendRequestPending, - canMessage: data.CanMessage, - isViewerBlocked: data.IsViewerBlocked, - isVieweeBlocked: data.IsVieweeBlocked, - followingsCount: data.FollowingsCount, - followersCount: data.FollowersCount, - userPlaceId: data.UserPlaceId, - userStatusDate: data.UserStatusDate, - userStatus: data.UserStatus, - presenceType: data.UserPresenceType, - friendsCount: data.FriendsCount, - canFriend: data.MaySendFriendInvitation, - areFriends: data.AreFriends, - lastLocation: data.LastLocation, - canSeeFavorites: data.CanSeeFavorites, - headShotImage: { - final: data.HeadShotImage.Final, - endpointType: data.HeadShotImage.EndpointType, - retryUrl: data.HeadShotImage.RetryUrl, - url: data.HeadShotImage.Url, - userId: data.HeadShotImage.UserId - }, - messagesDisabled: data.MessagesDisabled, - previousUsernames: data.PreviousUserNames - }, this)); + getUsernameFromUserId (userId: number | string): Promise { + if (typeof userId === "string") { + userId = parseInt(userId); } - getUserIdFromUsername (username: string): Promise { - return this.apis.usersAPI.getUsersByUsernames({ - usernames: [username], - excludeBannedUsers: false - }) - .then(response => { - if (response.data && response.data[0]) { - return new PartialUser(response.data[0], this); - } else { - throw new Error("Got invalid response from getUserIdFromUsername"); - } - }); + return this.apis.generalApi + .getUserById({ + userId + }) + .then(data => new PartialUser(data, this)); + } + + getUsersByUserIds ( + userIds: number[] | string[], + excludeBannedUsers = false + ): Promise { + if (typeof userIds[0] === "string") { + userIds = (userIds as string[]).map(userId => parseInt(userId)); } - getUsernameFromUserId (userId: number | string): Promise { - if (typeof userId === "string") { - userId = parseInt(userId); - } - - return this.apis.generalApi.getUserById({ - userId - }) - .then(data => new PartialUser(data, this)); - } - - getUsersByUserIds (userIds: number[] | string[], excludeBannedUsers = false): Promise { - if (typeof userIds[0] === "string") { - userIds = (userIds as string[]).map(userId => parseInt(userId)); - } - - return this.apis.usersAPI.getUsersByIds({ - excludeBannedUsers, - userIds: userIds as number[] - }) - .then(response => response.data.map(userData => new PartialUser(userData, this))); - } - - getUsersByUsernames (usernames: string[], excludeBannedUsers = false): Promise { - return this.apis.usersAPI.getUsersByUsernames({ - excludeBannedUsers, - usernames - }) - .then(response => response.data.map(userData => new PartialUser(userData, this))); - } + return this.apis.usersAPI + .getUsersByIds({ + excludeBannedUsers, + userIds: userIds as number[] + }) + .then(response => + response.data.map(userData => new PartialUser(userData, this)) + ); + } + + getUsersByUsernames ( + usernames: string[], + excludeBannedUsers = false + ): Promise { + return this.apis.usersAPI + .getUsersByUsernames({ + excludeBannedUsers, + usernames + }) + .then(response => + response.data.map(userData => new PartialUser(userData, this)) + ); + } } diff --git a/src/client/ClientBase.ts b/src/client/ClientBase.ts index f27862c24..7d72148f4 100644 --- a/src/client/ClientBase.ts +++ b/src/client/ClientBase.ts @@ -3,73 +3,79 @@ import { RESTControllerOptions } from "../interfaces/RESTInterfaces"; import debug, { Debugger } from "debug"; import { utilMergeDeep } from "../util/utilFunctions"; - export interface ClientCredentialsOptions { - cookie?: string; + cookie?: string; } - export interface ClientCallbacks { - getFunCaptchaToken?: (publicKey: string, targetUrl: string) => Promise; + getFunCaptchaToken?: ( + publicKey: string, + targetUrl: string + ) => Promise; } - export interface ClientSetup { - websocket?: { - maxRetries: number; - }; - debug: boolean; + websocket?: { + maxRetries: number; + }; + debug: boolean; } - export interface ClientOptions { - credentials?: ClientCredentialsOptions; - rest?: RESTControllerOptions; - callbacks?: ClientCallbacks; - setup?: ClientSetup; + credentials?: ClientCredentialsOptions; + rest?: RESTControllerOptions; + callbacks?: ClientCallbacks; + setup?: ClientSetup; } - interface DebugData { - name: string; - description: string; + name: string; + description: string; } - export default class ClientBase extends EventEmitter { - public options: ClientOptions; - public debugger: { - info: Debugger; - warn: Debugger; - error: Debugger; + public options: ClientOptions; + public debugger: { + info: Debugger; + warn: Debugger; + error: Debugger; + }; + + constructor (options?: ClientOptions) { + super(); + + this.options = this.updateOptions(options); + this.debugger = { + info: debug("bloxy:info"), + warn: debug("bloxy:warn"), + error: debug("bloxy:error") }; - - - constructor (options?: ClientOptions) { - super(); - - this.options = this.updateOptions(options); - this.debugger = { - info: debug("bloxy:info"), - warn: debug("bloxy:warn"), - error: debug("bloxy:error") - }; - } - - public updateOptions (options?: ClientOptions): ClientOptions { - this.options = utilMergeDeep({ - credentials: {}, - rest: {}, - setup: {}, - callbacks: {} - } as ClientOptions, options || {}) as ClientOptions; - - return this.options; - } - - public log (level: "info" | "warn" | "error", data: DebugData): void { - const loggerToUse = level === "info" ? this.debugger.info : level === "error" ? this.debugger.error : this.debugger.warn; - - loggerToUse(`[${new Date().toISOString()}] ${data.name}: ${data.description}`); - } + } + + public updateOptions (options?: ClientOptions): ClientOptions { + this.options = utilMergeDeep( + { + credentials: {}, + rest: {}, + setup: {}, + callbacks: {} + } as ClientOptions, + options || {} + ) as ClientOptions; + + return this.options; + } + + public log (level: "info" | "warn" | "error", data: DebugData): void { + const loggerToUse = + level === "info" ? + this.debugger.info : + level === "error" ? + this.debugger.error : + this.debugger.warn; + + loggerToUse( + `[${new Date().toISOString()}] ${data.name}: ${data.description}` + ); + } } diff --git a/src/client/apis/AccountInformationAPI.ts b/src/client/apis/AccountInformationAPI.ts index cb9c8456a..71e9b5b70 100644 --- a/src/client/apis/AccountInformationAPI.ts +++ b/src/client/apis/AccountInformationAPI.ts @@ -1,306 +1,302 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export declare type UpdateUserBirthdateOptions = GetUserBirthdate; export declare type UpdateUserDescriptionOptions = { - description: string; + description: string; }; export declare type UpdateUserGenderOptions = { - gender: number; -} + gender: number; +}; export declare type SetPhoneNumberOptions = { - countryCode: string; - prefix: string; - phone: string; - password: string; + countryCode: string; + prefix: string; + phone: string; + password: string; }; export declare type DeletePhoneOptions = SetPhoneNumberOptions; export declare type ResendPhoneCodeOptions = SetPhoneNumberOptions; export declare type VerifyPhoneOptions = SetPhoneNumberOptions; export declare type AddStarCodeAffiliateOptions = { - code: string; + code: string; }; export declare type UpdateUserPromotionChannelsOptions = { - facebook: string; - twitter: string; - youtube: string; - twitch: string; - promotionChannelsVisibilityPrivacy: string; + facebook: string; + twitter: string; + youtube: string; + twitch: string; + promotionChannelsVisibilityPrivacy: string; }; export declare type GetUserBirthdate = { - birthMonth: number; - birthDay: number; - birthYear: number; + birthMonth: number; + birthDay: number; + birthYear: number; }; export declare type UpdateUserBirthdate = boolean; export declare type GetUserDescription = { - description: string; + description: string; }; export declare type UpdateUserDescription = boolean; export declare type GetUserGender = { - gender: number; -} -export declare type UpdateUserGender = unknown + gender: number; +}; +export declare type UpdateUserGender = unknown; export declare type GetConsecutiveXboxLoginDays = { - count: number; + count: number; }; export declare type GetMetaData = { - isAllowedNotificationsEndpointDisabled: boolean; - isAccountSettingsPolicyEnabled: boolean; - isPhoneNumberEnabled: boolean; -} + isAllowedNotificationsEndpointDisabled: boolean; + isAccountSettingsPolicyEnabled: boolean; + isPhoneNumberEnabled: boolean; +}; export declare type GetVerifiedPhoneNumber = SetPhoneNumberOptions; export declare type SetPhoneNumber = unknown; export declare type DeletePhone = unknown; export declare type ResendPhoneCode = unknown; export declare type VerifyPhone = unknown; -export declare type GetSelfPromotionChannels = UpdateUserPromotionChannelsOptions; -export declare type GetUserPromotionChannelsOptions = { userId: number } -export declare type GetUserPromotionChannels = Omit; -export declare type UpdateUserPromotionChannels = unknown -export declare type RemoveStarCodeAffiliate = unknown +export declare type GetSelfPromotionChannels = + UpdateUserPromotionChannelsOptions; +export declare type GetUserPromotionChannelsOptions = { userId: number }; +export declare type GetUserPromotionChannels = Omit< +GetSelfPromotionChannels, +"promotionChannelsVisibilityPrivacy" +>; +export declare type UpdateUserPromotionChannels = unknown; +export declare type RemoveStarCodeAffiliate = unknown; export declare type GetStarCodeAffiliate = { - userId: number; - name: string; - code: string; -} + userId: number; + name: string; + code: string; +}; export declare type AddStarCodeAffiliate = GetStarCodeAffiliate; export default class AccountInformationAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://accountinformation.roblox.com/", - client - }); - } + constructor (client: Client) { + super({ + baseUrl: "https://accountinformation.roblox.com/", + client + }); + } - getUserBirthdate (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/birthdate" - }, - json: true - }) - .then(response => response.body as GetUserBirthdate); - } + getUserBirthdate (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/birthdate" + }, + json: true + }).then(response => response.body as GetUserBirthdate); + } - updateUserBirthdate (options: UpdateUserBirthdateOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/birthdate", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as UpdateUserBirthdate); - } + updateUserBirthdate ( + options: UpdateUserBirthdateOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/birthdate", + method: "POST", + json: options + }, + json: true + }).then(() => true as UpdateUserBirthdate); + } - getUserDescription (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/description" - }, - json: true - }) - .then(response => response.body as GetUserDescription); - } + getUserDescription (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/description" + }, + json: true + }).then(response => response.body as GetUserDescription); + } - updateUserDescription (options: UpdateUserDescriptionOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/description", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as UpdateUserDescription); - } + updateUserDescription ( + options: UpdateUserDescriptionOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/description", + method: "POST", + json: options + }, + json: true + }).then(() => true as UpdateUserDescription); + } - getUserGender (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/gender" - }, - json: true - }) - .then(response => response.body as GetUserGender); - } + getUserGender (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/gender" + }, + json: true + }).then(response => response.body as GetUserGender); + } - updateUserGender (options: UpdateUserGenderOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/gender", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as UpdateUserGender); - } + updateUserGender ( + options: UpdateUserGenderOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/gender", + method: "POST", + json: options + }, + json: true + }).then(() => true as UpdateUserGender); + } - getConsecutiveXboxLoginDays (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/xbox-live/consecutive-login-days" - }, - json: true - }) - .then(response => response.body as GetConsecutiveXboxLoginDays); - } + getConsecutiveXboxLoginDays (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/xbox-live/consecutive-login-days" + }, + json: true + }).then(response => response.body as GetConsecutiveXboxLoginDays); + } - getMetaData () { - return this.request({ - requiresAuth: false, - request: { - path: "v1/metadata" - }, - json: true - }) - .then(response => response.body as GetMetaData); - } + getMetaData () { + return this.request({ + requiresAuth: false, + request: { + path: "v1/metadata" + }, + json: true + }).then(response => response.body as GetMetaData); + } - getVerifiedPhoneNumber (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone" - }, - json: true - }) - .then(response => response.body as GetVerifiedPhoneNumber); - } + getVerifiedPhoneNumber (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/phone" + }, + json: true + }).then(response => response.body as GetVerifiedPhoneNumber); + } - setPhoneNumber (options: SetPhoneNumberOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as SetPhoneNumber); - } + setPhoneNumber (options: SetPhoneNumberOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/phone", + method: "POST", + json: options + }, + json: true + }).then(() => true as SetPhoneNumber); + } - deletePhone (options: DeletePhoneOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone/delete", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as DeletePhone); - } + deletePhone (options: DeletePhoneOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/phone/delete", + method: "POST", + json: options + }, + json: true + }).then(() => true as DeletePhone); + } - resendPhoneCode (options: ResendPhoneCodeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone/resend", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as ResendPhoneCode); - } + resendPhoneCode (options: ResendPhoneCodeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/phone/resend", + method: "POST", + json: options + }, + json: true + }).then(() => true as ResendPhoneCode); + } - verifyPhone (options: VerifyPhoneOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone/verify", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as VerifyPhone); - } + verifyPhone (options: VerifyPhoneOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/phone/verify", + method: "POST", + json: options + }, + json: true + }).then(() => true as VerifyPhone); + } - getSelfPromotionChannels (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/promotion-channels" - }, - json: true - }) - .then(response => response.body as GetSelfPromotionChannels); - } + getSelfPromotionChannels (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/promotion-channels" + }, + json: true + }).then(response => response.body as GetSelfPromotionChannels); + } - getUserPromotionChannels (options: GetUserPromotionChannelsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/promotion-channels` - }, - json: true - }) - .then(response => response.body); - } + getUserPromotionChannels ( + options: GetUserPromotionChannelsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/promotion-channels` + }, + json: true + }).then(response => response.body); + } - updateUserPromotionChannels (options: UpdateUserPromotionChannelsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/promotion-channels", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body as UpdateUserPromotionChannels); - } + updateUserPromotionChannels ( + options: UpdateUserPromotionChannelsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/promotion-channels", + method: "POST", + json: options + }, + json: true + }).then(response => response.body as UpdateUserPromotionChannels); + } - removeStarCodeAffiliate (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/star-code-affiliates", - method: "DELETE" - }, - json: true - }) - .then(() => true as RemoveStarCodeAffiliate); - } + removeStarCodeAffiliate (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/star-code-affiliates", + method: "DELETE" + }, + json: true + }).then(() => true as RemoveStarCodeAffiliate); + } - getStarCodeAffiliate (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/star-code-affiliates" - }, - json: true - }) - .then(response => response.body as GetStarCodeAffiliate); - } + getStarCodeAffiliate (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/star-code-affiliates" + }, + json: true + }).then(response => response.body as GetStarCodeAffiliate); + } - addStarCodeAffiliate (options: AddStarCodeAffiliateOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/star-code-affiliates", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body as AddStarCodeAffiliate); - } + addStarCodeAffiliate ( + options: AddStarCodeAffiliateOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/star-code-affiliates", + method: "POST", + json: options + }, + json: true + }).then(response => response.body as AddStarCodeAffiliate); + } } diff --git a/src/client/apis/AccountSettingsAPI.ts b/src/client/apis/AccountSettingsAPI.ts index 7ebf942d4..fa7c952c8 100644 --- a/src/client/apis/AccountSettingsAPI.ts +++ b/src/client/apis/AccountSettingsAPI.ts @@ -2,461 +2,459 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { UpdateUserPromotionChannelsOptions as AccountInformationUpdateUserPromotionChannelsOptions } from "./AccountInformationAPI"; - export type GetSettingsGroups = { - title: string; - url: string; - suffix: string; + title: string; + url: string; + suffix: string; }[]; export type GetAppChatPrivacy = { - appChatPrivacy: string; -} + appChatPrivacy: string; +}; export type UpdateAppChatPrivacyOptions = { - appChatPrivacy: string; + appChatPrivacy: string; }; export type UpdateAppChatPrivacy = boolean; export type GetGameChatPrivacy = { - gameChatPrivacy: string; -} + gameChatPrivacy: string; +}; export type UpdateGameChatPrivacyOptions = { - gameChatPrivacy: string; + gameChatPrivacy: string; }; export type UpdateGameChatPrivacy = boolean; export type GetInventoryPrivacy = { - inventoryPrivacy: string; -} + inventoryPrivacy: string; +}; export type UpdateInventoryPrivacyOptions = { - inventoryPrivacy: string; + inventoryPrivacy: string; }; export type UpdateInventoryPrivacy = { - inventoryPrivacy: string; - tradePrivacy: string; - privacySettingResponse: string; + inventoryPrivacy: string; + tradePrivacy: string; + privacySettingResponse: string; }; export type GetUserPrivacy = { - phoneDiscovery: string; -} + phoneDiscovery: string; +}; export type UpdateUserPrivacyOptions = { - phoneDiscovery: string; + phoneDiscovery: string; }; export type UpdateUserPrivacy = { - phoneDiscovery: string; -} + phoneDiscovery: string; +}; export type GetUserPrivacySettingsInfo = { - isPhoneDiscoveryEnabled: boolean; -} + isPhoneDiscoveryEnabled: boolean; +}; export type GetUserPrivateMessagePrivacy = { - privateMessagePrivacy: string; -} + privateMessagePrivacy: string; +}; export type UpdateUserPrivateMessagePrivacyOptions = { - privateMessagePrivacy: string; + privateMessagePrivacy: string; }; export type UpdateUserPrivateMessagePrivacy = boolean; export type GetUserEmailStatus = { - email: string; - verified: boolean; -} + email: string; + verified: boolean; +}; export type UpdateUserEmailOptions = { - password: string; - emailAddress: string; + password: string; + emailAddress: string; }; export type UpdateUserEmail = boolean; export type SendEmailVerification = boolean; export type GetWebsiteTheme = { - themeType: string; -} + themeType: string; +}; export type UpdateWebsiteThemeOptions = { - themeType: string; + themeType: string; }; export type UpdateWebsiteTheme = boolean; export type GetWebsiteThemes = { - data: string[]; + data: string[]; }; export type GetUserTradePrivacy = { - tradePrivacy: string; + tradePrivacy: string; }; export type UpdateUserTradePrivacyOptions = { - tradePrivacy: string; + tradePrivacy: string; }; export type UpdateUserTradePrivacy = { - tradePrivacy: string; - inventoryPrivacy: string; - privacySettingResponse: string; + tradePrivacy: string; + inventoryPrivacy: string; + privacySettingResponse: string; }; export type GetUserTradeQualityFilter = { - tradeValue: string; -} + tradeValue: string; +}; export type UpdateUserTradeQualityFilterOptions = { - tradeValue: string; + tradeValue: string; }; export type UpdateUserTradeQualityFilter = boolean; export type UpdateTwoStepStatusOptions = { - enabled: boolean; - password: string; + enabled: boolean; + password: string; }; export type UpdateTwoStepStatus = { - enabled: boolean; - password: string; -} + enabled: boolean; + password: string; +}; export type GetContactUpsell = { - upsellScreenType: string; -} + upsellScreenType: string; +}; export type UpdateContactUpsellSuppressionOptions = { - suppress: boolean; + suppress: boolean; }; export type UpdateContactUpsellSuppression = boolean; export type GetIsXboxUsernameValidOptions = { - authorization: string; - signature: string; - username: string; + authorization: string; + signature: string; + username: string; }; export type GetIsXboxUsernameValid = { - isValid: boolean; - errorMessage?: string; - errorCode?: string; -} -export type UpdateUserPromotionChannelsOptions = AccountInformationUpdateUserPromotionChannelsOptions; + isValid: boolean; + errorMessage?: string; + errorCode?: string; +}; +export type UpdateUserPromotionChannelsOptions = + AccountInformationUpdateUserPromotionChannelsOptions; export type UpdateUserPromotionChannels = boolean; - export default class AccountSettingsAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://accountsettings.roblox.com/", - client - }); - } + constructor (client: Client) { + super({ + baseUrl: "https://accountsettings.roblox.com/", + client + }); + } - getSettingsGroups (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "v1/account/settings/settings-groups" - }, - json: true - }) - .then(response => response.body.map((val: any) => ({ - title: val.Title, - url: val.Url, - suffix: val.Suffix - }))); - } + getSettingsGroups (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "v1/account/settings/settings-groups" + }, + json: true + }).then(response => + response.body.map((val: any) => ({ + title: val.Title, + url: val.Url, + suffix: val.Suffix + })) + ); + } - getAppChatPrivacy (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/app-chat-privacy" - }, - json: true - }) - .then(response => response.body); - } + getAppChatPrivacy (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/app-chat-privacy" + }, + json: true + }).then(response => response.body); + } - updateAppChatPrivacy (options: UpdateAppChatPrivacyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/app-chat-privacy", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateAppChatPrivacy ( + options: UpdateAppChatPrivacyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/app-chat-privacy", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getGameChatPrivacy (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/game-chat-privacy" - }, - json: true - }) - .then(response => response.body); - } + getGameChatPrivacy (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/game-chat-privacy" + }, + json: true + }).then(response => response.body); + } - updateGameChatPrivacy (options: UpdateGameChatPrivacyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/game-chat-privacy", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateGameChatPrivacy ( + options: UpdateGameChatPrivacyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/game-chat-privacy", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getInventoryPrivacy (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/inventory-privacy" - }, - json: true - }) - .then(response => response.body); - } + getInventoryPrivacy (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/inventory-privacy" + }, + json: true + }).then(response => response.body); + } - updateInventoryPrivacy (options: UpdateInventoryPrivacyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/inventory-privacy", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateInventoryPrivacy ( + options: UpdateInventoryPrivacyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/inventory-privacy", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getUserPrivacy (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/privacy" - }, - json: true - }) - .then(response => response.body); - } + getUserPrivacy (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/privacy" + }, + json: true + }).then(response => response.body); + } - updateUserPrivacy (options: UpdateUserPrivacyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/privacy", - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateUserPrivacy ( + options: UpdateUserPrivacyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/privacy", + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } - getUserPrivacySettingsInfo (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/privacy/info" - }, - json: true - }) - .then(response => response.body as GetUserPrivacySettingsInfo); - } + getUserPrivacySettingsInfo (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/privacy/info" + }, + json: true + }).then(response => response.body as GetUserPrivacySettingsInfo); + } - getUserPrivateMessagePrivacy (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/private-message-privacy" - }, - json: true - }) - .then(response => response.body as GetUserPrivateMessagePrivacy); - } + getUserPrivateMessagePrivacy (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/private-message-privacy" + }, + json: true + }).then(response => response.body as GetUserPrivateMessagePrivacy); + } - updateUserPrivateMessagePrivacy (options: UpdateUserPrivateMessagePrivacyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/private-message-privacy", - method: "POST", - json: options - }, - json: true - }) - .then(() => true as UpdateUserPrivateMessagePrivacy); - } + updateUserPrivateMessagePrivacy ( + options: UpdateUserPrivateMessagePrivacyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/private-message-privacy", + method: "POST", + json: options + }, + json: true + }).then(() => true as UpdateUserPrivateMessagePrivacy); + } - getUserEmailStatus (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email" - }, - json: true - }) - .then(response => response.body as GetUserEmailStatus); - } + getUserEmailStatus (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/email" + }, + json: true + }).then(response => response.body as GetUserEmailStatus); + } - updateUserEmail (options: UpdateUserEmailOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email", - method: "PATCH", - json: options - }, - json: true - }) - .then(() => true); - } + updateUserEmail (options: UpdateUserEmailOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/email", + method: "PATCH", + json: options + }, + json: true + }).then(() => true); + } - sendEmailVerification (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email/verify", - method: "POST" - }, - json: true - }) - .then(() => true); - } + sendEmailVerification (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/email/verify", + method: "POST" + }, + json: true + }).then(() => true); + } - getWebsiteTheme (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/themes/User/${this.client.user!.id}` - }, - json: true - }) - .then(response => response.body as GetWebsiteTheme); - } + getWebsiteTheme (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/themes/User/${this.client.user!.id}` + }, + json: true + }).then(response => response.body as GetWebsiteTheme); + } - updateWebsiteTheme (options: UpdateWebsiteThemeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/themes/User/${this.client.user!.id}`, - method: "PATCH", - json: { - themeType: options.themeType - } - }, - json: true - }) - .then(() => true); - } + updateWebsiteTheme ( + options: UpdateWebsiteThemeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/themes/User/${this.client.user!.id}`, + method: "PATCH", + json: { + themeType: options.themeType + } + }, + json: true + }).then(() => true); + } - getWebsiteThemes (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/themes/types" - }, - json: true - }) - .then(response => response.body as GetWebsiteThemes); - } + getWebsiteThemes (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/themes/types" + }, + json: true + }).then(response => response.body as GetWebsiteThemes); + } - getUserTradePrivacy (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-privacy" - }, - json: true - }) - .then(response => response.body as GetUserTradePrivacy); - } + getUserTradePrivacy (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/trade-privacy" + }, + json: true + }).then(response => response.body as GetUserTradePrivacy); + } - updateUserTradePrivacy (options: UpdateUserTradePrivacyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-privacy", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body as UpdateUserTradePrivacy); - } + updateUserTradePrivacy ( + options: UpdateUserTradePrivacyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/trade-privacy", + method: "POST", + json: options + }, + json: true + }).then(response => response.body as UpdateUserTradePrivacy); + } - getUserTradeQualityFilter (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-value" - }, - json: true - }) - .then(response => response.body as GetUserTradeQualityFilter); - } + getUserTradeQualityFilter (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/trade-value" + }, + json: true + }).then(response => response.body as GetUserTradeQualityFilter); + } - updateUserTradeQualityFilter (options: UpdateUserTradeQualityFilterOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-value", - method: "POST", - json: options - }, - json: true - }) - .then(() => true); - } + updateUserTradeQualityFilter ( + options: UpdateUserTradeQualityFilterOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/trade-value", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } - updateTwoStepStatus (options: UpdateTwoStepStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email", - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body as UpdateTwoStepStatus); - } + updateTwoStepStatus ( + options: UpdateTwoStepStatusOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/email", + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body as UpdateTwoStepStatus); + } - getContactUpsell (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user/screens/contact-upsell" - }, - json: true - }) - .then(response => response.body as GetContactUpsell); - } + getContactUpsell (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user/screens/contact-upsell" + }, + json: true + }).then(response => response.body as GetContactUpsell); + } - updateContactUpsellSuppression (options: UpdateContactUpsellSuppressionOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - method: "POST", - path: "v1/user/screens/contact-upsell/suppress", - json: options - }, - json: true - }) - .then(() => true as UpdateContactUpsellSuppression); - } + updateContactUpsellSuppression ( + options: UpdateContactUpsellSuppressionOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + method: "POST", + path: "v1/user/screens/contact-upsell/suppress", + json: options + }, + json: true + }).then(() => true as UpdateContactUpsellSuppression); + } - getIsXboxUsernameValid (options: GetIsXboxUsernameValidOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/xbox/is-username-valid", - qs: { - Authorization: options.authorization, - signature: options.signature, - "request.username": options.username - } - }, - json: true - }) - .then(response => response.body as GetIsXboxUsernameValid); - } + getIsXboxUsernameValid ( + options: GetIsXboxUsernameValidOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/xbox/is-username-valid", + qs: { + Authorization: options.authorization, + signature: options.signature, + "request.username": options.username + } + }, + json: true + }).then(response => response.body as GetIsXboxUsernameValid); + } - updateUserPromotionChannels (options: UpdateUserPromotionChannelsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/promotion-channels", - method: "POST", - json: options - }, - json: true - }) - .then(() => true); - } + updateUserPromotionChannels ( + options: UpdateUserPromotionChannelsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/promotion-channels", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } } diff --git a/src/client/apis/AdConfigurationAPI.ts b/src/client/apis/AdConfigurationAPI.ts index 9d60ac121..2b4ad9906 100644 --- a/src/client/apis/AdConfigurationAPI.ts +++ b/src/client/apis/AdConfigurationAPI.ts @@ -1,11 +1,10 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export declare type GetSponsoredGamesOptions = { - groupId?: number; - startRowIndex?: number; - count?: number; + groupId?: number; + startRowIndex?: number; + count?: number; }; export declare type CreateAdOptions = unknown; @@ -13,112 +12,109 @@ export declare type RunAdOptions = unknown; export declare type StopAdOptions = unknown; export declare type GetCreateAdMetaData = { - universeId: number; - universeCreatorType: string; - universeCreatorTargetId: number; - areNativeAdsForPhoneEnabled: boolean; - areNativeAdsForTabletEnabled: boolean; - areNativeAdsForDesktopEnabled: boolean; - areNativeAdsForConsoleEnabled: boolean; -} + universeId: number; + universeCreatorType: string; + universeCreatorTargetId: number; + areNativeAdsForPhoneEnabled: boolean; + areNativeAdsForTabletEnabled: boolean; + areNativeAdsForDesktopEnabled: boolean; + areNativeAdsForConsoleEnabled: boolean; +}; export declare type GetSponsoredGames = { - sponsoredGames: { - adId: number; - universeName: string; - universeRootPlaceId: number; - targetDeviceType: string; - totalBid: number; - totalImpressions: number; - totalClicks: number; - campaign: { - bid: number; - clicks: number; - impressions: 0; - isRunning: boolean; - }; - gameIconUrl: string; - costPerImpressionEstimate: number; + sponsoredGames: { + adId: number; + universeName: string; + universeRootPlaceId: number; + targetDeviceType: string; + totalBid: number; + totalImpressions: number; + totalClicks: number; + campaign: { + bid: number; + clicks: number; + impressions: 0; + isRunning: boolean; }; - nextPageStartRowIndex: number; - creatorType: "User" | "Group"; - isErroneous: boolean; - minimumBidAmount: number; -} + gameIconUrl: string; + costPerImpressionEstimate: number; + }; + nextPageStartRowIndex: number; + creatorType: "User" | "Group"; + isErroneous: boolean; + minimumBidAmount: number; +}; export declare type CreateAd = unknown; export declare type RunAd = unknown; export declare type StopAd = unknown; export default class AdConfigurationAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://adconfiguration.roblox.com/", - client - }); - } + constructor (client: Client) { + super({ + baseUrl: "https://adconfiguration.roblox.com/", + client + }); + } - getCreateAdMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "/v1/sponsored-games/create-ad/metadata" - }, - json: true - }) - .then(response => response.body as GetCreateAdMetaData); - } + getCreateAdMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "/v1/sponsored-games/create-ad/metadata" + }, + json: true + }).then(response => response.body as GetCreateAdMetaData); + } - getSponsoredGames (options: GetSponsoredGamesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "/v1/sponsored-games/sponsored-games", - qs: { - groupId: options.groupId || null, - startRowIndex: options.startRowIndex || 0, - count: options.count || 50 - } - }, - json: true - }) - .then(response => response.body as GetSponsoredGames); - } + getSponsoredGames ( + options: GetSponsoredGamesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "/v1/sponsored-games/sponsored-games", + qs: { + groupId: options.groupId || null, + startRowIndex: options.startRowIndex || 0, + count: options.count || 50 + } + }, + json: true + }).then(response => response.body as GetSponsoredGames); + } - createAd (options: CreateAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "/v1/sponsored-games/create-ad", - method: "POST", - json: options as any - }, - json: true - }) - .then(response => response.body as CreateAd); - } + createAd (options: CreateAdOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "/v1/sponsored-games/create-ad", + method: "POST", + json: options as any + }, + json: true + }).then(response => response.body as CreateAd); + } - runAd (options: RunAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "/v1/sponsored-games/run", - method: "POST", - json: options as any - }, - json: true - }) - .then(response => response.body as RunAd); - } + runAd (options: RunAdOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "/v1/sponsored-games/run", + method: "POST", + json: options as any + }, + json: true + }).then(response => response.body as RunAd); + } - stopAd (options: StopAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "/v1/sponsored-games/stop", - method: "POST", - json: options as any - }, - json: true - }) - .then(response => response.body as StopAd); - } + stopAd (options: StopAdOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "/v1/sponsored-games/stop", + method: "POST", + json: options as any + }, + json: true + }).then(response => response.body as StopAd); + } } diff --git a/src/client/apis/AdsAPI.ts b/src/client/apis/AdsAPI.ts index 03407d4fb..065ed8d82 100644 --- a/src/client/apis/AdsAPI.ts +++ b/src/client/apis/AdsAPI.ts @@ -1,87 +1,84 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export declare type CreateAssetAdOptions = { - assetId: number; - name: string; - file: unknown; + assetId: number; + name: string; + file: unknown; }; export declare type CreateGamePassAdOptions = { - gamePassId: number; - name: string; - file: unknown; + gamePassId: number; + name: string; + file: unknown; }; export declare type CreateGroupAdOptions = { - groupId: number; - name: string; - file: unknown; + groupId: number; + name: string; + file: unknown; }; export declare type CreateAssetAd = unknown; export declare type CreateGamePassAd = unknown; export declare type CreateGroupAd = unknown; - export default class AdsAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://ads.roblox.com/", - client - }); - } + constructor (client: Client) { + super({ + baseUrl: "https://ads.roblox.com/", + client + }); + } - createAssetAd (options: CreateAssetAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user-ads/assets/create", - method: "POST", - formData: { - name: options.name, - files: options.file - }, - qs: { - assetId: options.assetId - } - } - }) - .then(response => response.body as CreateAssetAd); - } + createAssetAd (options: CreateAssetAdOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user-ads/assets/create", + method: "POST", + formData: { + name: options.name, + files: options.file + }, + qs: { + assetId: options.assetId + } + } + }).then(response => response.body as CreateAssetAd); + } - createGamePassAd (options: CreateGamePassAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user-ads/game-pass/create", - method: "POST", - formData: { - name: options.name, - files: options.file - }, - qs: { - gamePassId: options.gamePassId - } - } - }) - .then(response => response.body as CreateGamePassAd); - } + createGamePassAd ( + options: CreateGamePassAdOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user-ads/game-pass/create", + method: "POST", + formData: { + name: options.name, + files: options.file + }, + qs: { + gamePassId: options.gamePassId + } + } + }).then(response => response.body as CreateGamePassAd); + } - createGroupAd (options: CreateGroupAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user-ads/groups/create", - method: "POST", - formData: { - name: options.name, - files: options.file - }, - qs: { - groupId: options.groupId - } - } - }) - .then(response => response.body as CreateGroupAd); - } + createGroupAd (options: CreateGroupAdOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user-ads/groups/create", + method: "POST", + formData: { + name: options.name, + files: options.file + }, + qs: { + groupId: options.groupId + } + } + }).then(response => response.body as CreateGroupAd); + } } diff --git a/src/client/apis/AssetDeliveryAPI.ts b/src/client/apis/AssetDeliveryAPI.ts index 3dad6f1c4..76256a1ef 100644 --- a/src/client/apis/AssetDeliveryAPI.ts +++ b/src/client/apis/AssetDeliveryAPI.ts @@ -1,269 +1,314 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type BaseAssetDeliveryOptions = { - acceptEncoding: string; - robloxPlaceId: number; - assetType: string; - accept: string; - skipSigningScripts: boolean; - clientInsert: number; - scriptInsert: number; - modulePlaceId: number; - serverPlaceId: number; - expectedAssetType: string; + acceptEncoding: string; + robloxPlaceId: number; + assetType: string; + accept: string; + skipSigningScripts: boolean; + clientInsert: number; + scriptInsert: number; + modulePlaceId: number; + serverPlaceId: number; + expectedAssetType: string; }; export type BaseAsset = { - location?: string; - errors?: { code: number; message: string }[]; - requestId?: string; - isHashDynamic?: boolean; - isCopyrightProtected?: boolean; - isArchived?: boolean; + location?: string; + errors?: { code: number; message: string }[]; + requestId?: string; + isHashDynamic?: boolean; + isCopyrightProtected?: boolean; + isArchived?: boolean; }; export type BaseAssetRaw = { - Location?: string; - Errors?: { Code: number; Message: string }[]; - RequestId?: string; - IsHashDynamic?: boolean; - IsCopyrightProtected?: boolean; - IsArchived?: boolean; + Location?: string; + Errors?: { Code: number; Message: string }[]; + RequestId?: string; + IsHashDynamic?: boolean; + IsCopyrightProtected?: boolean; + IsArchived?: boolean; }; const convertToBaseAsset = (options: BaseAssetRaw): BaseAsset => ({ - errors: typeof options.Errors !== "undefined" ? options.Errors.map(v => ({ + errors: + typeof options.Errors !== "undefined" ? + options.Errors.map(v => ({ message: v.Message, code: v.Code - })) : undefined, - isArchived: typeof options.IsArchived !== "undefined" ? options.IsArchived : undefined, - isCopyrightProtected: typeof options.IsCopyrightProtected !== "undefined" ? options.IsCopyrightProtected : undefined, - isHashDynamic: typeof options.IsHashDynamic !== "undefined" ? options.IsHashDynamic : undefined, - location: typeof options.Location !== "undefined" ? options.Location : undefined, - requestId: typeof options.RequestId !== "undefined" ? options.RequestId : undefined + })) : + undefined, + isArchived: + typeof options.IsArchived !== "undefined" ? options.IsArchived : undefined, + isCopyrightProtected: + typeof options.IsCopyrightProtected !== "undefined" ? + options.IsCopyrightProtected : + undefined, + isHashDynamic: + typeof options.IsHashDynamic !== "undefined" ? + options.IsHashDynamic : + undefined, + location: + typeof options.Location !== "undefined" ? options.Location : undefined, + requestId: + typeof options.RequestId !== "undefined" ? options.RequestId : undefined }); -const generateBaseDeliveryAssetOptions = (options: BaseAssetDeliveryOptions) => ({ - headers: { - "Accept-Encoding": options.acceptEncoding, - "Roblox-Place-Id": options.robloxPlaceId, - AssetType: options.assetType, - Accept: options.accept - }, - qs: { - skipSigningScripts: options.skipSigningScripts ? "true" : "false", - clientInsert: options.clientInsert, - scriptinsert: options.scriptInsert, - modulePlaceId: options.modulePlaceId, - serverplaceid: options.serverPlaceId, - expectedAssetType: options.expectedAssetType - } +const generateBaseDeliveryAssetOptions = ( + options: BaseAssetDeliveryOptions +) => ({ + headers: { + "Accept-Encoding": options.acceptEncoding, + "Roblox-Place-Id": options.robloxPlaceId, + AssetType: options.assetType, + Accept: options.accept + }, + qs: { + skipSigningScripts: options.skipSigningScripts ? "true" : "false", + clientInsert: options.clientInsert, + scriptinsert: options.scriptInsert, + modulePlaceId: options.modulePlaceId, + serverplaceid: options.serverPlaceId, + expectedAssetType: options.expectedAssetType + } }); -export type GetAssetByAliasOptions = BaseAssetDeliveryOptions & { alias: string }; +export type GetAssetByAliasOptions = BaseAssetDeliveryOptions & { + alias: string; +}; export type GetAssetByAlias = BaseAsset; export type GetAssetByIdOptions = BaseAssetDeliveryOptions & { id: number }; export type GetAssetById = { - location?: string; - request?: unknown; + location?: string; + request?: unknown; }; export type GetAssetByHashOptions = BaseAssetDeliveryOptions & { hash: string }; export type GetAssetByHash = unknown; -export type GetAssetByAssetIdOptions = BaseAssetDeliveryOptions & { assetId: number }; +export type GetAssetByAssetIdOptions = BaseAssetDeliveryOptions & { + assetId: number; +}; export type GetAssetByAssetId = unknown; -export type GetAssetVersionByAssetIdOptions = BaseAssetDeliveryOptions & { assetId: number; version: number } +export type GetAssetVersionByAssetIdOptions = BaseAssetDeliveryOptions & { + assetId: number; + version: number; +}; export type GetAssetVersionByAssetId = unknown; -export type GetAssetByAssetVersionIdOptions = BaseAssetDeliveryOptions & { assetVersionId: number } +export type GetAssetByAssetVersionIdOptions = BaseAssetDeliveryOptions & { + assetVersionId: number; +}; export type GetAssetByAssetVersionId = unknown; -export type GetAssetByMarAssetHashOptions = BaseAssetDeliveryOptions & { marAssetHash: string; marCheckSum: string } +export type GetAssetByMarAssetHashOptions = BaseAssetDeliveryOptions & { + marAssetHash: string; + marCheckSum: string; +}; export type GetAssetByMarAssetHash = unknown; -export type GetAssetByUserAssetIdOptions = BaseAssetDeliveryOptions & { userAssetId: number } -export type GetAssetByUserAssetId = unknown +export type GetAssetByUserAssetIdOptions = BaseAssetDeliveryOptions & { + userAssetId: number; +}; +export type GetAssetByUserAssetId = unknown; export type GetBatchAssetsOptions = { - assetName: string; - assetType: string; - clientInsert: boolean; - placeId: number; - requestId: string; - scriptInsert: boolean; - serverPlaceId: number; - universeId: number; - accept: string; - encoding: string; - hash: string; - userAssetId: number; - assetId: number; - version: number; - assetVersionId: number; - modulePlaceId: number; + assetName: string; + assetType: string; + clientInsert: boolean; + placeId: number; + requestId: string; + scriptInsert: boolean; + serverPlaceId: number; + universeId: number; + accept: string; + encoding: string; + hash: string; + userAssetId: number; + assetId: number; + version: number; + assetVersionId: number; + modulePlaceId: number; }; export type GetBatchAssets = BaseAsset[]; export default class AssetDeliveryAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://assetdelivery.roblox.com/", - client - }); - } + constructor (client: Client) { + super({ + baseUrl: "https://assetdelivery.roblox.com/", + client + }); + } - getAssetByAlias (options: GetAssetByAliasOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/alias/${options.alias}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetByAlias); - } + getAssetByAlias (options: GetAssetByAliasOptions): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/alias/${options.alias}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then(response => convertToBaseAsset(response.body) as GetAssetByAlias); + } - getAssetById (options: GetAssetByIdOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/asset`, - qs: { - ...generatedOptions.qs, - id: options.id - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => ({ - location: response.body.Location || undefined, - request: response.body.Request - })); - } + getAssetById (options: GetAssetByIdOptions): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/asset`, + qs: { + ...generatedOptions.qs, + id: options.id + }, + headers: { + ...generatedOptions.headers + } + } + }).then(response => ({ + location: response.body.Location || undefined, + request: response.body.Request + })); + } - getAssetByHash (options: GetAssetByHashOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/assetHash/${options.hash}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetByHash); - } + getAssetByHash (options: GetAssetByHashOptions): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetHash/${options.hash}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then(response => convertToBaseAsset(response.body) as GetAssetByHash); + } - getAssetByAssetId (options: GetAssetByAssetIdOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/assetId/${options.assetId}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetByAssetId); - } + getAssetByAssetId ( + options: GetAssetByAssetIdOptions + ): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetId/${options.assetId}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then( + response => convertToBaseAsset(response.body) as GetAssetByAssetId + ); + } - getAssetVersionByAssetId (options: GetAssetVersionByAssetIdOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/assetId/${options.assetId}/version/${options.version}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetVersionByAssetId); - } + getAssetVersionByAssetId ( + options: GetAssetVersionByAssetIdOptions + ): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetId/${options.assetId}/version/${options.version}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then( + response => + convertToBaseAsset(response.body) as GetAssetVersionByAssetId + ); + } - getAssetByAssetVersionId (options: GetAssetByAssetVersionIdOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/assetVersionId/${options.assetVersionId}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetByAssetVersionId); - } + getAssetByAssetVersionId ( + options: GetAssetByAssetVersionIdOptions + ): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetVersionId/${options.assetVersionId}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then( + response => + convertToBaseAsset(response.body) as GetAssetByAssetVersionId + ); + } - getAssetByMarAssetHash (options: GetAssetByMarAssetHashOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/marAssetHash/${options.marAssetHash}/marCheckSum/${options.marCheckSum}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetByMarAssetHash); - } + getAssetByMarAssetHash ( + options: GetAssetByMarAssetHashOptions + ): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/marAssetHash/${options.marAssetHash}/marCheckSum/${options.marCheckSum}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then( + response => convertToBaseAsset(response.body) as GetAssetByMarAssetHash + ); + } - getAssetByUserAssetId (options: GetAssetByUserAssetIdOptions): Promise { - const generatedOptions = generateBaseDeliveryAssetOptions(options); - return this.request({ - json: true, - requiresAuth: true, - request: { - path: `v1/userAssetId/${options.userAssetId}`, - qs: { - ...generatedOptions.qs - }, - headers: { - ...generatedOptions.headers - } - } - }) - .then(response => convertToBaseAsset(response.body) as GetAssetByUserAssetId); - } + getAssetByUserAssetId ( + options: GetAssetByUserAssetIdOptions + ): Promise { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/userAssetId/${options.userAssetId}`, + qs: { + ...generatedOptions.qs + }, + headers: { + ...generatedOptions.headers + } + } + }).then( + response => convertToBaseAsset(response.body) as GetAssetByUserAssetId + ); + } - getBatchAssets (options: GetBatchAssetsOptions): Promise { - return this.request({ - requiresAuth: true, - json: true, - request: { - path: "v1/assets/bath", - method: "POST", - json: options - } - }) - .then(response => response.body.map((value: BaseAssetRaw) => convertToBaseAsset(value)) as GetBatchAssets); - } + getBatchAssets (options: GetBatchAssetsOptions): Promise { + return this.request({ + requiresAuth: true, + json: true, + request: { + path: "v1/assets/bath", + method: "POST", + json: options + } + }).then( + response => + response.body.map((value: BaseAssetRaw) => + convertToBaseAsset(value) + ) as GetBatchAssets + ); + } } diff --git a/src/client/apis/AuthAPI.ts b/src/client/apis/AuthAPI.ts index 764648502..3448e91fe 100644 --- a/src/client/apis/AuthAPI.ts +++ b/src/client/apis/AuthAPI.ts @@ -1,568 +1,565 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetAuthTicket = { - authTicket: string; + authTicket: string; }; export type GetAuthMetaData = { - cookieLawNoticeTimeout: number; + cookieLawNoticeTimeout: number; }; export type LoginOptions = { - ctype: "Email" | "Username" | string; - cvalue: string; - password: string; - captchaToken: string; - captchaProvider: "PROVIDER_ARKOSELABS" | string; + ctype: "Email" | "Username" | string; + cvalue: string; + password: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; }; export type Login = { - user: { - id: number; - name: string; - displayName: string; - }; - twoStepVerificationData?: { - mediaType: "Email" | string; - ticket: string; - }; + user: { + id: number; + name: string; + displayName: string; + }; + twoStepVerificationData?: { + mediaType: "Email" | string; + ticket: string; + }; }; export type Logout = unknown; export type GetCredentialsVerificationStatusOptions = { - credentialType: "Email" | "Username" | "PhoneNumber"; - credentialValue: string; - password: string; -} + credentialType: "Email" | "Username" | "PhoneNumber"; + credentialValue: string; + password: string; +}; export type GetCredentialsVerificationStatus = { - canSend: boolean; -} + canSend: boolean; +}; export type SendCredentialsVerificationMessageOptions = { - credentialType: "Email" | "Username" | "PhoneNumber"; - credentialValue: string; - password: string; + credentialType: "Email" | "Username" | "PhoneNumber"; + credentialValue: string; + password: string; }; export type SendCredentialsVerificationMessage = unknown; export type GetMetaData = { - isUpdateUsernameEnabled: boolean; - ftuxAvatarAssetMap: string; + isUpdateUsernameEnabled: boolean; + ftuxAvatarAssetMap: string; }; export type GetCurrentPasswordStatus = { - valid: boolean; - + valid: boolean; }; export type GetPasswordResetMetaDataOptions = { - targetType: "Email" | "PhoneNumber"; - ticket: string; -} + targetType: "Email" | "PhoneNumber"; + ticket: string; +}; export type GetPasswordResetMetaData = { - users: { - userId: number; - username: string; - displayName: string; - }[]; -} -export type ResetPasswordOptions = { - targetType: "Email" | "PhoneNumber"; - ticket: string; + users: { userId: number; - password: string; - passwordRepeated: string; + username: string; + displayName: string; + }[]; +}; +export type ResetPasswordOptions = { + targetType: "Email" | "PhoneNumber"; + ticket: string; + userId: number; + password: string; + passwordRepeated: string; }; export type ResetPassword = Login; export type ValidatePasswordOptions = { - username: string; - password: string; -} + username: string; + password: string; +}; export type ValidatePassword = { - code: string; - message: string; -} + code: string; + message: string; +}; export type SendPasswordResetOptions = { - targetType: ResetPasswordOptions["targetType"]; - target: string; - captchaToken: string; - captchaProvider: "PROVIDER_ARKOSELABS" | string; -} + targetType: ResetPasswordOptions["targetType"]; + target: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; export type SendPasswordReset = { - nonce: string; - transmissionType: string; -} + nonce: string; + transmissionType: string; +}; export type VerifyPasswordResetOptions = { - targetType: ResetPasswordOptions["targetType"]; - nonce: string; - code: string; -} + targetType: ResetPasswordOptions["targetType"]; + nonce: string; + code: string; +}; export type VerifyPasswordReset = { - userTickets: { - user: { - userId: number; - username: string; - displayName: string; - }; - ticket: string; - }[]; -} + userTickets: { + user: { + userId: number; + username: string; + displayName: string; + }; + ticket: string; + }[]; +}; export type ChangeUserPasswordOptions = { - currentPassword: string; - newPassword: string; -} + currentPassword: string; + newPassword: string; +}; export type ChangeUserPassword = unknown; export type GetRecoveryMetaData = { - isOnPhone: boolean; - codeLength: number; - isPhoneFeatureEnabledForUsername: boolean; - isPhoneFeatureEnabledForPassword: boolean; - isBedev2CaptchaEnabledForPasswordReset: boolean; -} + isOnPhone: boolean; + codeLength: number; + isPhoneFeatureEnabledForUsername: boolean; + isPhoneFeatureEnabledForPassword: boolean; + isBedev2CaptchaEnabledForPasswordReset: boolean; +}; export type RevertAccountInfoOptions = { - ticket: string; -} + ticket: string; +}; export type RevertAccountInfo = { - isTwoStepVerificationEnabled: boolean; - isEmailVerified: boolean; - isEmailChanged: boolean; - userId: number; - username: string; - ticket: string; -} + isTwoStepVerificationEnabled: boolean; + isEmailVerified: boolean; + isEmailChanged: boolean; + userId: number; + username: string; + ticket: string; +}; export type RevertAccountOptions = { - userId: number; - newPassword: string; - ticket: string; -} + userId: number; + newPassword: string; + ticket: string; +}; export type RevertAccount = Login; export type GetSAMLMetaData = unknown; -export type SAMLRequest = unknown +export type SAMLRequest = unknown; export type GetTwoStepVerificationMetaData = { - codeLength: number; - loadingImageUrl: string; - supportUrl: string; -} + codeLength: number; + loadingImageUrl: string; + supportUrl: string; +}; export type ResendTwoStepVerificationOptions = { - username: string; - ticket: string; - actionType: string; -} + username: string; + ticket: string; + actionType: string; +}; export type ResendTwoStepVerification = RequestTwoStepVerification; export type RequestTwoStepVerification = { - mediaType: "Email" | "PhoneNumber" | string; - ticket: string; + mediaType: "Email" | "PhoneNumber" | string; + ticket: string; }; export type VerifyTwoStepVerificationOptions = { - username: string; - ticket: string; - code: string; - rememberDevice: boolean; - actionType: string; -} -export type VerifyTwoStepVerification = unknown + username: string; + ticket: string; + code: string; + rememberDevice: boolean; + actionType: string; +}; +export type VerifyTwoStepVerification = unknown; export type GetExistingUsernamesOptions = { - username: string; -} + username: string; +}; export type GetExistingUsernames = { - usernames: string[]; -} + usernames: string[]; +}; export type ValidateUsernameOptions = { - username: string; - birthday: string; - context: "Unknown" | "Signup" | "UsernameChange" | string; -} + username: string; + birthday: string; + context: "Unknown" | "Signup" | "UsernameChange" | string; +}; export type ValidateUsername = { - code: string; - message: string; -} + code: string; + message: string; +}; export type RecoverUsernamesOptions = { - targetType: "Email" | string; - target: string; -} + targetType: "Email" | string; + target: string; +}; export type RecoverUsernames = { - transmissionType: string; + transmissionType: string; }; export type SignUpOptions = { - username: string; - password: string; - gender: "Unknown" | string; - birthday: string; - isTosAgreementBoxChecked: boolean; - email: string; - locale: string; - assetIds: number[]; - bodyColorId: number; - bodyTypeScale: number; - headScale: number; - heightScale: number; - widthScale: number; - proportionScale: number; - captchaToken: string; - captchaProvider: string; -} + username: string; + password: string; + gender: "Unknown" | string; + birthday: string; + isTosAgreementBoxChecked: boolean; + email: string; + locale: string; + assetIds: number[]; + bodyColorId: number; + bodyTypeScale: number; + headScale: number; + heightScale: number; + widthScale: number; + proportionScale: number; + captchaToken: string; + captchaProvider: string; +}; export type SignUp = { - userId: number; - starterPlaceId: number; -} + userId: number; + starterPlaceId: number; +}; export type ChangeUsernameOptions = { - username: string; - password: string; -} -export type ChangeUsername = unknown + username: string; + password: string; +}; +export type ChangeUsername = unknown; export default class AuthAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://auth.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://auth.roblox.com/" + }); + } - getAuthTicket (): Promise { - return this.request({ - json: true, - requiresAuth: true, - request: { - path: "v1/authentication-ticket", - method: "POST", - headers: { - referer: "https://www.roblox.com/", - origin: "roblox.com" - } - } - }) - .then(response => ({ - authTicket: response.headers["rbx-authentication-ticket"] - })); - } + getAuthTicket (): Promise { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v1/authentication-ticket", + method: "POST", + headers: { + referer: "https://www.roblox.com/", + origin: "roblox.com" + } + } + }).then(response => ({ + authTicket: response.headers["rbx-authentication-ticket"] + })); + } - getAuthMetaData (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/auth/metadata" - } - }) - .then(response => response.body as GetAuthMetaData); - } + getAuthMetaData (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/auth/metadata" + } + }).then(response => response.body as GetAuthMetaData); + } - login (options: LoginOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/login", - method: "POST", - json: options - } - }) - .then(response => response.body as Login); - } + login (options: LoginOptions): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/login", + method: "POST", + json: options + } + }).then(response => response.body as Login); + } - logout (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/logout", - method: "POST" - } - }) - .then(response => response.body as Logout); - } + logout (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/logout", + method: "POST" + } + }).then(response => response.body as Logout); + } - getCredentialsVerificationStatus (options: GetCredentialsVerificationStatusOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/credentials/verification", - qs: { - "request.credentialType": options.credentialType, - "request.credentialValue": options.credentialValue, - "request.password": options.password - } - } - }) - .then(response => response.body as GetCredentialsVerificationStatus); - } + getCredentialsVerificationStatus ( + options: GetCredentialsVerificationStatusOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/credentials/verification", + qs: { + "request.credentialType": options.credentialType, + "request.credentialValue": options.credentialValue, + "request.password": options.password + } + } + }).then(response => response.body as GetCredentialsVerificationStatus); + } - sendCredentialsVerificationMessage (options: SendCredentialsVerificationMessageOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/credentials/verification/send", - method: "POST", - json: options - } - }) - .then(response => response.body as SendCredentialsVerificationMessage); - } + sendCredentialsVerificationMessage ( + options: SendCredentialsVerificationMessageOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/credentials/verification/send", + method: "POST", + json: options + } + }).then(response => response.body as SendCredentialsVerificationMessage); + } - getMetaData (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/metadata" - } - }) - .then(response => response.body as GetMetaData); - } + getMetaData (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/metadata" + } + }).then(response => response.body as GetMetaData); + } - getCurrentUserPasswordStatus (): Promise { - return this.request({ - json: true, - requiresAuth: true, - request: { - path: "v2/passwords/current-status" - } - }) - .then(response => response.body as GetCurrentPasswordStatus); - } + getCurrentUserPasswordStatus (): Promise { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v2/passwords/current-status" + } + }).then(response => response.body as GetCurrentPasswordStatus); + } - getPasswordResetMetaData (options: GetPasswordResetMetaDataOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/passwords/reset", - qs: { - "request.targetType": options.targetType, - "request.ticket": options.ticket - } - } - }) - .then(response => response.body as GetPasswordResetMetaData); - } + getPasswordResetMetaData ( + options: GetPasswordResetMetaDataOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset", + qs: { + "request.targetType": options.targetType, + "request.ticket": options.ticket + } + } + }).then(response => response.body as GetPasswordResetMetaData); + } - resetPassword (options: ResetPasswordOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/auth/metadata", - method: "POST", - json: options - } - }) - .then(response => response.body as ResetPassword); - } + resetPassword (options: ResetPasswordOptions): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/auth/metadata", + method: "POST", + json: options + } + }).then(response => response.body as ResetPassword); + } - validatePassword (options: ValidatePasswordOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/passwords/validate", - qs: { - "request.username": options.username, - "request.password": options.password - } - } - }) - .then(response => response.body as ValidatePassword); - } + validatePassword ( + options: ValidatePasswordOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/validate", + qs: { + "request.username": options.username, + "request.password": options.password + } + } + }).then(response => response.body as ValidatePassword); + } - sendPasswordReset (options: SendPasswordResetOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/passwords/reset/send", - method: "POST", - json: options - } - }) - .then(response => response.body as SendPasswordReset); - } + sendPasswordReset ( + options: SendPasswordResetOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset/send", + method: "POST", + json: options + } + }).then(response => response.body as SendPasswordReset); + } - verifyPasswordReset (options: VerifyPasswordResetOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/passwords/reset/verify", - method: "POST", - json: options - } - }) - .then(response => response.body as VerifyPasswordReset); - } + verifyPasswordReset ( + options: VerifyPasswordResetOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset/verify", + method: "POST", + json: options + } + }).then(response => response.body as VerifyPasswordReset); + } - changeUserPassword (options: ChangeUserPasswordOptions): Promise { - return this.request({ - json: true, - requiresAuth: true, - request: { - path: "v2/user/passwords/change", - method: "POST", - json: options - } - }) - .then(response => response.body as ChangeUserPassword); - } + changeUserPassword ( + options: ChangeUserPasswordOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v2/user/passwords/change", + method: "POST", + json: options + } + }).then(response => response.body as ChangeUserPassword); + } - getRecoveryMetaData (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/recovery/metadata" - } - }) - .then(response => response.body as GetRecoveryMetaData); - } + getRecoveryMetaData (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/recovery/metadata" + } + }).then(response => response.body as GetRecoveryMetaData); + } - getRevertAccountInfo (options: RevertAccountInfoOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/revert/account", - qs: { - ticket: options.ticket - } - } - }) - .then(response => response.body as RevertAccountInfo); - } + getRevertAccountInfo ( + options: RevertAccountInfoOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/revert/account", + qs: { + ticket: options.ticket + } + } + }).then(response => response.body as RevertAccountInfo); + } - revertAccount (options: RevertAccountOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/revert/account", - method: "POST", - json: options - } - }) - .then(response => response.body as RevertAccount); - } + revertAccount (options: RevertAccountOptions): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/revert/account", + method: "POST", + json: options + } + }).then(response => response.body as RevertAccount); + } - getSAMLMetaData (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/saml/metadata" - } - }) - .then(response => response.body as GetSAMLMetaData); - } + getSAMLMetaData (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/saml/metadata" + } + }).then(response => response.body as GetSAMLMetaData); + } - samlAuthenticate (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/saml/login", - method: "POST" - } - }) - .then(response => response.body as SAMLRequest); - } + samlAuthenticate (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/saml/login", + method: "POST" + } + }).then(response => response.body as SAMLRequest); + } - getTwoStepVerificationMetaData (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/twostepverification/metadata" - } - }) - .then(response => response.body as GetTwoStepVerificationMetaData); - } + getTwoStepVerificationMetaData (): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/metadata" + } + }).then(response => response.body as GetTwoStepVerificationMetaData); + } - resendTwoStepVerificationCode (options: ResendTwoStepVerificationOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/twostepverification/resend", - method: "POST", - json: options - } - }) - .then(response => response.body as ResendTwoStepVerification); - } + resendTwoStepVerificationCode ( + options: ResendTwoStepVerificationOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/resend", + method: "POST", + json: options + } + }).then(response => response.body as ResendTwoStepVerification); + } - verifyTwoStepCode (options: VerifyTwoStepVerificationOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/twostepverification/verify", - method: "POST", - json: options - } - }) - .then(response => response.body as VerifyTwoStepVerification); - } + verifyTwoStepCode ( + options: VerifyTwoStepVerificationOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/verify", + method: "POST", + json: options + } + }).then(response => response.body as VerifyTwoStepVerification); + } - getExistingUsernames (options: GetExistingUsernamesOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/usernames", - qs: { - username: options.username - } - } - }) - .then(response => response.body as GetExistingUsernames); - } + getExistingUsernames ( + options: GetExistingUsernamesOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/usernames", + qs: { + username: options.username + } + } + }).then(response => response.body as GetExistingUsernames); + } - validateUsername (options: ValidateUsernameOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/usernames/validate", - qs: { - "request.username": options.username, - "request.birthday": options.birthday, - "request.context": options.context - } - } - }) - .then(response => response.body as ValidateUsername); - } + validateUsername ( + options: ValidateUsernameOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/usernames/validate", + qs: { + "request.username": options.username, + "request.birthday": options.birthday, + "request.context": options.context + } + } + }).then(response => response.body as ValidateUsername); + } - recoverUsernames (options: RecoverUsernamesOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/twostepverification/metadata", - json: options - } - }) - .then(response => response.body as RecoverUsernames); - } + recoverUsernames ( + options: RecoverUsernamesOptions + ): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/metadata", + json: options + } + }).then(response => response.body as RecoverUsernames); + } - signUp (options: SignUpOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/twostepverification/metadata", - method: "POST", - json: options - } - }) - .then(response => response.body as SignUp); - } + signUp (options: SignUpOptions): Promise { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/metadata", + method: "POST", + json: options + } + }).then(response => response.body as SignUp); + } - changeUserUsername (options: ChangeUsernameOptions): Promise { - return this.request({ - json: true, - requiresAuth: true, - request: { - path: "v2/username", - method: "POST", - json: options - } - }) - .then(response => response.body as ChangeUsername); - } + changeUserUsername (options: ChangeUsernameOptions): Promise { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v2/username", + method: "POST", + json: options + } + }).then(response => response.body as ChangeUsername); + } } diff --git a/src/client/apis/AvatarAPI.ts b/src/client/apis/AvatarAPI.ts index f919ae1ce..6c5e2fd4e 100644 --- a/src/client/apis/AvatarAPI.ts +++ b/src/client/apis/AvatarAPI.ts @@ -1,452 +1,452 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type BodyScales = { - height: number; - width: number; - head: number; - depth: number; - proportion: number; - bodyType: number; -} + height: number; + width: number; + head: number; + depth: number; + proportion: number; + bodyType: number; +}; export type BodyColors = { - headColorId: number; - torsoColorId: number; - rightArmColorId: number; - leftArmColorId: number; - rightLegColorId: number; - leftLegColorId: number; + headColorId: number; + torsoColorId: number; + rightArmColorId: number; + leftArmColorId: number; + rightLegColorId: number; + leftLegColorId: number; }; export type Scale = { - min: number; - max: number; - increment: number; + min: number; + max: number; + increment: number; }; export type ColorPalette = { - brickColorId: number; - hexColor: string; - name: string; -} + brickColorId: number; + hexColor: string; + name: string; +}; export type UserAvatar = { - scales: BodyScales; - playerAvatarType: "R6" | "R15" | string; - bodyColors: BodyColors; - assets: { - id: number; - name: string; - assetType: { - id: number; - name: string; - }; - }[]; - defaultShirtApplied: boolean; - defaultPantsApplied: boolean; - emotes: { - assetId: number; - assetName: string; - position: number; - }[]; -} + scales: BodyScales; + playerAvatarType: "R6" | "R15" | string; + bodyColors: BodyColors; + assets: { + id: number; + name: string; + assetType: { + id: number; + name: string; + }; + }[]; + defaultShirtApplied: boolean; + defaultPantsApplied: boolean; + emotes: { + assetId: number; + assetName: string; + position: number; + }[]; +}; export type GetAvatarMetadata = { - enableDefaultClothingMessage: boolean; - isAvatarScaleEmbeddedInTab: boolean; - isBodyTypeScaleOutOfTab: boolean; - scaleHeightIncrement: number; - scaleWidthIncrement: number; - scaleHeadIncrement: number; - scaleProportionIncrement: number; - scaleBodyTypeIncrement: number; - supportProportionAndBodyType: boolean; - showDefaultClothingMessageOnPageLoad: boolean; - areThreeDeeThumbsEnabled: boolean; + enableDefaultClothingMessage: boolean; + isAvatarScaleEmbeddedInTab: boolean; + isBodyTypeScaleOutOfTab: boolean; + scaleHeightIncrement: number; + scaleWidthIncrement: number; + scaleHeadIncrement: number; + scaleProportionIncrement: number; + scaleBodyTypeIncrement: number; + supportProportionAndBodyType: boolean; + showDefaultClothingMessageOnPageLoad: boolean; + areThreeDeeThumbsEnabled: boolean; }; export type GetAvatarRules = { - playerAvatarTypes: ("R6" | "R15" | string)[]; - scales: { - height: Scale; - width: Scale; - head: Scale; - bodyType: Scale; - }; - wearableAssetTypes: { - maxNumber: number; - id: number; - name: string; - }[]; - bodyColorsPalette: ColorPalette[]; - basicBodyColorsPalette: ColorPalette[]; - minimumDeltaEBodyColorDifference: number; - proportionsAndBodyTypeEnabledForUser: boolean; - defaultClothingAssetLists: { - defaultShirtAssetIds: number[]; - defaultPantAssetIds: number[]; - }; - bundlesEnabledForUser: boolean; - emotesEnabledForUser: boolean; - -} + playerAvatarTypes: ("R6" | "R15" | string)[]; + scales: { + height: Scale; + width: Scale; + head: Scale; + bodyType: Scale; + }; + wearableAssetTypes: { + maxNumber: number; + id: number; + name: string; + }[]; + bodyColorsPalette: ColorPalette[]; + basicBodyColorsPalette: ColorPalette[]; + minimumDeltaEBodyColorDifference: number; + proportionsAndBodyTypeEnabledForUser: boolean; + defaultClothingAssetLists: { + defaultShirtAssetIds: number[]; + defaultPantAssetIds: number[]; + }; + bundlesEnabledForUser: boolean; + emotesEnabledForUser: boolean; +}; export type GetUserAvatarOptions = { - userId: number; -} + userId: number; +}; export type GetUserAvatar = UserAvatar; export type GetUserCurrentlyWearingOptions = { - userId: number; -} + userId: number; +}; export type GetUserCurrentlyWearing = { - assetIds: number[]; + assetIds: number[]; }; export type GetUserOutfitsOptions = { - userId: number; - page?: number; - itemsPerPage?: number; - isEditable?: boolean; -} + userId: number; + page?: number; + itemsPerPage?: number; + isEditable?: boolean; +}; export type GetUserOutfits = { - filteredCount: number; - data: { - id: number; - name: string; - isEditable: boolean; - }[]; - total: number; + filteredCount: number; + data: { + id: number; + name: string; + isEditable: boolean; + }[]; + total: number; }; export type RemoveAssetFromAvatarOptions = { - assetId: number; + assetId: number; }; export type RemoveAssetFromAvatar = { - success: boolean; + success: boolean; }; export type WearAssetOnAvatarOptions = { - assetId: number; + assetId: number; }; export type WearAssetOnAvatar = { - success: boolean; + success: boolean; }; export declare type RedrawThumbnail = unknown; export type SetBodyColorsOptions = BodyColors; export type SetBodyColors = { - success: boolean; -} + success: boolean; +}; export type SetPlayerAvatarTypeOptions = { - playerAvatarType: "R6" | "R15" | string; + playerAvatarType: "R6" | "R15" | string; }; export type SetPlayerAvatarType = { - success: boolean; + success: boolean; }; export type SetPlayerAvatarScalesOptions = BodyScales; export type SetPlayerAvatarScales = { - success: boolean; -} + success: boolean; +}; export type SetPlayerAvatarWearingAssetsOptions = { - assetIds: number[]; + assetIds: number[]; }; export type SetPlayerAvatarWearingAssets = { - invalidAssets?: { - id: number; - name: string; - assetType: { - id: number; - name: string; - }; - }[]; - invalidAssetIds?: number[]; - success: boolean; -} + invalidAssets?: { + id: number; + name: string; + assetType: { + id: number; + name: string; + }; + }[]; + invalidAssetIds?: number[]; + success: boolean; +}; export type GetOutfitOptions = { - userOutfitId: number; -} + userOutfitId: number; +}; export type GetOutfit = { + id: number; + name: string; + assets: { id: number; name: string; - assets: { - id: number; - name: string; - assetType: { - id: number; - name: string; - }; - }[]; - bodyColors: BodyColors; - scale: { - height: number; - width: number; - head: number; - depth: number; - proportion: number; - bodyType: number; + assetType: { + id: number; + name: string; }; - playerAvatarType: string; - isEditable: boolean; + }[]; + bodyColors: BodyColors; + scale: { + height: number; + width: number; + head: number; + depth: number; + proportion: number; + bodyType: number; + }; + playerAvatarType: string; + isEditable: boolean; }; export type DeleteOutfitOptions = { - userOutfitId: number; -} + userOutfitId: number; +}; export type DeleteOutfit = { - success: boolean; -} + success: boolean; +}; export type UpdateOutfitOptions = Omit; export type UpdateOutfit = { - success: boolean; -} + success: boolean; +}; export type WearOutfitOptions = { - userOutfitId: number; -} + userOutfitId: number; +}; export type WearOutfit = SetPlayerAvatarWearingAssets; -export type CreateOutfitOptions = Omit +export type CreateOutfitOptions = Omit; export type CreateOutfit = { - success: boolean; -} + success: boolean; +}; export type GetRecentItemsOptions = { - recentItemListType: "All" | "Clothing" | "BodyParts" | "AvatarAnimations" | "Accessories" | "Outfits" | "Gear" | string; -} + recentItemListType: + | "All" + | "Clothing" + | "BodyParts" + | "AvatarAnimations" + | "Accessories" + | "Outfits" + | "Gear" + | string; +}; export type GetRecentItems = { - data: { - id: number; - name: string; - type: string; - assetType: { - id: number; - name: string; - }; - isEditable: boolean; - }[]; - total: number; -} - + data: { + id: number; + name: string; + type: string; + assetType: { + id: number; + name: string; + }; + isEditable: boolean; + }[]; + total: number; +}; export default class AvatarAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://avatar.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://avatar.roblox.com/" + }); + } - getSelfAvatar (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar" - }, - json: true - }) - .then(response => response.body); - } + getSelfAvatar (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar" + }, + json: true + }).then(response => response.body); + } - getAvatarMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "v1/avatar/metadata" - }, - json: true - }) - .then(response => response.body); - } + getAvatarMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "v1/avatar/metadata" + }, + json: true + }).then(response => response.body); + } - getAvatarRules (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar-rules" - }, - json: true - }) - .then(response => response.body); - } + getAvatarRules (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar-rules" + }, + json: true + }).then(response => response.body); + } - getUserAvatar (options: GetUserAvatarOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/avatar` - }, - json: true - }) - .then(response => response.body); - } + getUserAvatar (options: GetUserAvatarOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/avatar` + }, + json: true + }).then(response => response.body); + } - getUserCurrentlyWearing (options: GetUserCurrentlyWearingOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/currently-wearing` - }, - json: true - }) - .then(response => response.body); - } + getUserCurrentlyWearing ( + options: GetUserCurrentlyWearingOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/currently-wearing` + }, + json: true + }).then(response => response.body); + } - getUserOutfits (options: GetUserOutfitsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/outfits` - }, - json: true - }) - .then(response => response.body); - } + getUserOutfits (options: GetUserOutfitsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/outfits` + }, + json: true + }).then(response => response.body); + } - removeAssetFromAvatar (options: RemoveAssetFromAvatarOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/avatar/assets/${options.assetId}/remove`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + removeAssetFromAvatar ( + options: RemoveAssetFromAvatarOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/avatar/assets/${options.assetId}/remove`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - wearAssetOnAvatar (options: WearAssetOnAvatarOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/avatar/assets/${options.assetId}/wear`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + wearAssetOnAvatar ( + options: WearAssetOnAvatarOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/avatar/assets/${options.assetId}/wear`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - redrawThumbnail (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar/redraw-thumbnail", - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + redrawThumbnail (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/redraw-thumbnail", + method: "POST" + }, + json: true + }).then(response => response.body); + } - setSelfAvatarBodyColors (options: SetBodyColorsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar/set-body-colors", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setSelfAvatarBodyColors ( + options: SetBodyColorsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-body-colors", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - setSelfAvatarType (options: SetPlayerAvatarTypeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar/set-player-avatar-type", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setSelfAvatarType ( + options: SetPlayerAvatarTypeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-player-avatar-type", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - setSelfAvatarScales (options: SetPlayerAvatarScalesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar/set-scales", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setSelfAvatarScales ( + options: SetPlayerAvatarScalesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-scales", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - setSelfWearingAssets (options: SetPlayerAvatarWearingAssetsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/avatar/set-swearing-assets", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setSelfWearingAssets ( + options: SetPlayerAvatarWearingAssetsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-swearing-assets", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getOutfit (options: GetOutfitOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/outfits/${options.userOutfitId}/details` - }, - json: true - }) - .then(response => response.body); - } + getOutfit (options: GetOutfitOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.userOutfitId}/details` + }, + json: true + }).then(response => response.body); + } - deleteOutfit (options: DeleteOutfitOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/outfits/${options.userOutfitId}/delete`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + deleteOutfit (options: DeleteOutfitOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.userOutfitId}/delete`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - updateOutfit (options: UpdateOutfitOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/outfits/${options.id}/update`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateOutfit (options: UpdateOutfitOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.id}/update`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - wearOutfit (options: WearOutfitOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/outfits/${options.userOutfitId}/wear`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + wearOutfit (options: WearOutfitOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.userOutfitId}/wear`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - createOutfit (options: CreateOutfitOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/outfits/create", - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + createOutfit (options: CreateOutfitOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/outfits/create", + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getRecentlyUsed (options: GetRecentItemsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/recent-items/${options.recentItemListType}/list` - }, - json: true - }) - .then(response => response.body); - } + getRecentlyUsed (options: GetRecentItemsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/recent-items/${options.recentItemListType}/list` + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/BadgesAPI.ts b/src/client/apis/BadgesAPI.ts index 1951b6afc..3f7a70b08 100644 --- a/src/client/apis/BadgesAPI.ts +++ b/src/client/apis/BadgesAPI.ts @@ -2,146 +2,146 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { GameBadgeOptions } from "../../structures/Game"; - export type GetBadgeOptions = { - badgeId: number; -} + badgeId: number; +}; export type GetBadge = GameBadgeOptions; export type UpdateBadgeOptions = { - id: number; - name: string; - description: string; - enabled: boolean; + id: number; + name: string; + description: string; + enabled: boolean; }; export type UpdateBadge = unknown; export type GetUniverseBadgesOptions = { - universeId: number; - limit?: 10 | 25 | 50 | 100; - cursor?: string; - sortOrder?: "Asc" | "Desc"; -} + universeId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; export type GetUniverseBadges = { - previousPageCursor: string; - nextPageCursor: string; - data: GetBadge[]; + previousPageCursor: string; + nextPageCursor: string; + data: GetBadge[]; }; export type GetUserBadgesOptions = { - userId: number; - limit?: 10 | 25 | 50 | 100; - cursor?: string; - sortOrder?: "Asc" | "Desc"; -} + userId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; export type GetUserBadges = GetUniverseBadges; export type GetUserBadgesAwardedDatesOptions = { - userId: number; - badgeIds: number[]; -} + userId: number; + badgeIds: number[]; +}; export type GetUserBadgesAwardedDates = { - data: { - badgeId: number; - awardedDate: string; - }[]; -} -export type DeleteBadgeFromUserOptions = { - userId: number; + data: { badgeId: number; -} + awardedDate: string; + }[]; +}; +export type DeleteBadgeFromUserOptions = { + userId: number; + badgeId: number; +}; export type DeleteBadgeFromUser = unknown; export type DeleteBadgeFromSelfOptions = { - badgeId: number; -} + badgeId: number; +}; export type DeleteBadgeFromSelf = DeleteBadgeFromUser; export default class AvatarAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://badges.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://badges.roblox.com/" + }); + } - getBadge (options: GetBadgeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/badges/${options.badgeId}` - }, - json: true - }) - .then(response => response.body); - } + getBadge (options: GetBadgeOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/${options.badgeId}` + }, + json: true + }).then(response => response.body); + } - updateBadge (options: UpdateBadgeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/badges/${options.id}`, - method: "PATCH" - }, - json: true - }) - .then(response => response.body); - } + updateBadge (options: UpdateBadgeOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/${options.id}`, + method: "PATCH" + }, + json: true + }).then(response => response.body); + } - getUniverseBadges (options: GetUniverseBadgesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/badges`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUniverseBadges ( + options: GetUniverseBadgesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/badges`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserBadges (options: GetUserBadgesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/badges`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserBadges (options: GetUserBadgesOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/badges`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserBadgesAwardedDates (options: GetUserBadgesAwardedDatesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/badges/awarded-dates`, - qs: { - badgeIds: options.badgeIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getUserBadgesAwardedDates ( + options: GetUserBadgesAwardedDatesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/badges/awarded-dates`, + qs: { + badgeIds: options.badgeIds.join(",") + } + }, + json: true + }).then(response => response.body); + } - deleteBadgeFromUser (options: DeleteBadgeFromUserOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/${options.userId}/badges/${options.badgeId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + deleteBadgeFromUser ( + options: DeleteBadgeFromUserOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/${options.userId}/badges/${options.badgeId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - deleteBadgeFromSelf (options: DeleteBadgeFromSelfOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/badges/${options.badgeId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + deleteBadgeFromSelf ( + options: DeleteBadgeFromSelfOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/badges/${options.badgeId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/BaseAPI.ts b/src/client/apis/BaseAPI.ts index a2094062c..66a591d81 100644 --- a/src/client/apis/BaseAPI.ts +++ b/src/client/apis/BaseAPI.ts @@ -1,55 +1,64 @@ import { BaseAPIOptions } from "../../interfaces/APIInterfaces"; -import { RESTRequestOptions, RESTResponseDataType } from "../../interfaces/RESTInterfaces"; +import { + RESTRequestOptions, + RESTResponseDataType +} from "../../interfaces/RESTInterfaces"; import Client from "../Client"; - export declare type BaseAPIRequestOptions = { - /** - * The request options - */ - request: Omit & { - url?: string; - path?: string; - }; - /** - * If the client must be authenticated in order to send the request - */ - requiresAuth: boolean; - /** - * If the response body is JSON - */ - json?: boolean; + /** + * The request options + */ + request: Omit & { + url?: string; + path?: string; + }; + /** + * If the client must be authenticated in order to send the request + */ + requiresAuth: boolean; + /** + * If the response body is JSON + */ + json?: boolean; }; export default class BaseAPI { - public client: Client; - public options: BaseAPIOptions; + public client: Client; + public options: BaseAPIOptions; + + constructor (options: BaseAPIOptions) { + this.client = options.client; + this.options = options; + } - constructor (options: BaseAPIOptions) { - this.client = options.client; - this.options = options; + request (options: BaseAPIRequestOptions): Promise { + if (options.requiresAuth) { + if (!this.options.client.isLoggedIn()) { + throw new Error( + `You must be authenticated in order to perform this request! API: ${( + options.request.method || "GET" + ).toUpperCase()} ${options.request.path ? this.options.baseUrl : ""}${ + options.request.path || options.request.url + }` + ); + } + } + if (!options.request.url && !options.request.path) { + throw new Error(`Must provide a URL or path!`); + } else if (options.request.path) { + options.request.url = this.options.baseUrl + options.request.path; + delete options.request.path; } - request (options: BaseAPIRequestOptions): Promise { - if (options.requiresAuth) { - if (!this.options.client.isLoggedIn()) { - throw new Error(`You must be authenticated in order to perform this request! API: ${(options.request.method || "GET").toUpperCase()} ${options.request.path ? this.options.baseUrl : ""}${options.request.path || options.request.url}`); - } + return this.options.client.rest + .request(options.request as RESTRequestOptions) + .then(response => { + if (options.json && !(response.body instanceof Object)) { + response.body = JSON.parse(response.body); } - if (!options.request.url && !options.request.path) { - throw new Error(`Must provide a URL or path!`); - } else if (options.request.path) { - options.request.url = this.options.baseUrl + options.request.path; - delete options.request.path; - } - - return this.options.client.rest.request(options.request as RESTRequestOptions) - .then(response => { - if (options.json && !(response.body instanceof Object)) { - response.body = JSON.parse(response.body); - } - return response; - }); - } + return response; + }); + } } diff --git a/src/client/apis/BillingAPI.ts b/src/client/apis/BillingAPI.ts index f3662dc1e..f68cafbb5 100644 --- a/src/client/apis/BillingAPI.ts +++ b/src/client/apis/BillingAPI.ts @@ -1,400 +1,404 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetDeveloperExchangeRate = { - rate: number; - "currency-code": string; -} + rate: number; + "currency-code": string; +}; export type SubmitDeveloperExchangeOptions = { - firstName: string; - lastName: string; - emailAddress: string; - password: string; - robuxAmount: number; -} -export type SubmitDeveloperExchange = unknown + firstName: string; + lastName: string; + emailAddress: string; + password: string; + robuxAmount: number; +}; +export type SubmitDeveloperExchange = unknown; export type GetLuobuDeveloperExchangeBalance = { - amount: number; -} + amount: number; +}; export type GetLuobuDeveloperExchangeEligibility = { - eligibility?: "Eligible" | string; - errors?: { - code: number; - message: string; - userFacingMessage: string; - }; -} + eligibility?: "Eligible" | string; + errors?: { + code: number; + message: string; + userFacingMessage: string; + }; +}; export type GetLatestLuobuDeveloperExchangeStatus = { - date?: string; - status?: string; - amount?: number; -} + date?: string; + status?: string; + amount?: number; +}; export type SubmitLuobuDeveloperExchangeOptions = { - firstName: string; - lastName: string; - email: string; - amount: number; -} -export type SubmitLuobuDeveloperExchange = unknown + firstName: string; + lastName: string; + email: string; + amount: number; +}; +export type SubmitLuobuDeveloperExchange = unknown; export type GetUserPaymentsOptions = { - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetUserPayments = { - previousPageCursor: string; - nextPageCursor: string; - data: { - paymentDate: string; - products: { - name: string; - }[]; - money: { - Amount: number; - USDAmount: number; - Currency: { - Id: number; - CurrencyType: string; - CurrencyName: string; - CurrencySymbol: string; - }; - }; - paymentProviderType: "AppleAppStore"; - creditCardType: string; - cardNumber: string; + previousPageCursor: string; + nextPageCursor: string; + data: { + paymentDate: string; + products: { + name: string; + }[]; + money: { + Amount: number; + USDAmount: number; + Currency: { + Id: number; + CurrencyType: string; + CurrencyName: string; + CurrencySymbol: string; + }; }; -} + paymentProviderType: "AppleAppStore"; + creditCardType: string; + cardNumber: string; + }; +}; export type PurchaseAmazonProductOptions = { - receiptId: string; - amazonUserId: string; - isRetry: boolean; -} -export type PurchaseAmazonProduct = unknown + receiptId: string; + amazonUserId: string; + isRetry: boolean; +}; +export type PurchaseAmazonProduct = unknown; export type ValidateAmazonProductOptions = { - productId: string; - currency: string; -} -export type ValidateAmazonProduct = unknown + productId: string; + currency: string; +}; +export type ValidateAmazonProduct = unknown; export type PurchaseAppleProductOptions = PurchaseAmazonProductOptions; export type PurchaseAppleProduct = PurchaseAmazonProduct; export type ValidateAppleProductOptions = ValidateAmazonProductOptions; export type ValidateAppleProduct = ValidateAmazonProduct; export type RedeemDigitalCodeOptions = { - redemptionCode: string; -} + redemptionCode: string; +}; export type RedeemDigitalCode = unknown; export type RedeemGameCardOptions = { - pinCode: string; - captchaToken: string; - captchaProvider: "PROVIDER_ARKOSELABS" | string; -} + pinCode: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; export type RedeemGameCard = { - balance: string; - successMsg: string; - successSubText: string; - bonusMsg: string; - error: string; - errorMsg: string; -} + balance: string; + successMsg: string; + successSubText: string; + bonusMsg: string; + error: string; + errorMsg: string; +}; export type ReverseGameCardOptions = { - PinCode: string; - UserId: number; -} + PinCode: string; + UserId: number; +}; export type ReverseGameCard = unknown; export type PurchaseGoogleProductOptions = { - packageName: string; - productId: string; - token: string; - isRetry: boolean; - orderId: string; + packageName: string; + productId: string; + token: string; + isRetry: boolean; + orderId: string; }; -export type PurchaseGoogleProduct = unknown +export type PurchaseGoogleProduct = unknown; export type ValidateGoogleProductOptions = ValidateAmazonProductOptions; export type ValidateGoogleProduct = ValidateAmazonProduct; export type SendXsollaWebhookOptions = unknown; export type SendXsollaWebhook = unknown; export type GetXsollaIFrameTokenOptions = { - mainProductId: number; - upsellProductId: number; - paymentProviderType: string; - verifiedEmailOrPhone: boolean; -} + mainProductId: number; + upsellProductId: number; + paymentProviderType: string; + verifiedEmailOrPhone: boolean; +}; export type GetXsollaIFrameToken = { - token: string; - success: boolean; - message: string; -} + token: string; + success: boolean; + message: string; +}; export type IncrementCounterByAgentOptions = { - counterPrefix: string; -} + counterPrefix: string; +}; export type IncrementCounterByAgent = unknown; export type RedeemPromoCodeOptions = { - code: string; -} + code: string; +}; export type RedeemPromoCode = { - success: boolean; - errorMsg: string; - successMsg: string; -} - + success: boolean; + errorMsg: string; + successMsg: string; +}; export default class BillingAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://billing.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://billing.roblox.com/" + }); + } - getDeveloperExchangeRate (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/developer-exchange-rate` - }, - json: true - }) - .then(response => response.body); - } + getDeveloperExchangeRate (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/developer-exchange-rate` + }, + json: true + }).then(response => response.body); + } - submitDeveloperExchange (options: SubmitDeveloperExchangeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/developer-exchange-rate`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + submitDeveloperExchange ( + options: SubmitDeveloperExchangeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange-rate`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getLuobuDeveloperExchangeBalance (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/luobu-developer-exchange/balance` - }, - json: true - }) - .then(response => response.body); - } + getLuobuDeveloperExchangeBalance (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/luobu-developer-exchange/balance` + }, + json: true + }).then(response => response.body); + } - getLuobuDeveloperExchangeEligibility (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/luobu-developer-exchange/eligibility` - }, - json: true - }) - .then(response => response.body); - } + getLuobuDeveloperExchangeEligibility (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/luobu-developer-exchange/eligibility` + }, + json: true + }).then(response => response.body); + } - getLuobuDeveloperExchangeLatestRequestStatus (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/luobu-developer-exchange/latest-request-status` - }, - json: true - }) - .then(response => response.body); - } + getLuobuDeveloperExchangeLatestRequestStatus (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/luobu-developer-exchange/latest-request-status` + }, + json: true + }).then(response => response.body); + } - submitLuobuDeveloperExchange (options: SubmitLuobuDeveloperExchangeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/developer-exchange-rate/request`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + submitLuobuDeveloperExchange ( + options: SubmitLuobuDeveloperExchangeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/developer-exchange-rate/request`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getUserPaymentsHistory (options: GetUserPaymentsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/payments`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserPaymentsHistory ( + options: GetUserPaymentsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/payments`, + qs: options + }, + json: true + }).then(response => response.body); + } - purchaseAmazonProduct (options: PurchaseAmazonProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/amazon/purchase`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + purchaseAmazonProduct ( + options: PurchaseAmazonProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/amazon/purchase`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - validateAmazonProduct (options: ValidateAmazonProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/amazon/validate`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + validateAmazonProduct ( + options: ValidateAmazonProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/amazon/validate`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - purchaseAppleProduct (options: PurchaseAppleProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/apple/purchase`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + purchaseAppleProduct ( + options: PurchaseAppleProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/apple/purchase`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - validateAppleProduct (options: ValidateAppleProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/apple/validate`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + validateAppleProduct ( + options: ValidateAppleProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/apple/validate`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - redeemDigitalCode (options: RedeemDigitalCodeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/digital-codes/redeem`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + redeemDigitalCode ( + options: RedeemDigitalCodeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/digital-codes/redeem`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - redeemGameCard (options: RedeemGameCardOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/gamecard/redeem`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + redeemGameCard (options: RedeemGameCardOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gamecard/redeem`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - reverseGameCard (options: ReverseGameCardOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/gamecard/reverse`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + reverseGameCard (options: ReverseGameCardOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gamecard/reverse`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - purchaseGoogleProduct (options: PurchaseGoogleProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/google/purchase`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + purchaseGoogleProduct ( + options: PurchaseGoogleProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/google/purchase`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - validateGoogleProduct (options: ValidateGoogleProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/google/validate`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + validateGoogleProduct ( + options: ValidateGoogleProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/google/validate`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - sendXsollaWebhook (options: SendXsollaWebhookOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/notifications/xsolla`, - method: "POST", - json: options as any - }, - json: true - }) - .then(response => response.body); - } + sendXsollaWebhook ( + options: SendXsollaWebhookOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/notifications/xsolla`, + method: "POST", + json: options as any + }, + json: true + }).then(response => response.body); + } - getXsollaIFrameToken (options: GetXsollaIFrameTokenOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/payments/xsolla/iframe-token`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getXsollaIFrameToken ( + options: GetXsollaIFrameTokenOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/payments/xsolla/iframe-token`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - incrementCounterByAgent (options: IncrementCounterByAgentOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/payments/xsolla/incrementcounterbyagent`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + incrementCounterByAgent ( + options: IncrementCounterByAgentOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/payments/xsolla/incrementcounterbyagent`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - redeemPromoCode (options: RedeemPromoCodeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/promocodes/redeem`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + redeemPromoCode (options: RedeemPromoCodeOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/promocodes/redeem`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/CatalogAPI.ts b/src/client/apis/CatalogAPI.ts index c70dc08e7..08945a61f 100644 --- a/src/client/apis/CatalogAPI.ts +++ b/src/client/apis/CatalogAPI.ts @@ -1,371 +1,372 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type ProductDetails = { - id: number; - type: string; - isPublicDomain: boolean; - isForSale: boolean; - priceInRobux: number; - premiumPricing: { - premiumDiscountPercentage: number; - premiumPriceInRobux: number; - }; + id: number; + type: string; + isPublicDomain: boolean; + isForSale: boolean; + priceInRobux: number; + premiumPricing: { + premiumDiscountPercentage: number; + premiumPriceInRobux: number; + }; }; export type GetAssetBundlesOptions = { - assetId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + assetId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetAssetBundles = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - name: string; - description: string; - bundleType: string; - items: { - owned: boolean; - id: number; - name: string; - type: string; - }[]; - creator: { - id: number; - name: string; - type: string; - }; - creatorType: number; - product: ProductDetails; + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; + id: number; + name: string; + type: string; }[]; -} + creator: { + id: number; + name: string; + type: string; + }; + creatorType: number; + product: ProductDetails; + }[]; +}; export type GetBundleDetailsOptions = { - bundleId: number; -} + bundleId: number; +}; export type GetBundleDetails = GetAssetBundles["data"][0]; export type GetBundleRecommendationsByBundleIdOptions = { - bundleId: number; - numItems?: number; -} + bundleId: number; + numItems?: number; +}; export type GetBundleRecommendationsByBundleId = { - data: GetAssetBundles["data"]; -} + data: GetAssetBundles["data"]; +}; export type GetMultiBundleDetailsOptions = { - bundleIds: number[]; -} + bundleIds: number[]; +}; export type GetMultiBundleDetails = GetAssetBundles["data"]; export type GetUserBundlesOptions = { - userId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + userId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetUserBundles = GetAssetBundles; export type GetUserBundlesByTypeOptions = GetUserBundlesOptions & { - bundleType: "BodyParts" | "AvatarAnimations" | string; -} + bundleType: "BodyParts" | "AvatarAnimations" | string; +}; export type GetUserBundlesByType = GetUserBundles; export type UnpackBundleOptions = { - bundleId: number; -} + bundleId: number; +}; export type UnpackBundle = unknown; export type GetAssetToCategory = Record; export type GetAssetToSubCategory = GetAssetToCategory; -export type GetCategories = GetAssetToCategory +export type GetCategories = GetAssetToCategory; export type GetSubCategories = GetAssetToCategory; export type GetAppStoreExclusiveBundlesOptions = { - appStoreType: "iOS" | "GooglePlay" | "Xbox" | "Amazon"; -} + appStoreType: "iOS" | "GooglePlay" | "Xbox" | "Amazon"; +}; export type GetAppStoreExclusiveBundles = { - data: ProductDetails[]; -} + data: ProductDetails[]; +}; export type GetAssetFavoriteCountOptions = { - assetId: number; -} + assetId: number; +}; export type GetAssetFavoriteCount = number; export type GetBundleFavoriteCountOptions = { - bundleId: number; -} + bundleId: number; +}; export type GetBundleFavoriteCount = number; export type RemoveSelfAssetFavoriteOptions = { - userId: number; - assetId: number; -} -export type RemoveSelfAssetFavorite = unknown + userId: number; + assetId: number; +}; +export type RemoveSelfAssetFavorite = unknown; export type GetUserFavoriteAssetOptions = { - userId: number; - assetId: number; -} + userId: number; + assetId: number; +}; export type GetUserFavoriteAsset = { - assetId: number; - userId: number; - created: string; -} + assetId: number; + userId: number; + created: string; +}; export type FavoriteAssetOptions = { - userId: number; - assetId: number; -} -export type FavoriteAsset = unknown + userId: number; + assetId: number; +}; +export type FavoriteAsset = unknown; export type RemoveFavoriteBundleOptions = { - userId: number; - bundleId: number; -} -export type RemoveFavoriteBundle = unknown + userId: number; + bundleId: number; +}; +export type RemoveFavoriteBundle = unknown; export type GetSelfFavoriteBundleOptions = { - userId: number; - bundleId: number; -} + userId: number; + bundleId: number; +}; export type GetSelfFavoriteBundle = { - bundleId: number; - userId: number; - created: string; -} + bundleId: number; + userId: number; + created: string; +}; export type FavoriteBundleOptions = { - userId: number; - bundleId: number; -} -export type FavoriteBundle = unknown + userId: number; + bundleId: number; +}; +export type FavoriteBundle = unknown; export default class CatalogAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://catalog.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://catalog.roblox.com/" + }); + } - getAssetBundles (options: GetAssetBundlesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets/${options.assetId}/bundles`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getAssetBundles (options: GetAssetBundlesOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/bundles`, + qs: options + }, + json: true + }).then(response => response.body); + } - getBundleDetails (options: GetBundleDetailsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/bundles/${options.bundleId}/details`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getBundleDetails ( + options: GetBundleDetailsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/${options.bundleId}/details`, + qs: options + }, + json: true + }).then(response => response.body); + } - getBundleRecommendationsByBundleId (options: GetBundleRecommendationsByBundleIdOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets/${options.bundleId}/recommendations`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getBundleRecommendationsByBundleId ( + options: GetBundleRecommendationsByBundleIdOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.bundleId}/recommendations`, + qs: options + }, + json: true + }).then(response => response.body); + } - getMultiBundleDetails (options: GetMultiBundleDetailsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/bundles/details`, - qs: { - bundleIds: options.bundleIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getMultiBundleDetails ( + options: GetMultiBundleDetailsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/details`, + qs: { + bundleIds: options.bundleIds.join(",") + } + }, + json: true + }).then(response => response.body); + } - getUserBundles (options: GetUserBundlesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/bundles`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserBundles (options: GetUserBundlesOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/bundles`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserBundlesByType (options: GetUserBundlesByTypeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/bundles/${options.bundleType}` - }, - json: true - }) - .then(response => response.body); - } + getUserBundlesByType ( + options: GetUserBundlesByTypeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/bundles/${options.bundleType}` + }, + json: true + }).then(response => response.body); + } - unpackBundle (options: UnpackBundleOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/bundles/${options.bundleId}/unpack`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + unpackBundle (options: UnpackBundleOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/${options.bundleId}/unpack`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - getAssetToCategory (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/asset-to-category` - }, - json: true - }) - .then(response => response.body); - } + getAssetToCategory (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/asset-to-category` + }, + json: true + }).then(response => response.body); + } - getAssetToSubCategory (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/asset-to-subcategory` - }, - json: true - }) - .then(response => response.body); - } + getAssetToSubCategory (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/asset-to-subcategory` + }, + json: true + }).then(response => response.body); + } - getCategories (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/categories` - }, - json: true - }) - .then(response => response.body); - } + getCategories (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/categories` + }, + json: true + }).then(response => response.body); + } - getSubCategories (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/subcategories` - }, - json: true - }) - .then(response => response.body); - } + getSubCategories (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/subcategories` + }, + json: true + }).then(response => response.body); + } - getAppStoreExclusiveBundles (options: GetAppStoreExclusiveBundlesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/exclusive-items/${options.appStoreType}/bundles` - }, - json: true - }) - .then(response => response.body); - } + getAppStoreExclusiveBundles ( + options: GetAppStoreExclusiveBundlesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/exclusive-items/${options.appStoreType}/bundles` + }, + json: true + }).then(response => response.body); + } - getAssetFavoriteCount (options: GetAssetFavoriteCountOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/assets/${options.assetId}/count` - }, - json: true - }) - .then(response => response.body); - } + getAssetFavoriteCount ( + options: GetAssetFavoriteCountOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/assets/${options.assetId}/count` + }, + json: true + }).then(response => response.body); + } - getBundleFavoriteCount (options: GetBundleFavoriteCountOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/bundles/${options.bundleId}/count` - }, - json: true - }) - .then(response => response.body); - } + getBundleFavoriteCount ( + options: GetBundleFavoriteCountOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/bundles/${options.bundleId}/count` + }, + json: true + }).then(response => response.body); + } - removeAssetFavorite (options: RemoveSelfAssetFavoriteOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + removeAssetFavorite ( + options: RemoveSelfAssetFavoriteOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - getUserFavoriteAsset (options: GetUserFavoriteAssetOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite` - }, - json: true - }) - .then(response => response.body); - } + getUserFavoriteAsset ( + options: GetUserFavoriteAssetOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite` + }, + json: true + }).then(response => response.body); + } - favoriteAsset (options: FavoriteAssetOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + favoriteAsset (options: FavoriteAssetOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - removeBundleFavorite (options: RemoveFavoriteBundleOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + removeBundleFavorite ( + options: RemoveFavoriteBundleOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - getUserFavoriteBundle (options: GetSelfFavoriteBundleOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite` - }, - json: true - }) - .then(response => response.body); - } + getUserFavoriteBundle ( + options: GetSelfFavoriteBundleOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite` + }, + json: true + }).then(response => response.body); + } - favoriteBundle (options: FavoriteBundleOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + favoriteBundle (options: FavoriteBundleOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite`, + method: "POST" + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/ChatAPI.ts b/src/client/apis/ChatAPI.ts index ff9ad466a..e23fc786f 100644 --- a/src/client/apis/ChatAPI.ts +++ b/src/client/apis/ChatAPI.ts @@ -1,474 +1,488 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { - ChatConversationOptions, - ChatMessageOptions, - ChatMessageSentOptions, - PartialChatConversationOptions + ChatConversationOptions, + ChatMessageOptions, + ChatMessageSentOptions, + PartialChatConversationOptions } from "../../structures/Chat"; - export type GetChatSettings = { - chatEnabled: boolean; -} + chatEnabled: boolean; +}; export type GetConversationsOptions = { - conversationIds: number[]; -} + conversationIds: number[]; +}; export type GetConversations = ChatConversationOptions[]; export type GetConversationMessagesOptions = { - conversationId: number; - pageSize: number; - exclusiveStartMessageId?: string; -} + conversationId: number; + pageSize: number; + exclusiveStartMessageId?: string; +}; export type GetConversationMessages = ChatMessageOptions[]; export type GetRolloutSettingsOptions = { - featureNames: string[]; -} + featureNames: string[]; +}; export type GetRolloutSettings = { - rolloutFeatures: { - featureName: string; - isRolloutEnabled: boolean; - }[]; -} + rolloutFeatures: { + featureName: string; + isRolloutEnabled: boolean; + }[]; +}; export type GetUnreadConversationCount = { - count: number; -} + count: number; +}; export type GetUnreadMessagesInConversationsOptions = { - conversationIds: number[]; - pageSize?: number; -} + conversationIds: number[]; + pageSize?: number; +}; export type GetUnreadMessagesInConversations = { - conversationId: number; - chatMessages: ChatMessageOptions[]; + conversationId: number; + chatMessages: ChatMessageOptions[]; }[]; export type GetUserConversationsOptions = { - pageNumber: number; - pageSize: number; -} + pageNumber: number; + pageSize: number; +}; export type GetUserConversations = ChatConversationOptions[]; export type GetMetaData = { - isChatEnabledByPrivacySetting: string; - languageForPrivacySettingUnavailable: string; - maxConversationTitleLength: number; - numberOfMembersForPartyChrome: number; - partyChromeDisplayTimeStampInterval: number; - signalRDisconnectionResponseInMilliseconds: number; - typingInChatFromSenderThrottleMs: number; - typingInChatForReceiverExpirationMs: number; - relativeValueToRecordUiPerformance: number; - isChatDataFromLocalStorageEnabled: boolean; - chatDataFromLocalStorageExpirationSeconds: number; - isUsingCacheToLoadFriendsInfoEnabled: boolean; - cachedDataFromLocalStorageExpirationMS: number; - senderTypesForUnknownMessageTypeError: string[]; - isInvalidMessageTypeFallbackEnabled: boolean; - isRespectingMessageTypeEnabled: boolean; - validMessageTypesWhiteList: string[]; - shouldRespectConversationHasUnreadMessageToMarkAsRead: boolean; - isVoiceChatForClientSideEnabled: boolean; - isAliasChatForClientSideEnabled: boolean; - isPlayTogetherForGameCardsEnabled: boolean; - isRoactChatEnabled: boolean; -} + isChatEnabledByPrivacySetting: string; + languageForPrivacySettingUnavailable: string; + maxConversationTitleLength: number; + numberOfMembersForPartyChrome: number; + partyChromeDisplayTimeStampInterval: number; + signalRDisconnectionResponseInMilliseconds: number; + typingInChatFromSenderThrottleMs: number; + typingInChatForReceiverExpirationMs: number; + relativeValueToRecordUiPerformance: number; + isChatDataFromLocalStorageEnabled: boolean; + chatDataFromLocalStorageExpirationSeconds: number; + isUsingCacheToLoadFriendsInfoEnabled: boolean; + cachedDataFromLocalStorageExpirationMS: number; + senderTypesForUnknownMessageTypeError: string[]; + isInvalidMessageTypeFallbackEnabled: boolean; + isRespectingMessageTypeEnabled: boolean; + validMessageTypesWhiteList: string[]; + shouldRespectConversationHasUnreadMessageToMarkAsRead: boolean; + isVoiceChatForClientSideEnabled: boolean; + isAliasChatForClientSideEnabled: boolean; + isPlayTogetherForGameCardsEnabled: boolean; + isRoactChatEnabled: boolean; +}; export type GetMultiLatestConversationMessagesOptions = { - conversationIds: number[]; - pageSize: number; -} -export type GetMultiLatestConversationMessages = GetUnreadMessagesInConversations; + conversationIds: number[]; + pageSize: number; +}; +export type GetMultiLatestConversationMessages = + GetUnreadMessagesInConversations; export type AddUsersToConversationOptions = { - participantUserIds: number[]; - conversationId: number; -} + participantUserIds: number[]; + conversationId: number; +}; export type AddUsersToConversation = { - conversationId: number; - rejectedParticipants: { - rejectedReason: string; - type: "User" | string; - targetId: number; - name: string; - displayName: string; - }[]; - resultType: "Success" | string; - statusMessage: string; -} + conversationId: number; + rejectedParticipants: { + rejectedReason: string; + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + resultType: "Success" | string; + statusMessage: string; +}; export type MarkMessageInConversationAsReadOptions = { - conversationId: number; - endMessageId: string; -} + conversationId: number; + endMessageId: string; +}; export type MarkMessageInConversationAsRead = { - resultType: "Success" | string; -} + resultType: "Success" | string; +}; export type MarkConversationsAsSeenOptions = { - conversationsToMarkSeen: number[]; -} + conversationsToMarkSeen: number[]; +}; export type MarkConversationsAsSeen = { - resultType: "Success" | string; -} + resultType: "Success" | string; +}; export type RemoveUserFromConversationOptions = { - participantUserId: number; - conversationId: number; -} + participantUserId: number; + conversationId: number; +}; export type RemoveUserFromConversation = { - conversation: PartialChatConversationOptions; - resultType: "Success" | string; - statusMessage: string; -} + conversation: PartialChatConversationOptions; + resultType: "Success" | string; + statusMessage: string; +}; export type RenameGroupConversationOptions = { - conversationId: number; - newTitle: string; -} + conversationId: number; + newTitle: string; +}; export type RenameGroupConversation = { - conversationTitle: string; - statusMessage: string; - resultType: "Success" | string; - title: { - titleForViewer: string; - isDefaultTitle: boolean; - }; -} + conversationTitle: string; + statusMessage: string; + resultType: "Success" | string; + title: { + titleForViewer: string; + isDefaultTitle: boolean; + }; +}; export type ResetConversationUniverseOptions = { - conversationId: number; -} + conversationId: number; +}; export type ResetConversationUniverse = { - statusMessage: string; -} + statusMessage: string; +}; export type SendGameLinkMessageOptions = { - universeId: number; - conversationId: number; - decorators: string[]; -} + universeId: number; + conversationId: number; + decorators: string[]; +}; export type SendGameLinkMessage = ChatMessageSentOptions; export type SendMessageOptions = { - message: string; - conversationId: number; - decorators: string[]; -} + message: string; + conversationId: number; + decorators: string[]; +}; export type SendMessage = ChatMessageSentOptions; export type SetConversationUniverseOptions = { - conversationId: number; - universeId: number; -} + conversationId: number; + universeId: number; +}; export type SetConversationUniverse = { - statusMessage: string; -} + statusMessage: string; +}; export type StartCloudEditConversationOptions = { - placeId: number; -} + placeId: number; +}; export type StartCloudEditConversation = { - conversation: ChatConversationOptions; - rejectedParticipants: { - rejectedReason: string; - type: "User"; - targetId: number; - name: string; - displayName: string; - }[]; - resultType: "Success" | string; - statusMessage: string; -} + conversation: ChatConversationOptions; + rejectedParticipants: { + rejectedReason: string; + type: "User"; + targetId: number; + name: string; + displayName: string; + }[]; + resultType: "Success" | string; + statusMessage: string; +}; export type StartGroupConversationOptions = { - participantUserIds: number[]; - title: string; -} + participantUserIds: number[]; + title: string; +}; export type StartGroupConversation = StartCloudEditConversation; export type StartOneToOneConversationOptions = { - participantUserId: number; -} + participantUserId: number; +}; export type StartOneToOneConversation = StartCloudEditConversation; export type UpdateUserTypingStatusOptions = { - conversationId: number; - isTyping: boolean; -} + conversationId: number; + isTyping: boolean; +}; export type UpdateUserTypingStatus = { - statusMessage: string; -} + statusMessage: string; +}; export default class ChatAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://chat.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://chat.roblox.com/" + }); + } - getChatSettings (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/chat-settings` - }, - json: true - }) - .then(response => response.body); - } + getChatSettings (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/chat-settings` + }, + json: true + }).then(response => response.body); + } - getConversations (options: GetConversationsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-conversations`, - qs: { - conversationIds: options.conversationIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getConversations ( + options: GetConversationsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-conversations`, + qs: { + conversationIds: options.conversationIds.join(",") + } + }, + json: true + }).then(response => response.body); + } - getConversationMessages (options: GetConversationMessagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-messages`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getConversationMessages ( + options: GetConversationMessagesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-messages`, + qs: options + }, + json: true + }).then(response => response.body); + } - getRolloutSettings (options: GetRolloutSettingsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-rollout-settings`, - qs: { - featureNames: options.featureNames.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getRolloutSettings ( + options: GetRolloutSettingsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-rollout-settings`, + qs: { + featureNames: options.featureNames.join(",") + } + }, + json: true + }).then(response => response.body); + } - getUnreadConversationCount (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-conversations` - }, - json: true - }) - .then(response => response.body); - } + getUnreadConversationCount (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-conversations` + }, + json: true + }).then(response => response.body); + } - getUnreadMessagesInConversations (options: GetUnreadMessagesInConversationsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-unread-messages`, - qs: { - conversationIds: options.conversationIds.join(","), - pageSize: options.pageSize - } - }, - json: true - }) - .then(response => response.body); - } + getUnreadMessagesInConversations ( + options: GetUnreadMessagesInConversationsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-unread-messages`, + qs: { + conversationIds: options.conversationIds.join(","), + pageSize: options.pageSize + } + }, + json: true + }).then(response => response.body); + } - getUserConversations (options: GetUserConversationsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-user-conversations`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserConversations ( + options: GetUserConversationsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-user-conversations`, + qs: options + }, + json: true + }).then(response => response.body); + } - getMetaData (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/metadata` - }, - json: true - }) - .then(response => response.body); - } + getMetaData (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/metadata` + }, + json: true + }).then(response => response.body); + } - getMultiLatestConversationMessages (options: GetMultiLatestConversationMessagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/multi-get-latest-messages`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getMultiLatestConversationMessages ( + options: GetMultiLatestConversationMessagesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/multi-get-latest-messages`, + qs: options + }, + json: true + }).then(response => response.body); + } - addUsersToConversation (options: AddUsersToConversationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/add-to-conversation`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + addUsersToConversation ( + options: AddUsersToConversationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/add-to-conversation`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - markConversationMessagesRead (options: MarkMessageInConversationAsReadOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/mark-as-read`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + markConversationMessagesRead ( + options: MarkMessageInConversationAsReadOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/mark-as-read`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - markConversationsSeen (options: MarkConversationsAsSeenOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/mark-as-seen`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + markConversationsSeen ( + options: MarkConversationsAsSeenOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/mark-as-seen`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - removeUserFromConversation (options: RemoveUserFromConversationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/remove-from-conversation`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + removeUserFromConversation ( + options: RemoveUserFromConversationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/remove-from-conversation`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - renameGroupConversation (options: RenameGroupConversationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/rename-group-conversation`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + renameGroupConversation ( + options: RenameGroupConversationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/rename-group-conversation`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - resetConversationUniverse (options: ResetConversationUniverseOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/reset-conversation-universe`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + resetConversationUniverse ( + options: ResetConversationUniverseOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/reset-conversation-universe`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - sendGameLinkMessage (options: SendGameLinkMessageOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/send-game-link-message`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + sendGameLinkMessage ( + options: SendGameLinkMessageOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/send-game-link-message`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - sendMessage (options: SendMessageOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/send-message`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + sendMessage (options: SendMessageOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/send-message`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - setConversationUniverse (options: SetConversationUniverseOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/set-conversation-universe`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setConversationUniverse ( + options: SetConversationUniverseOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/set-conversation-universe`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - startCloudEditConversation (options: StartCloudEditConversationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/start-cloud-edit-conversation`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + startCloudEditConversation ( + options: StartCloudEditConversationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/start-cloud-edit-conversation`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - startGroupConversation (options: StartGroupConversationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/get-user-conversations`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + startGroupConversation ( + options: StartGroupConversationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-user-conversations`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - startOneToOneConversation (options: StartOneToOneConversationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/start-one-to-one-conversation`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + startOneToOneConversation ( + options: StartOneToOneConversationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/start-one-to-one-conversation`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - updateUserTypingStatus (options: UpdateUserTypingStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v2/update-user-typing-status`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateUserTypingStatus ( + options: UpdateUserTypingStatusOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v2/update-user-typing-status`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/ContactsAPI.ts b/src/client/apis/ContactsAPI.ts index a4474c8e5..30e321d51 100644 --- a/src/client/apis/ContactsAPI.ts +++ b/src/client/apis/ContactsAPI.ts @@ -1,87 +1,84 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetContactsMetaData = { - multiGetContactsMaxSize: number; -} + multiGetContactsMaxSize: number; +}; export type GetUsersTagsOptions = { - targetUserIds: number[]; -} + targetUserIds: number[]; +}; export type GetUsersTags = { - targetUserId: number; - targetUserTag: string; + targetUserId: number; + targetUserTag: string; }[]; export type SetPendingUserTagOptions = { - targetUserId: number; - userTag: string; -} + targetUserId: number; + userTag: string; +}; export type SetPendingUserTag = { - status: "Success" | string; -} + status: "Success" | string; +}; export type SetUserTagOptions = { - targetUserId: number; - userTag: string; -} + targetUserId: number; + userTag: string; +}; export type SetUserTag = { - status: "Success" | string; -} + status: "Success" | string; +}; export default class ContactsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://contacts.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://contacts.roblox.com/" + }); + } - getContactsMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/contacts/metadata` - }, - json: true - }) - .then(response => response.body); - } + getContactsMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/contacts/metadata` + }, + json: true + }).then(response => response.body); + } - getUsersTags (options: GetUsersTagsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/user/get-tags`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getUsersTags (options: GetUsersTagsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/get-tags`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - setPendingUserTag (options: SetPendingUserTagOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/set-pending-tag`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setPendingUserTag ( + options: SetPendingUserTagOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/set-pending-tag`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - setUserTag (options: SetUserTagOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/tag`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setUserTag (options: SetUserTagOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/tag`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/DataAPI.ts b/src/client/apis/DataAPI.ts index 0e41a9012..f212b28fc 100644 --- a/src/client/apis/DataAPI.ts +++ b/src/client/apis/DataAPI.ts @@ -1,36 +1,34 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type UploadDataOptions = { - assetId: number; - data: unknown; -} + assetId: number; + data: unknown; +}; export type UploadDataResult = unknown; export default class DataAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://data.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://data.roblox.com/" + }); + } - uploadData (options: UploadDataOptions): Promise { - return this.request({ - requiresAuth: true, - json: true, - request: { - path: `Data/Upload.ashx?assetid=${options.assetId}`, - method: "POST", - headers: { - "User-Agent": "Roblox/WinInet", - Requester: "Client", - "Content-Type": "application/xml", - Accept: "application/json" - } - } - }) - .then(response => response.body); - } + uploadData (options: UploadDataOptions): Promise { + return this.request({ + requiresAuth: true, + json: true, + request: { + path: `Data/Upload.ashx?assetid=${options.assetId}`, + method: "POST", + headers: { + "User-Agent": "Roblox/WinInet", + Requester: "Client", + "Content-Type": "application/xml", + Accept: "application/json" + } + } + }).then(response => response.body); + } } diff --git a/src/client/apis/DevelopAPI.ts b/src/client/apis/DevelopAPI.ts index 0cb1f3c21..1f2826546 100644 --- a/src/client/apis/DevelopAPI.ts +++ b/src/client/apis/DevelopAPI.ts @@ -3,948 +3,991 @@ import Client from "../Client"; import { GameUniverseOptions } from "../../structures/Game"; import { PartialGroupOptions } from "../../structures/Group"; - export type GetAssetsVoteInformationOptions = { - assetIds: number[]; -} + assetIds: number[]; +}; export type GetAssetsVoteInformation = { - data: { - assetId: number; - hasUserVoted: number; - canUserVote: number; - shouldShowVote: boolean; - upVotes: number; - downVotes: number; - reasonForNotAbleToVote: string; - }[]; -} + data: { + assetId: number; + hasUserVoted: number; + canUserVote: number; + shouldShowVote: boolean; + upVotes: number; + downVotes: number; + reasonForNotAbleToVote: string; + }[]; +}; export type GetGameTemplates = { - gameTemplateType: string; - hasTutorials: boolean; - universe: GameUniverseOptions; + gameTemplateType: string; + hasTutorials: boolean; + universe: GameUniverseOptions; }[]; export type GetGameUpdatesHistoryOptions = { - universeId: number; -} + universeId: number; +}; export type GetGameUpdatesHistory = { - universeId: number; - createdOn: string; - createdOnKey: string; - creatorType: string; - creatorId: number; - creatorName: string; - expiredOn: string; - content: string; - impressions: number; - plays: number; - unfollows: number; + universeId: number; + createdOn: string; + createdOnKey: string; + creatorType: string; + creatorId: number; + creatorName: string; + expiredOn: string; + content: string; + impressions: number; + plays: number; + unfollows: number; }[]; export type PublishGameNotificationOptions = { - universeId: number; - gameUpdateText: unknown; -} + universeId: number; + gameUpdateText: unknown; +}; export type PublishGameNotification = GetGameUpdatesHistory; export type FilterPublishGameNotificationOptions = { - text: string; -} + text: string; +}; export type FilterPublishGameNotification = { - filteredGameUpdateText: string; - isFiltered: boolean; - moderationLevel: number; -} + filteredGameUpdateText: string; + isFiltered: boolean; + moderationLevel: number; +}; export type GetGroupUniversesOptions = { - groupId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetGroupUniverses = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - name: string; - description: string; - isArchived: boolean; - rootPlaceId: number | null; - isActive: boolean; - privacyType: "Private" | string; - creatorType: "Group" | string; - creatorTargetId: null; - creatorName: string; - created: string; - updated: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + description: string; + isArchived: boolean; + rootPlaceId: number | null; + isActive: boolean; + privacyType: "Private" | string; + creatorType: "Group" | string; + creatorTargetId: null; + creatorName: string; + created: string; + updated: string; + }[]; +}; export type GetPlaceCompatibilitiesOptions = { - placeId: number; -} + placeId: number; +}; export type GetPlaceCompatibilities = { - Compatibilities: { - status: "Good" | string; - platformName: string; - crashRatePercentage: number; - }[]; -} + Compatibilities: { + status: "Good" | string; + platformName: string; + crashRatePercentage: number; + }[]; +}; export type UpdatePlaceConfigurationOptions = { - placeId: number; - name: string; - description: string; -} + placeId: number; + name: string; + description: string; +}; export type UpdatePlaceConfiguration = { - id: number; - universeId: number; - name: string; - description: string; -} + id: number; + universeId: number; + name: string; + description: string; +}; export type GetPlaceStatisticsByTypeOptions = { - placeId: number; - type: "Revenue" | "RevenuePerVisit" | "AverageVisitLength" | "Visits"; - granularity?: "Hourly" | "Daily" | "Monthly"; - divisionType?: "Device" | "Age"; - startTime?: string; - endTime?: string; -} + placeId: number; + type: "Revenue" | "RevenuePerVisit" | "AverageVisitLength" | "Visits"; + granularity?: "Hourly" | "Daily" | "Monthly"; + divisionType?: "Device" | "Age"; + startTime?: string; + endTime?: string; +}; export type GetPlaceStatisticsByType = { - placeId: number; - dataType: GetPlaceStatisticsByTypeOptions["type"]; - dataGranularity: GetPlaceStatisticsByTypeOptions["granularity"]; - startTime: string; - endTime: string; - data: unknown; -} + placeId: number; + dataType: GetPlaceStatisticsByTypeOptions["type"]; + dataGranularity: GetPlaceStatisticsByTypeOptions["granularity"]; + startTime: string; + endTime: string; + data: unknown; +}; export type GetPluginsByIdOptions = { - pluginIds: number[]; -} + pluginIds: number[]; +}; export type GetPluginsById = { - data: { - id: number; - name: string; - description: string; - commentsEnabled: boolean; - versionId: number; - created: string; - updated: string; - }[]; -} -export type UpdatePluginOptions = { - pluginId: number; - name: string; - description: string; - commentsEnabled: boolean; -} -export type UpdatePlugin = unknown -export type SearchUniversesOptions = { - q: { - creator: "user" | "group" | "team"; - archived?: boolean; - active?: boolean; - groups?: unknown[]; - search?: string; - }; - sort?: ("+GameCreated" | "-GameCreated" | "+GameName" | "-GameName" | "+RootPlaceName" | "-RootPlaceName" | "+RootPlaceUpdated" | "-RootPlaceUpdated" | "+LastUpdated" | "-LastUpdated")[]; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} -export type SearchUniverseData = { + data: { id: number; name: string; description: string; - isArchived: boolean; - rootPlaceId: number; - isActive: boolean; - privacyType: "Public" | "Private"; - creatorType: "User" | "Group"; - creatorTargetId: number; - creatorName: string; + commentsEnabled: boolean; + versionId: number; created: string; updated: string; + }[]; +}; +export type UpdatePluginOptions = { + pluginId: number; + name: string; + description: string; + commentsEnabled: boolean; +}; +export type UpdatePlugin = unknown; +export type SearchUniversesOptions = { + q: { + creator: "user" | "group" | "team"; + archived?: boolean; + active?: boolean; + groups?: unknown[]; + search?: string; + }; + sort?: ( + | "+GameCreated" + | "-GameCreated" + | "+GameName" + | "-GameName" + | "+RootPlaceName" + | "-RootPlaceName" + | "+RootPlaceUpdated" + | "-RootPlaceUpdated" + | "+LastUpdated" + | "-LastUpdated" + )[]; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export type SearchUniverseData = { + id: number; + name: string; + description: string; + isArchived: boolean; + rootPlaceId: number; + isActive: boolean; + privacyType: "Public" | "Private"; + creatorType: "User" | "Group"; + creatorTargetId: number; + creatorName: string; + created: string; + updated: string; }; export type SearchUniverses = { - previousPageCursor: string | null; - nextPageCursor: string | null; - data: SearchUniverseData[]; -} + previousPageCursor: string | null; + nextPageCursor: string | null; + data: SearchUniverseData[]; +}; export type SearchToolboxOptions = { - category: string; - keyword?: string; - sort?: string; - creatorId?: number; - num?: number; - page?: number; - groupId?: number; - cacheMode?: "Normal" | "Bypass" | "ForceUpdate"; -} + category: string; + keyword?: string; + sort?: string; + creatorId?: number; + num?: number; + page?: number; + groupId?: number; + cacheMode?: "Normal" | "Bypass" | "ForceUpdate"; +}; export type SearchToolbox = { - TotalResults: number; - Results: { - Asset: { - Id: number; - Name: string; - TypeId: number; - AssetGenres: string[]; - IsEndorsed: boolean; - Description: string; - Duration: number; - Created: string; - Updated: string; - CreatedRaw: string; - UpdatedRaw: string; - }; - Creator: { - Id: number; - Name: string; - Type: number; - }; - Thumbnail: { - Final: boolean; - Url: string; - RetryUrl: string; - UserId: number; - EndpointType: string; - }; - Voting: { - ShowVotes: boolean; - UpVotes: number; - DownVotes: number; - CanVote: boolean; - UserVote: boolean; - HasVoted: number; - ReasonForNotVoteable: string; - Product: { - ProductId: number; - Price: number; - }; - }; - }[]; -} + TotalResults: number; + Results: { + Asset: { + Id: number; + Name: string; + TypeId: number; + AssetGenres: string[]; + IsEndorsed: boolean; + Description: string; + Duration: number; + Created: string; + Updated: string; + CreatedRaw: string; + UpdatedRaw: string; + }; + Creator: { + Id: number; + Name: string; + Type: number; + }; + Thumbnail: { + Final: boolean; + Url: string; + RetryUrl: string; + UserId: number; + EndpointType: string; + }; + Voting: { + ShowVotes: boolean; + UpVotes: number; + DownVotes: number; + CanVote: boolean; + UserVote: boolean; + HasVoted: number; + ReasonForNotVoteable: string; + Product: { + ProductId: number; + Price: number; + }; + }; + }[]; +}; export type GetUniverseOptions = { - universeId: number; -} + universeId: number; +}; export type GetUniverse = GameUniverseOptions; export type GetUniversePermissionsOptions = { - universeId: number; -} + universeId: number; +}; export type GetUniversePermissions = { - canManage: boolean; - canCloudEdit: boolean; -} + canManage: boolean; + canCloudEdit: boolean; +}; export type GetUniversePlacesOptions = { - universeId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + universeId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetUniversePlaces = { - previousPageCursor: string; - nextPageCursor: string; - data: unknown[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: unknown[]; +}; export type GetUniverseStatisticsReportsOptions = { - universeId: number; -} + universeId: number; +}; export type GetUniverseStatisticsReports = { - reports: { - universeId: number; - yearDashMonth: string; - status: "NotGenerated" | string; - spreadsheetId: string; - }[]; -} -export type GetUniverseStatisticsReportsByTimeOptions = { - universeId: number; - yearDashMonth: string; -} -export type GetUniverseStatisticsReportByTime = { + reports: { universeId: number; yearDashMonth: string; status: "NotGenerated" | string; spreadsheetId: string; -} + }[]; +}; +export type GetUniverseStatisticsReportsByTimeOptions = { + universeId: number; + yearDashMonth: string; +}; +export type GetUniverseStatisticsReportByTime = { + universeId: number; + yearDashMonth: string; + status: "NotGenerated" | string; + spreadsheetId: string; +}; export type DownloadUniverseStatisticsReportByTimeOptions = { - universeId: number; - yearDashMonth: string; + universeId: number; + yearDashMonth: string; }; export type DownloadUniverseStatisticsReportByTime = unknown; export type MultiGetUniversesOptions = { - ids: number[]; -} + ids: number[]; +}; export type MultiGetUniverses = GameUniverseOptions[]; export type MultiGetUniversesPermissionsOptions = { - ids: number[]; -} + ids: number[]; +}; export type MultiGetUniversesPermissions = { - data: { - universeId: number; - canManage: boolean; - canCloudEdit: boolean; - }[]; -} -export type ActivateUniverseOptions = { + data: { universeId: number; -} -export type ActivateUniverse = unknown + canManage: boolean; + canCloudEdit: boolean; + }[]; +}; +export type ActivateUniverseOptions = { + universeId: number; +}; +export type ActivateUniverse = unknown; export type DeactivateUniverseOptions = { - universeId: number; -} -export type DeactivateUniverse = unknown + universeId: number; +}; +export type DeactivateUniverse = unknown; export type GenerateUniverseStatisticReportsByTimeOptions = { - universeId: number; - yearDashMonth: string; -} -export type GenerateUniverseStatisticReportsByTime = unknown + universeId: number; + yearDashMonth: string; +}; +export type GenerateUniverseStatisticReportsByTime = unknown; export type GetUniverseConfigurationOptions = { - universeId: number; -} + universeId: number; +}; export type GetUniverseConfiguration = { - id: number; - name: string; - universeAvatarType: "MorphToR6" | "MorphToR15"; - universeScaleType: "NoScales" | string; - universeAnimationType: "Standard" | string; - universeCollisionType: "InnerBox" | string; - universeBodyType: "Standard" | string; - universeJointPositioningType: "Standard" | string; - isArchived: boolean; - isFriendsOnly: boolean; - genre: "All" | string; - playableDevices: ("Computer" | string)[]; - isForSale: boolean; - price: number; -} -export type UpdateUniverseConfigurationOptions = Omit & { universeId: number }; + id: number; + name: string; + universeAvatarType: "MorphToR6" | "MorphToR15"; + universeScaleType: "NoScales" | string; + universeAnimationType: "Standard" | string; + universeCollisionType: "InnerBox" | string; + universeBodyType: "Standard" | string; + universeJointPositioningType: "Standard" | string; + isArchived: boolean; + isFriendsOnly: boolean; + genre: "All" | string; + playableDevices: ("Computer" | string)[]; + isForSale: boolean; + price: number; +}; +export type UpdateUniverseConfigurationOptions = Omit< +GetUniverseConfiguration, +"id" +> & { universeId: number }; export type UpdateUniverseConfiguration = GetUniverseConfiguration; export type GetUniverseVIPServersConfigurationOptions = { - universeId: number; -} + universeId: number; +}; export type GetUniverseVIPServersConfiguration = { - isEnabled: boolean; - price: number; - activeServersCount: number; - activeSubscriptionsCount: number; -} + isEnabled: boolean; + price: number; + activeServersCount: number; + activeSubscriptionsCount: number; +}; export type GetUniverseTeamCreateSettingsOptions = { - universeId: number; -} + universeId: number; +}; export type GetUniverseTeamCreateSettings = { - isEnabled: boolean; -} -export type UpdateUniverseTeamCreateSettingsOptions = GetUniverseTeamCreateSettingsOptions; -export type UpdateUniverseTeamCreateSettings = unknown + isEnabled: boolean; +}; +export type UpdateUniverseTeamCreateSettingsOptions = + GetUniverseTeamCreateSettingsOptions; +export type UpdateUniverseTeamCreateSettings = unknown; export type RemoveUserFromUniverseTeamCreateOptions = { - universeId: number; - userId: number; -} -export type RemoveUserFromUniverseTeamCreate = unknown + universeId: number; + userId: number; +}; +export type RemoveUserFromUniverseTeamCreate = unknown; export type GetUsersInUniverseTeamCreateOptions = { - universeId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + universeId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetUsersInUniverseTeamCreate = { - previousPageCursor: string; - nextPageCursor: string; - data: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }[]; +}; export type GetSelfTeamCreateUniversesAccessOptions = { - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetSelfTeamCreateUniversesAccess = { - previousPageCursor: string; - nextPageCursor: string; - data: GameUniverseOptions[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: GameUniverseOptions[]; +}; export type GetSelfGroupsAccess = { - data: PartialGroupOptions[]; -} + data: PartialGroupOptions[]; +}; export type GetNotificationsStatisticReports = { - data: { - UserId: number; - UniverseId: number; - Expires: number; - RootPlaceId: number; - GameName: string; - }[]; -} + data: { + UserId: number; + UniverseId: number; + Expires: number; + RootPlaceId: number; + GameName: string; + }[]; +}; export type GetStudioDataOptions = { - clientKey: string; -} + clientKey: string; +}; export type GetStudioData = unknown; export type SetStudioDataOptions = { - clientKey: string; - data: unknown; -} + clientKey: string; + data: unknown; +}; export type SetStudioData = { - success: boolean; -} + success: boolean; +}; export type GetSelfUniversesOptions = { - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetSelfUniverses = { - previousPageCursor: string; - nextPageCursor: string; - data: GameUniverseOptions[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: GameUniverseOptions[]; +}; export type CreateUniverseAliasOptions = { - name: string; - type: "Asset" | string; - targetId: number; -} -export type CreateUniverseAlias = unknown + name: string; + type: "Asset" | string; + targetId: number; +}; +export type CreateUniverseAlias = unknown; export type DeleteUniverseAliasOptions = { - universeId: number; - name: string; -} -export type DeleteUniverseAlias = unknown + universeId: number; + name: string; +}; +export type DeleteUniverseAlias = unknown; export type UpdateUniverseAliasOptions = CreateUniverseAliasOptions; export type UpdateUniverseAlias = unknown; export type CreateDeveloperProductOptions = { - universeId: number; - name: string; - description: string; - priceInRobux: number; - iconImageAssetId?: number; -} + universeId: number; + name: string; + description: string; + priceInRobux: number; + iconImageAssetId?: number; +}; export type CreateDeveloperProduct = { - id: number; - name: string; - Description: string; - shopId: number; - iconImageAssetId: number; -} + id: number; + name: string; + Description: string; + shopId: number; + iconImageAssetId: number; +}; export type UpdateDeveloperProductOptions = { - universeId: number; - developerProductId: number; - Name: string; - Description: string; - IconImageAssetId?: number; - PriceInRobux: number; -} -export type UpdateDeveloperProduct = unknown + universeId: number; + developerProductId: number; + Name: string; + Description: string; + IconImageAssetId?: number; + PriceInRobux: number; +}; +export type UpdateDeveloperProduct = unknown; export default class DevelopAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://develop.roblox.com/" - }); - } - - - getGameTemplates (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/gametemplates` - }, - json: true - }) - .then(response => response.body.data); - } - - getGameUpdatesHistory (options: GetGameUpdatesHistoryOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/gameUpdateNotifications/${options.universeId}` - }, - json: true - }) - .then(response => response.body); - } - - publishGameUpdateNotification (options: PublishGameNotificationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/gameUpdateNotifications/${options.universeId}`, - method: "POST", - json: `"${options.gameUpdateText}"` - }, - json: true - }) - .then(response => response.body); - } - - filterGameUpdateNotificationText (options: FilterPublishGameNotificationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/gameUpdateNotifications/filter`, - method: "POST", - json: `"${options.text}"` - }, - json: true - }) - .then(response => response.body); - } - - getGroupUniverses (options: GetGroupUniversesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/universes`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getPlaceCompatibilities (options: GetPlaceCompatibilitiesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/places/${options.placeId}/compatibilities` - }, - json: true - }) - .then(response => response.body); - } - - updatePlaceConfiguration (options: UpdatePlaceConfigurationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/places/${options.placeId}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getPlaceStatistics (options: GetPlaceStatisticsByTypeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/places/${options.placeId}/stats/${options.type}`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getMultiPlugins (options: GetPluginsByIdOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/plugins`, - qs: { - pluginIds: options.pluginIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } - - updatePlugin (options: UpdatePluginOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/plugins/${options.pluginId}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - searchUniverses (options: SearchUniversesOptions): Promise { - const encodedQuery = `${options.q.search || ""} creator:${options.q.creator.slice(0, 1) - .toUpperCase() + options.q.creator.slice(1)} ${typeof options.q.active !== "undefined" ? `active:${options.q.active ? "True" : "False"}` : ""} ${options.q.archived ? `archived:${options.q.archived ? "True" : "False"}` : ""} ${options.q.groups ? `groups:${options.q.groups.join(",")}` : ""}`; - - return this.request({ - requiresAuth: false, - request: { - path: `v1/search/universes`, - qs: { - ...options, - sort: (options.sort || []).join(","), - // End me, please... - q: encodedQuery - } - }, - json: true - }) - .then(response => response.body); - } - - searchToolbox (options: SearchToolboxOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/toolbox/items`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getUniverse (options: GetUniverseOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}` - }, - json: true - }) - .then(response => response.body); - } - - getSelfUniversePermissions (options: GetUniversePermissionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/permissions` - }, - json: true - }) - .then(response => response.body); - } - - getPlacesInUniverse (options: GetUniversePlacesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/places`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getUniverseStatisticReports (options: GetUniverseStatisticsReportsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/statistic-reports` - }, - json: true - }) - .then(response => response.body); - } - - getUniverseStatisticReportsByTime (options: GetUniverseStatisticsReportsByTimeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}` - }, - json: true - }) - .then(response => response.body); - } - - downloadUniverseStatisticReportsByTime (options: DownloadUniverseStatisticsReportByTimeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/download` - }, - json: true - }) - .then(response => response.body); - } - - getMultiUniverses (options: MultiGetUniversesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/multiget`, - qs: { - ids: options.ids.join(",") - } - }, - json: true - }) - .then(response => response.body); - } - - getMultiUniversesPermissions (options: MultiGetUniversesPermissionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/multiget/permissions`, - qs: { - ids: options.ids.join(",") - } - }, - json: true - }) - .then(response => response.body); - } - - activateUniverse (options: ActivateUniverseOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/activate`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - deactivateUniverse (options: DeactivateUniverseOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/deactivate`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - generateUniverseStatisticReportsByTime (options: GenerateUniverseStatisticReportsByTimeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/generate`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - getUniverseConfiguration (options: GetUniverseConfigurationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/configuration` - }, - json: true - }) - .then(response => response.body); - } - - updateUniverseConfiguration (options: UpdateUniverseConfigurationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/configuration`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getUniverseVIPServersConfiguration (options: GetUniverseVIPServersConfigurationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/configuration/vip-servers` - }, - json: true - }) - .then(response => response.body); - } - - getUniverseTeamCreateSettings (options: GetUniverseTeamCreateSettingsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/teamcreate` - }, - json: true - }) - .then(response => response.body); - } - - updateUniverseTeamCreateSettings (options: UpdateUniverseTeamCreateSettingsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/teamcreate`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - removeUserFromUniverseTeamCreate (options: RemoveUserFromUniverseTeamCreateOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/teamcreate/memberships`, - method: "DELETE", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getUniverseTeamCreateMembers (options: GetUsersInUniverseTeamCreateOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/teamcreate/memberships`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getSelfUniversesTeamCreateAccess (options: GetSelfTeamCreateUniversesAccessOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/teamcreate/memberships`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getSelfManageableGroups (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/groups/canmanage` - }, - json: true - }) - .then(response => response.body); - } - - getSelfNotificationStatisticReports (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/notifications/statistic-reports` - }, - json: true - }) - .then(response => response.body); - } - - getStudioData (options: GetStudioDataOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/studiodata`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - setStudioData (options: SetStudioDataOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/studiodata`, - method: "POST", - json: options, - qs: { - clientKey: options.clientKey - } - }, - json: true - }) - .then(response => response.body); - } - - getSelfUniverses (options: GetSelfUniversesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/user/universes`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - createUniverseAlias (options: CreateUniverseAliasOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.targetId}/aliases` - }, - json: true - }) - .then(response => response.body); - } - - deleteUniverseAlias (options: DeleteUniverseAliasOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/aliases/${options.name}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - updateUniverseAlias (options: UpdateUniverseAliasOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.targetId}/aliases/${options.name}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - createDeveloperProduct (options: CreateDeveloperProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/developerproducts`, - method: "POST", - qs: options - }, - json: true - }) - .then(response => response.body); - } - - updateDeveloperProduct (options: UpdateDeveloperProductOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/developerproducts/${options.developerProductId}/update`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://develop.roblox.com/" + }); + } + + getGameTemplates (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gametemplates` + }, + json: true + }).then(response => response.body.data); + } + + getGameUpdatesHistory ( + options: GetGameUpdatesHistoryOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gameUpdateNotifications/${options.universeId}` + }, + json: true + }).then(response => response.body); + } + + publishGameUpdateNotification ( + options: PublishGameNotificationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gameUpdateNotifications/${options.universeId}`, + method: "POST", + json: `"${options.gameUpdateText}"` + }, + json: true + }).then(response => response.body); + } + + filterGameUpdateNotificationText ( + options: FilterPublishGameNotificationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gameUpdateNotifications/filter`, + method: "POST", + json: `"${options.text}"` + }, + json: true + }).then(response => response.body); + } + + getGroupUniverses ( + options: GetGroupUniversesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/universes`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getPlaceCompatibilities ( + options: GetPlaceCompatibilitiesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/compatibilities` + }, + json: true + }).then(response => response.body); + } + + updatePlaceConfiguration ( + options: UpdatePlaceConfigurationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + getPlaceStatistics ( + options: GetPlaceStatisticsByTypeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/stats/${options.type}`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getMultiPlugins (options: GetPluginsByIdOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/plugins`, + qs: { + pluginIds: options.pluginIds.join(",") + } + }, + json: true + }).then(response => response.body); + } + + updatePlugin (options: UpdatePluginOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/plugins/${options.pluginId}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + searchUniverses (options: SearchUniversesOptions): Promise { + const encodedQuery = `${options.q.search || ""} creator:${ + options.q.creator.slice(0, 1).toUpperCase() + options.q.creator.slice(1) + } ${ + typeof options.q.active !== "undefined" ? + `active:${options.q.active ? "True" : "False"}` : + "" + } ${ + options.q.archived ? + `archived:${options.q.archived ? "True" : "False"}` : + "" + } ${options.q.groups ? `groups:${options.q.groups.join(",")}` : ""}`; + + return this.request({ + requiresAuth: false, + request: { + path: `v1/search/universes`, + qs: { + ...options, + sort: (options.sort || []).join(","), + // End me, please... + q: encodedQuery + } + }, + json: true + }).then(response => response.body); + } + + searchToolbox (options: SearchToolboxOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/toolbox/items`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getUniverse (options: GetUniverseOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}` + }, + json: true + }).then(response => response.body); + } + + getSelfUniversePermissions ( + options: GetUniversePermissionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/permissions` + }, + json: true + }).then(response => response.body); + } + + getPlacesInUniverse ( + options: GetUniversePlacesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/places`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getUniverseStatisticReports ( + options: GetUniverseStatisticsReportsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports` + }, + json: true + }).then(response => response.body); + } + + getUniverseStatisticReportsByTime ( + options: GetUniverseStatisticsReportsByTimeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}` + }, + json: true + }).then(response => response.body); + } + + downloadUniverseStatisticReportsByTime ( + options: DownloadUniverseStatisticsReportByTimeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/download` + }, + json: true + }).then(response => response.body); + } + + getMultiUniverses ( + options: MultiGetUniversesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/multiget`, + qs: { + ids: options.ids.join(",") + } + }, + json: true + }).then(response => response.body); + } + + getMultiUniversesPermissions ( + options: MultiGetUniversesPermissionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/multiget/permissions`, + qs: { + ids: options.ids.join(",") + } + }, + json: true + }).then(response => response.body); + } + + activateUniverse ( + options: ActivateUniverseOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/activate`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + deactivateUniverse ( + options: DeactivateUniverseOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/deactivate`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + generateUniverseStatisticReportsByTime ( + options: GenerateUniverseStatisticReportsByTimeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/generate`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + getUniverseConfiguration ( + options: GetUniverseConfigurationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/configuration` + }, + json: true + }).then(response => response.body); + } + + updateUniverseConfiguration ( + options: UpdateUniverseConfigurationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/configuration`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + getUniverseVIPServersConfiguration ( + options: GetUniverseVIPServersConfigurationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/configuration/vip-servers` + }, + json: true + }).then(response => response.body); + } + + getUniverseTeamCreateSettings ( + options: GetUniverseTeamCreateSettingsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate` + }, + json: true + }).then(response => response.body); + } + + updateUniverseTeamCreateSettings ( + options: UpdateUniverseTeamCreateSettingsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + removeUserFromUniverseTeamCreate ( + options: RemoveUserFromUniverseTeamCreateOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate/memberships`, + method: "DELETE", + json: options + }, + json: true + }).then(response => response.body); + } + + getUniverseTeamCreateMembers ( + options: GetUsersInUniverseTeamCreateOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate/memberships`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getSelfUniversesTeamCreateAccess ( + options: GetSelfTeamCreateUniversesAccessOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/teamcreate/memberships`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getSelfManageableGroups (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/groups/canmanage` + }, + json: true + }).then(response => response.body); + } + + getSelfNotificationStatisticReports (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/notifications/statistic-reports` + }, + json: true + }).then(response => response.body); + } + + getStudioData (options: GetStudioDataOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/studiodata`, + qs: options + }, + json: true + }).then(response => response.body); + } + + setStudioData (options: SetStudioDataOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/studiodata`, + method: "POST", + json: options, + qs: { + clientKey: options.clientKey + } + }, + json: true + }).then(response => response.body); + } + + getSelfUniverses ( + options: GetSelfUniversesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/universes`, + qs: options + }, + json: true + }).then(response => response.body); + } + + createUniverseAlias ( + options: CreateUniverseAliasOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.targetId}/aliases` + }, + json: true + }).then(response => response.body); + } + + deleteUniverseAlias ( + options: DeleteUniverseAliasOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/aliases/${options.name}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + updateUniverseAlias ( + options: UpdateUniverseAliasOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.targetId}/aliases/${options.name}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + createDeveloperProduct ( + options: CreateDeveloperProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/developerproducts`, + method: "POST", + qs: options + }, + json: true + }).then(response => response.body); + } + + updateDeveloperProduct ( + options: UpdateDeveloperProductOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/developerproducts/${options.developerProductId}/update`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/EconomyAPI.ts b/src/client/apis/EconomyAPI.ts index e5b415f6f..a814ed347 100644 --- a/src/client/apis/EconomyAPI.ts +++ b/src/client/apis/EconomyAPI.ts @@ -2,341 +2,361 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { SubmitDeveloperExchangeOptions as BillingAPISubmitDeveloperExchangeOptions } from "./BillingAPI"; - export type GetAssetResaleDataOptions = { - assetId: number; -} + assetId: number; +}; export type GetAssetResaleData = { - assetStock: number; - sales: number; - numberRemaining: number; - recentAveragePrice: number; - originalPrice: number; - priceDataPoints: { - value: number; - date: string; - }[]; - volumeDataPoints: { - value: number; - date: string; - }[]; -} + assetStock: number; + sales: number; + numberRemaining: number; + recentAveragePrice: number; + originalPrice: number; + priceDataPoints: { + value: number; + date: string; + }[]; + volumeDataPoints: { + value: number; + date: string; + }[]; +}; export type GetAssetResellersOptions = { - assetId: number; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + assetId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetAssetResellers = { - previousPageCursor: string; - nextPageCursor: string; - data: { - userAssetId: number; - seller: { - id: number; - type: "User" | "Group"; - name: string; - }; - price: number; - serialNumber: number; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + userAssetId: number; + seller: { + id: number; + type: "User" | "Group"; + name: string; + }; + price: number; + serialNumber: number; + }[]; +}; export type GetUserResellableAssetCopiesOptions = { - userId: number; - assetId: number; -} + userId: number; + assetId: number; +}; export type GetUserResellableAssetCopies = { - data: GetAssetResellers["data"]; -} + data: GetAssetResellers["data"]; +}; export type GetResaleTaxRate = { - taxRate: number; - minimumFee: number; -} + taxRate: number; + minimumFee: number; +}; export type SetAssetCopiesOptions = { - assetId: number; - userAssetId: number; - price: number; -} -export type SetAssetCopies = unknown + assetId: number; + userAssetId: number; + price: number; +}; +export type SetAssetCopies = unknown; export type GetDeveloperExchangeAbility = { + canCashOut: boolean; + meetsPremiumRequirement: boolean; + hasVerifiedEmail: boolean; + isUserBlackListed: boolean; + meetsMinimumCashOutBalance: boolean; + hasCashedOutThisMonth: boolean; + lastImbursementStatusIsValid: boolean; +}; +export type GetDeveloperExchangeHelp = unknown; +export type GetDeveloperExchangeInfoOptions = { + fromDevExPage: boolean; +}; +export type GetDeveloperExchangeInfo = { + hasCurrencyOperationError: boolean; + currencyOperationErrorMessage: string; + showOnlyExchangeRates: boolean; + meetsMembershipRequirements: boolean; + emailIsVerified: boolean; + isImbursementBlacklistUser: boolean; + canProceedToCashout: boolean; + showProgressBar: boolean; + percentRobux: number; + minRobuxToCashOut: number; + maxRobuxCanCashOut: number; + lastImbursementStatus: string; + lastImbursementSubmissionDate: string; + conversionPercent: number; +}; +export type SubmitDeveloperExchangeOptions = + BillingAPISubmitDeveloperExchangeOptions; +export type SubmitDeveloperExchange = { + submitted: boolean; + cashOutAbility: { canCashOut: boolean; meetsPremiumRequirement: boolean; hasVerifiedEmail: boolean; - isUserBlackListed: boolean; + isUserBlcakListed: boolean; meetsMinimumCashOutBalance: boolean; hasCashedOutThisMonth: boolean; lastImbursementStatusIsValid: boolean; -} -export type GetDeveloperExchangeHelp = unknown; -export type GetDeveloperExchangeInfoOptions = { - fromDevExPage: boolean; -} -export type GetDeveloperExchangeInfo = { - hasCurrencyOperationError: boolean; - currencyOperationErrorMessage: string; - showOnlyExchangeRates: boolean; - meetsMembershipRequirements: boolean; - emailIsVerified: boolean; - isImbursementBlacklistUser: boolean; - canProceedToCashout: boolean; - showProgressBar: boolean; - percentRobux: number; - minRobuxToCashOut: number; - maxRobuxCanCashOut: number; - lastImbursementStatus: string; - lastImbursementSubmissionDate: string; - conversionPercent: number; -} -export type SubmitDeveloperExchangeOptions = BillingAPISubmitDeveloperExchangeOptions; -export type SubmitDeveloperExchange = { - submitted: boolean; - cashOutAbility: { - canCashOut: boolean; - meetsPremiumRequirement: boolean; - hasVerifiedEmail: boolean; - isUserBlcakListed: boolean; - meetsMinimumCashOutBalance: boolean; - hasCashedOutThisMonth: boolean; - lastImbursementStatusIsValid: boolean; - }; - errors: unknown; -} + }; + errors: unknown; +}; export type GetGroupCurrencyOptions = { - groupId: number; -} + groupId: number; +}; export type GetGroupCurrency = { - robux: number; -} + robux: number; +}; export type GetSelfCurrencyOptions = { - userId: number; -} + userId: number; +}; export type GetSelfCurrency = { - robux: number; -} + robux: number; +}; export type GetGroupRevenueSummaryInTimeFrameOptions = { - groupId: number; - timeFrame: "Day" | "Week" | "Month" | "Year"; -} + groupId: number; + timeFrame: "Day" | "Week" | "Month" | "Year"; +}; export type GetGroupRevenueSummaryInTimeFrame = { - recurringRobuxStipend: number; - itemSaleRobux: number; - purchasedRoblox: number; - tradeSystemRobux: number; - pendingRobux: number; - groupPayoutRobux: number; -} -export type GetSelfRevenueSummaryInTimeFrameOptions = Omit & { - userId: number; -} -export type GetSelfRevenueSummaryInTimeFrame = GetGroupRevenueSummaryInTimeFrame; + recurringRobuxStipend: number; + itemSaleRobux: number; + purchasedRoblox: number; + tradeSystemRobux: number; + pendingRobux: number; + groupPayoutRobux: number; +}; +export type GetSelfRevenueSummaryInTimeFrameOptions = Omit< +GetGroupRevenueSummaryInTimeFrameOptions, +"groupId" +> & { + userId: number; +}; +export type GetSelfRevenueSummaryInTimeFrame = + GetGroupRevenueSummaryInTimeFrame; export type GetGroupTransactionsOptions = { - groupId: number; - transactionType: "Sale" | "Purchase" | "AffiliateSale" | "DevEx" | "GroupPayout" | "AdImpressionPayout"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + transactionType: + | "Sale" + | "Purchase" + | "AffiliateSale" + | "DevEx" + | "GroupPayout" + | "AdImpressionPayout"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetGroupTransactions = { - previousPageCursor: string; - nextPageCursor: string; - data: { - created: string; - isPending: boolean; - agent: { - id: number; - type: "User" | "Group"; - name: string; - }; - details: unknown; - currency: { - amount: number; - type: "Robux" | string; - }; - }[]; -} -export type GetSelfTransactionsOptions = Omit & { - userId: number; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + created: string; + isPending: boolean; + agent: { + id: number; + type: "User" | "Group"; + name: string; + }; + details: unknown; + currency: { + amount: number; + type: "Robux" | string; + }; + }[]; +}; +export type GetSelfTransactionsOptions = Omit< +GetGroupTransactionsOptions, +"groupId" +> & { + userId: number; +}; export type GetSelfTransactions = GetGroupTransactions; export default class EconomyAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://economy.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://economy.roblox.com/" + }); + } - getAssetResaleData (options: GetAssetResaleDataOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets/${options.assetId}/resale-data` - }, - json: true - }) - .then(response => response.body); - } + getAssetResaleData ( + options: GetAssetResaleDataOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/resale-data` + }, + json: true + }).then(response => response.body); + } - getAssetResellers (options: GetAssetResellersOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets/${options.assetId}/resellers`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getAssetResellers ( + options: GetAssetResellersOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/resellers`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserResellableAssetCopies (options: GetUserResellableAssetCopiesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets/${options.assetId}/users/${options.userId}/resellable-copies` - }, - json: true - }) - .then(response => response.body); - } + getUserResellableAssetCopies ( + options: GetUserResellableAssetCopiesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/users/${options.userId}/resellable-copies` + }, + json: true + }).then(response => response.body); + } - getResaleTaxRate (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/resale-tax-rate` - }, - json: true - }) - .then(response => response.body); - } + getResaleTaxRate (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/resale-tax-rate` + }, + json: true + }).then(response => response.body); + } - setAssetCopiesForSale (options: SetAssetCopiesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/assets/${options.assetId}/resellable-copies/${options.userAssetId}`, - method: "PATCH", - json: { - price: options.price - } - }, - json: true - }) - .then(response => response.body); - } + setAssetCopiesForSale ( + options: SetAssetCopiesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/assets/${options.assetId}/resellable-copies/${options.userAssetId}`, + method: "PATCH", + json: { + price: options.price + } + }, + json: true + }).then(response => response.body); + } - getDeveloperExchangeAbility (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/developer-exchange/cashoutAbility` - }, - json: true - }) - .then(response => response.body); - } + getDeveloperExchangeAbility (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/cashoutAbility` + }, + json: true + }).then(response => response.body); + } - getDeveloperExchangeHelp (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/developer-exchange/help` - }, - json: true - }) - .then(response => response.body); - } + getDeveloperExchangeHelp (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/help` + }, + json: true + }).then(response => response.body); + } - getDeveloperExchangeInfo (options: GetDeveloperExchangeInfoOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/developer-exchange/info`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getDeveloperExchangeInfo ( + options: GetDeveloperExchangeInfoOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/info`, + qs: options + }, + json: true + }).then(response => response.body); + } - submitDeveloperExchange (options: SubmitDeveloperExchangeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/developer-exchange/submit`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + submitDeveloperExchange ( + options: SubmitDeveloperExchangeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/submit`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getGroupCurrency (options: GetGroupCurrencyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/currency` - }, - json: true - }) - .then(response => response.body); - } + getGroupCurrency ( + options: GetGroupCurrencyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/currency` + }, + json: true + }).then(response => response.body); + } - getSelfCurrency (options: GetSelfCurrencyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/currency` - }, - json: true - }) - .then(response => response.body); - } + getSelfCurrency (options: GetSelfCurrencyOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/currency` + }, + json: true + }).then(response => response.body); + } - getGroupRevenueByTime (options: GetGroupRevenueSummaryInTimeFrameOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/revenue/summary/${options.timeFrame}` - }, - json: true - }) - .then(response => response.body); - } + getGroupRevenueByTime ( + options: GetGroupRevenueSummaryInTimeFrameOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/revenue/summary/${options.timeFrame}` + }, + json: true + }).then(response => response.body); + } - getSelfRevenueSummaryByTIme (options: GetSelfRevenueSummaryInTimeFrameOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/revenue/summary/${options.timeFrame}` - }, - json: true - }) - .then(response => response.body); - } + getSelfRevenueSummaryByTIme ( + options: GetSelfRevenueSummaryInTimeFrameOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/revenue/summary/${options.timeFrame}` + }, + json: true + }).then(response => response.body); + } - getGroupTransactions (options: GetGroupTransactionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/transactions`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getGroupTransactions ( + options: GetGroupTransactionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/transactions`, + qs: options + }, + json: true + }).then(response => response.body); + } - getSelfTransactions (options: GetSelfTransactionsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/transactions`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getSelfTransactions ( + options: GetSelfTransactionsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/transactions`, + qs: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/EconomyCreatorStatsAPI.ts b/src/client/apis/EconomyCreatorStatsAPI.ts index ff4c62ef1..b412da4f8 100644 --- a/src/client/apis/EconomyCreatorStatsAPI.ts +++ b/src/client/apis/EconomyCreatorStatsAPI.ts @@ -1,39 +1,39 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetUniverseStatsOptions = { - universeId: number; - type: "PremiumUpsells" | "PremiumVisits"; - startTime: string; - endTime: string; -} + universeId: number; + type: "PremiumUpsells" | "PremiumVisits"; + startTime: string; + endTime: string; +}; export type GetUniverseStats = { - dataGranularity: "Hourly" | string; - data: unknown; -} + dataGranularity: "Hourly" | string; + data: unknown; +}; export default class EconomyCreatorStatsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://economycreatorstats.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://economycreatorstats.roblox.com/" + }); + } - getUniverseStats (options: GetUniverseStatsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/universes/${options.universeId}/stats`, - qs: { - "request.type": options.type, - "request.startTime": options.startTime, - "request.endTime": options.endTime - } - }, - json: true - }) - .then(response => response.body); - } + getUniverseStats ( + options: GetUniverseStatsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/stats`, + qs: { + "request.type": options.type, + "request.startTime": options.startTime, + "request.endTime": options.endTime + } + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/EngagementPayoutsAPI.ts b/src/client/apis/EngagementPayoutsAPI.ts index 47fec98d4..fd7c2f165 100644 --- a/src/client/apis/EngagementPayoutsAPI.ts +++ b/src/client/apis/EngagementPayoutsAPI.ts @@ -1,32 +1,31 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetUniversePayoutHistoryOptions = { - universeId: number; - startDate: string; - endDate: string; -} + universeId: number; + startDate: string; + endDate: string; +}; export type GetUniversePayoutHistory = unknown; - export default class EngagementPayoutsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://engagementpayouts.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://engagementpayouts.roblox.com/" + }); + } - getUniversePayoutHistory (options: GetUniversePayoutHistoryOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/universe-payout-history`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUniversePayoutHistory ( + options: GetUniversePayoutHistoryOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universe-payout-history`, + qs: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/FollowingsAPI.ts b/src/client/apis/FollowingsAPI.ts index e7c0c39d2..084737175 100644 --- a/src/client/apis/FollowingsAPI.ts +++ b/src/client/apis/FollowingsAPI.ts @@ -1,88 +1,89 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetUserFollowedUniversesOptions = { - userId: number; -} + userId: number; +}; export type GetUserFollowedUniverses = { - universeId: number; - userId: number; + universeId: number; + userId: number; }[]; export type GetUserFollowingUniverseStatusOptions = { - userId: number; - universeId: number; -} + userId: number; + universeId: number; +}; export type GetUserFollowingUniverseStatus = { - UniverseId: number; - UserId: number; - CanFollow: boolean; - IsFollowing: boolean; - FollowingCountByType: number; - FollowingLimitByType: number; -} + UniverseId: number; + UserId: number; + CanFollow: boolean; + IsFollowing: boolean; + FollowingCountByType: number; + FollowingLimitByType: number; +}; export type UnFollowUniverseOptions = { - userId: number; - universeId: number; -} + userId: number; + universeId: number; +}; export type UnFollowUniverse = { - universeId: number; - userId: number; -} + universeId: number; + userId: number; +}; export type FollowUniverseOptions = UnFollowUniverseOptions; export type FollowUniverse = UnFollowUniverse; export default class FollowingsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://followings.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://followings.roblox.com/" + }); + } - getUserFollowedUniverses (options: GetUserFollowedUniversesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/universes` - }, - json: true - }) - .then(response => response.body); - } + getUserFollowedUniverses ( + options: GetUserFollowedUniversesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes` + }, + json: true + }).then(response => response.body); + } - getUserFollowingUniverseStatus (options: GetUserFollowingUniverseStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/universes/${options.universeId}/status` - }, - json: true - }) - .then(response => response.body); - } + getUserFollowingUniverseStatus ( + options: GetUserFollowingUniverseStatusOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes/${options.universeId}/status` + }, + json: true + }).then(response => response.body); + } - unFollowUniverse (options: UnFollowUniverseOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/universes/${options.universeId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + unFollowUniverse ( + options: UnFollowUniverseOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes/${options.universeId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - followUniverse (options: FollowUniverseOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/universes/${options.universeId}`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + followUniverse (options: FollowUniverseOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes/${options.universeId}`, + method: "POST" + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/FriendsAPI.ts b/src/client/apis/FriendsAPI.ts index 4094d0cf9..23d7c2f7d 100644 --- a/src/client/apis/FriendsAPI.ts +++ b/src/client/apis/FriendsAPI.ts @@ -2,511 +2,511 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { GetUserFriendsCount, GetUserFriendsCountOptions } from "./GeneralAPI"; import { PartialUser } from "../../structures/User"; -import { EnumUserPresence, UserPresence } from "../../interfaces/GeneralInterfaces"; - +import { + EnumUserPresence, + UserPresence +} from "../../interfaces/GeneralInterfaces"; export type FindFriendByCodeOptions = { - code: string; -} + code: string; +}; export type FindFriendByCode = { - userId: number; - username: string; - friendshipStatus: "NoFriendship" | string; -} -export type CheckSessionHealth = unknown + userId: number; + username: string; + friendshipStatus: "NoFriendship" | string; +}; +export type CheckSessionHealth = unknown; export type RedeemNearbyFriendCodeOptions = { - code: string; -} -export type RedeemNearbyFriendCode = unknown -export type DeleteSession = unknown + code: string; +}; +export type RedeemNearbyFriendCode = unknown; +export type DeleteSession = unknown; export type GetOrCreateNearbySession = { - code: string; - expires: number; -} + code: string; + expires: number; +}; export type RedeemQRCodeOptions = { - code: string; -} + code: string; +}; export type RedeemQRCode = { - userId: number; - username: string; + userId: number; + username: string; }; -export type DeleteQRCodeSession = unknown +export type DeleteQRCodeSession = unknown; export type GetOrCreateQRCodeSession = GetOrCreateNearbySession; export type GetMetaDataOptions = { - targetUserId: number; -} + targetUserId: number; +}; export type GetMetaData = { - isFriendFinderEnabled: boolean; - isNearbyUpsellEnabled: boolean; - isFriendsUserDataStoreCacheEnabled: boolean; - userName: string; -} + isFriendFinderEnabled: boolean; + isNearbyUpsellEnabled: boolean; + isFriendsUserDataStoreCacheEnabled: boolean; + userName: string; +}; export type GetSelfFriendsCount = { - count: number; -} + count: number; +}; export type GetSelfFriendRequestsOptions = { - sortOrder?: "Desc" | "Asc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + sortOrder?: "Desc" | "Asc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetSelfFriendRequests = { - previousPageCursor: string; - nextPageCursor: string; - data: { - description: string; - created: string; - isBanned: boolean; - userId: number; - username: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + description: string; + created: string; + isBanned: boolean; + userId: number; + username: string; + }[]; +}; export type GetSelfFriendRequestsCount = { - count: number; -} + count: number; +}; export type GetUserFollowersOptions = { - userId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + userId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetUserFollowers = { - previousPageCursor: string; - nextPageCursor: string; - data: { - isOnline: boolean; - isDeleted: boolean; - description: string; - created: string; - isBanned: boolean; - id: number; - name: string; - }[]; + previousPageCursor: string; + nextPageCursor: string; + data: { + isOnline: boolean; + isDeleted: boolean; + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; + }[]; }; export type GetUserFollowersCountOptions = { - userId: number; -} + userId: number; +}; export type GetUserFollowersCount = { - count: number; -} + count: number; +}; export type GetUserFollowingOptions = GetUserFollowersOptions; export type GetUserFollowing = GetUserFollowers; export type GetUserFollowingCountOptions = GetUserFollowersCountOptions; export type GetUserFollowingCount = GetUserFollowersCount; export type GetUserFriendsOptions = { - cursor?: string; - limit?: 10 | 25 | 50 | 100; - userId: number; -} + cursor?: string; + limit?: 10 | 25 | 50 | 100; + userId: number; +}; export type GetUserFriends = { - data: { - isOnline: boolean; - isDeleted: boolean; - description: string; - created: string; - isBanned: boolean; - id: number; - name: string; - }[]; + data: { + isOnline: boolean; + isDeleted: boolean; + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; + }[]; }; export type GetUserOnlineFriendsOptions = { - userId: number; -} + userId: number; +}; export type GetUserOnlineFriends = { - data: { - userId: number; - username: string; - presence: { - placeId: number | null; - universeId: number | null; - UserPresenceType: UserPresence | null; - UserLocationType: string | null; - lastLocation: string | null; - gameInstanceId: string | null; - lastOnline: string | null; - }; - }[]; + data: { + userId: number; + username: string; + presence: { + placeId: number | null; + universeId: number | null; + UserPresenceType: UserPresence | null; + UserLocationType: string | null; + lastLocation: string | null; + gameInstanceId: string | null; + lastOnline: string | null; + }; + }[]; }; export type GetUserFriendsWithStatusesOptions = { - userId: number; - withUserIds: number[]; -} + userId: number; + withUserIds: number[]; +}; export type GetUserFriendsWithStatuses = { - data: { - id: number; - status: "NotFriends" | string; - }[]; + data: { + id: number; + status: "NotFriends" | string; + }[]; }; -export type DeclineAllFriendRequests = unknown +export type DeclineAllFriendRequests = unknown; export type AcceptFriendRequestOptions = { - userId: number; -} -export type AcceptFriendRequest = unknown + userId: number; +}; +export type AcceptFriendRequest = unknown; export type DeclineFriendRequestOptions = AcceptFriendRequestOptions; -export type DeclineFriendRequest = unknown +export type DeclineFriendRequest = unknown; export type FollowUserOptions = { - userId: number; -} + userId: number; +}; export type FollowUser = { - success: boolean; - isCaptchaRequired: boolean; -} + success: boolean; + isCaptchaRequired: boolean; +}; export type SendFriendRequestOptions = { - userId: number; - source?: "Unknown" | string; -} + userId: number; + source?: "Unknown" | string; +}; export type SendFriendRequest = { - success: boolean; - isCaptchaRequired: boolean; -} + success: boolean; + isCaptchaRequired: boolean; +}; export type UnFollowUserOptions = FollowUserOptions; export type UnFollowUser = FollowUser; export type UnfriendUserOptions = { - userId: number; -} -export type UnfriendUser = unknown + userId: number; +}; +export type UnfriendUser = unknown; export type GetSelfRecommendedUsers = { - user: PartialUser; - profileUrl: string; - presenceType: EnumUserPresence; + user: PartialUser; + profileUrl: string; + presenceType: EnumUserPresence; }[]; export default class FriendsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://friends.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://friends.roblox.com/" + }); + } - findFriendByCode (options: FindFriendByCodeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/nearby/code/${options.code}` - }, - json: true - }) - .then(response => response.body); - } + findFriendByCode ( + options: FindFriendByCodeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/code/${options.code}` + }, + json: true + }).then(response => response.body); + } - checkSessionHealth (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/nearby/health` - }, - json: true - }) - .then(response => response.body); - } + checkSessionHealth (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/health` + }, + json: true + }).then(response => response.body); + } - redeemFriendCode (options: RedeemNearbyFriendCodeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/nearby/code/${options.code}/redeem`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + redeemFriendCode ( + options: RedeemNearbyFriendCodeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/code/${options.code}/redeem`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - deleteFriendSession (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/nearby/session`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + deleteFriendSession (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/session`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - getSession (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/nearby/session`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + getSession (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/session`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - redeemFriendQRCode (options: RedeemQRCodeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/qr/${options.code}/redeem`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + redeemFriendQRCode (options: RedeemQRCodeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/qr/${options.code}/redeem`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - deleteFriendQRSession (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/qr/session`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + deleteFriendQRSession (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/qr/session`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - getFriendQRSession (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/friends/verified/qr/session`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + getFriendQRSession (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/qr/session`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - getMetaData (options: GetMetaDataOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/metadata`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getMetaData (options: GetMetaDataOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/metadata`, + qs: options + }, + json: true + }).then(response => response.body); + } - getSelfFriendsCount (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/my/friends/count` - }, - json: true - }) - .then(response => response.body); - } + getSelfFriendsCount (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/my/friends/count` + }, + json: true + }).then(response => response.body); + } - getSelfFriendRequests (options: GetSelfFriendRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/my/friends/requests`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getSelfFriendRequests ( + options: GetSelfFriendRequestsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/my/friends/requests`, + qs: options + }, + json: true + }).then(response => response.body); + } - getSelfFriendRequestsCount (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/user/friend-requests/count` - }, - json: true - }) - .then(response => response.body); - } + getSelfFriendRequestsCount (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/friend-requests/count` + }, + json: true + }).then(response => response.body); + } - getUserFollowers (options: GetUserFollowersOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/followers`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserFollowers ( + options: GetUserFollowersOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followers`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserFollowersCount (options: GetUserFollowersCountOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/followers/count` - }, - json: true - }) - .then(response => response.body); - } + getUserFollowersCount ( + options: GetUserFollowersCountOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followers/count` + }, + json: true + }).then(response => response.body); + } - getUserFollowing (options: GetUserFollowingOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/followings`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserFollowing ( + options: GetUserFollowingOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followings`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserFollowingCount (options: GetUserFollowingCountOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/followings/count` - }, - json: true - }) - .then(response => response.body); - } + getUserFollowingCount ( + options: GetUserFollowingCountOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followings/count` + }, + json: true + }).then(response => response.body); + } - getUserFriends (options: GetUserFriendsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/friends`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserFriends (options: GetUserFriendsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/friends`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserFriendsCount (options: GetUserFriendsCountOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/friends/count` - }, - json: true - }) - .then(response => response.body); - } + getUserFriendsCount ( + options: GetUserFriendsCountOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/friends/count` + }, + json: true + }).then(response => response.body); + } - getUserFriendsOnline (options: GetUserOnlineFriendsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/friends/online` - }, - json: true - }) - .then(response => response.body); - } + getUserFriendsOnline ( + options: GetUserOnlineFriendsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/friends/online` + }, + json: true + }).then(response => response.body); + } - getUserFriendsWithStatuses (options: GetUserFriendsWithStatusesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/friends/statuses`, - qs: { - userIds: options.withUserIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getUserFriendsWithStatuses ( + options: GetUserFriendsWithStatusesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/friends/statuses`, + qs: { + userIds: options.withUserIds.join(",") + } + }, + json: true + }).then(response => response.body); + } - declineAllFriendRequests (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/user/friend-requests/decline-all`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + declineAllFriendRequests (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/friend-requests/decline-all`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - acceptFriendRequest (options: AcceptFriendRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/accept-friend-request`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + acceptFriendRequest ( + options: AcceptFriendRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/accept-friend-request`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - declineFriendRequest (options: DeclineFriendRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/decline-friend-request`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + declineFriendRequest ( + options: DeclineFriendRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/decline-friend-request`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - followUser (options: FollowUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/follow`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + followUser (options: FollowUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/follow`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - sendFriendRequest (options: SendFriendRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/request-friendship`, - method: "POST", - json: { - friendshipOriginSourceType: options.source || "Unknown" - } - }, - json: true - }) - .then(response => response.body); - } + sendFriendRequest ( + options: SendFriendRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/request-friendship`, + method: "POST", + json: { + friendshipOriginSourceType: options.source || "Unknown" + } + }, + json: true + }).then(response => response.body); + } - unFollowUser (options: UnFollowUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/unfollow`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + unFollowUser (options: UnFollowUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/unfollow`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - unfriendUser (options: UnfriendUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/unfriend`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + unfriendUser (options: UnfriendUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/unfriend`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - getRecommendedUsers (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/recommended-users` - }, - json: true - }) - .then(response => response.body); - } + getRecommendedUsers (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/recommended-users` + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/GameInternationalizationAPI.ts b/src/client/apis/GameInternationalizationAPI.ts index adf07fe12..71ea621fb 100644 --- a/src/client/apis/GameInternationalizationAPI.ts +++ b/src/client/apis/GameInternationalizationAPI.ts @@ -1,252 +1,253 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetGameInfoOptions = { - gameId: number; -} + gameId: number; +}; export type GetGameInfo = { - data: { - name: string; - description: string; - languageCode: string; - }[]; -} + data: { + name: string; + description: string; + languageCode: string; + }[]; +}; export type UpdateGameInfoOptions = { - gameId: number; - data: GetGameInfo; + gameId: number; + data: GetGameInfo; }; export type UpdateGameInfo = { - successOperations: GetGameInfo["data"]; - failedOperations: { - languageCode: string; - errorCode: number; - }[]; -} + successOperations: GetGameInfo["data"]; + failedOperations: { + languageCode: string; + errorCode: number; + }[]; +}; export type GetNameDescriptionMetaData = { - isNameDescriptionMigrationEnabled: boolean; -} + isNameDescriptionMigrationEnabled: boolean; +}; export type GetGameInfoHistoryOptions = { - gameId: number; - requestType: string; - languageCode: string; - cursor: string; - count: number; - sortOrder: "Asc" | "Desc" | string; -} + gameId: number; + requestType: string; + languageCode: string; + cursor: string; + count: number; + sortOrder: "Asc" | "Desc" | string; +}; export type GetGameInfoHistory = { - history: { - translationText: string; - translator: { - id: number; - agentType: "User" | string; - }; - created: Date; - }[]; - lastEvaluatedId: string; -} + history: { + translationText: string; + translator: { + id: number; + agentType: "User" | string; + }; + created: Date; + }[]; + lastEvaluatedId: string; +}; export type GetGameSourceLanguageOptions = { - gameId: number; -} + gameId: number; +}; export type GetGameSourceLanguage = { - name: string; - nativeName: string; - languageCode: string; -} + name: string; + nativeName: string; + languageCode: string; +}; export type UpdateGameSourceLanguageOptions = { - gameId: number; - languageCode: string; -} -export type UpdateGameSourceLanguage = unknown + gameId: number; + languageCode: string; +}; +export type UpdateGameSourceLanguage = unknown; export type GetGameSupportedLanguagesOptions = { - gameId: number; -} + gameId: number; +}; export type GetGameSupportedLanguages = { - data: { - name: string; - languageCodeType: string; - languageCode: string; - }[]; -} + data: { + name: string; + languageCodeType: string; + languageCode: string; + }[]; +}; export type ModifyGameSupportedLanguagesOptions = { - data: { - languageCodeType: string; - languageCode: string; - delete: boolean; - }[]; - gameId: number; -}; -export type ModifyGameSupportedLanguages = unknown + data: { + languageCodeType: string; + languageCode: string; + delete: boolean; + }[]; + gameId: number; +}; +export type ModifyGameSupportedLanguages = unknown; export type GetGameAutomaticTranslationResultsOptions = { - gameId: number; -} + gameId: number; +}; export type GetGameAutomaticTranslationResults = { - data: { - languageCodeType: string; - languageCode: string; - isAutomaticTranslationEnabled: boolean; - }[]; -} + data: { + languageCodeType: string; + languageCode: string; + isAutomaticTranslationEnabled: boolean; + }[]; +}; export type GetSupportedLanguagesMetaData = { - isFeatureEnabled: boolean; - areAllLanguagesEnabled: boolean; - minimumUniverseIdForFeature: number; - isHumanTranslationProgressUIEnabled: boolean; - isAutomaticTranslationProgressUIEnabled: boolean; - isSupportedLanguagesChildLocalesUIEnabled: boolean; -} + isFeatureEnabled: boolean; + areAllLanguagesEnabled: boolean; + minimumUniverseIdForFeature: number; + isHumanTranslationProgressUIEnabled: boolean; + isAutomaticTranslationProgressUIEnabled: boolean; + isSupportedLanguagesChildLocalesUIEnabled: boolean; +}; export type ToggleAutomaticGameTranslationOptions = { - gameId: number; - languageCode: string; - enableAutomaticTranslation: boolean; -} + gameId: number; + languageCode: string; + enableAutomaticTranslation: boolean; +}; export type ToggleAutomaticGameTranslation = { - gameId: number; - languageCode: string; - isAutomaticTranslationEnabled: boolean; -} + gameId: number; + languageCode: string; + isAutomaticTranslationEnabled: boolean; +}; export default class GameInternationalizationAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://gameinternationalization.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://gameinternationalization.roblox.com/" + }); + } - getGameInfo (options: GetGameInfoOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/name-description/games/${options.gameId}` - }, - json: true - }) - .then(response => response.body); - } + getGameInfo (options: GetGameInfoOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/games/${options.gameId}` + }, + json: true + }).then(response => response.body); + } - updateGameInfo (options: UpdateGameInfoOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/name-description/games/${options.gameId}`, - method: "PATCH", - json: { - data: options.data - } - }, - json: true - }) - .then(response => response.body); - } + updateGameInfo (options: UpdateGameInfoOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/games/${options.gameId}`, + method: "PATCH", + json: { + data: options.data + } + }, + json: true + }).then(response => response.body); + } - getNameDescriptionMetaData (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/name-description/metadata` - }, - json: true - }) - .then(response => response.body); - } + getNameDescriptionMetaData (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/metadata` + }, + json: true + }).then(response => response.body); + } - getGameInfoHistory (options: GetGameInfoHistoryOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/name-description/games/${options.gameId}/history`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getGameInfoHistory ( + options: GetGameInfoHistoryOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/games/${options.gameId}/history`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getGameSourceLanguage (options: GetGameSourceLanguageOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/source-language/games/${options.gameId}` - }, - json: true - }) - .then(response => response.body); - } + getGameSourceLanguage ( + options: GetGameSourceLanguageOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/source-language/games/${options.gameId}` + }, + json: true + }).then(response => response.body); + } - updateGameSourceLanguage (options: UpdateGameSourceLanguageOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/source-language/games/${options.gameId}`, - method: "PATCH", - qs: { - languageCode: options.languageCode - } - }, - json: true - }) - .then(response => response.body); - } + updateGameSourceLanguage ( + options: UpdateGameSourceLanguageOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/source-language/games/${options.gameId}`, + method: "PATCH", + qs: { + languageCode: options.languageCode + } + }, + json: true + }).then(response => response.body); + } - getGameSupportedLanguages (options: GetGameSupportedLanguagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/supported-languages/games/${options.gameId}` - }, - json: true - }) - .then(response => response.body); - } + getGameSupportedLanguages ( + options: GetGameSupportedLanguagesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}` + }, + json: true + }).then(response => response.body); + } - modifyGameSupportedLanguages (options: ModifyGameSupportedLanguagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/supported-languages/games/${options.gameId}`, - method: "PATCH", - json: options.data - }, - json: true - }) - .then(response => response.body); - } + modifyGameSupportedLanguages ( + options: ModifyGameSupportedLanguagesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}`, + method: "PATCH", + json: options.data + }, + json: true + }).then(response => response.body); + } - getGameAutomaticTranslationStatus (options: GetGameAutomaticTranslationResultsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/supported-languages/games/${options.gameId}/automatic-translation-status` - }, - json: true - }) - .then(response => response.body); - } + getGameAutomaticTranslationStatus ( + options: GetGameAutomaticTranslationResultsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}/automatic-translation-status` + }, + json: true + }).then(response => response.body); + } - getSupportedLanguagesMetaData (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/supported-languages/metadata` - }, - json: true - }) - .then(response => response.body); - } + getSupportedLanguagesMetaData (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/metadata` + }, + json: true + }).then(response => response.body); + } - toggleGameAutomaticTranslation (options: ToggleAutomaticGameTranslationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/supported-languages/games/${options.gameId}/languages/${options.languageCode}/automatic-translation-status`, - method: "PATCH", - json: String(options.enableAutomaticTranslation) - .toString() - }, - json: true - }) - .then(response => response.body); - } + toggleGameAutomaticTranslation ( + options: ToggleAutomaticGameTranslationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}/languages/${options.languageCode}/automatic-translation-status`, + method: "PATCH", + json: String(options.enableAutomaticTranslation).toString() + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/GamesAPI.ts b/src/client/apis/GamesAPI.ts index 2802ce1dc..33cd432cd 100644 --- a/src/client/apis/GamesAPI.ts +++ b/src/client/apis/GamesAPI.ts @@ -1,568 +1,592 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { GameUniverseOptions, PartialGameUniverse, PlaceOptions, VIPServerOptions } from "../../structures/Game"; - +import { + GameUniverseOptions, + PartialGameUniverse, + PlaceOptions, + VIPServerOptions +} from "../../structures/Game"; export type GameServer = { - id: string; - maxPlayers: number; - playing: number; - fps: number; - ping: number; - name: string; - vipServerId: number; - accessCode: string; -} + id: string; + maxPlayers: number; + playing: number; + fps: number; + ping: number; + name: string; + vipServerId: number; + accessCode: string; +}; export type GetGameUniversesOptions = { - universeIds: number[]; -} + universeIds: number[]; +}; export type GetGameUniverses = GameUniverseOptions[]; export type GetGameServersByTypeOptions = { - placeId: number; - serverType: "Public" | "Friend" | "VIP"; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + placeId: number; + serverType: "Public" | "Friend" | "VIP"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetGameServersByType = { - previousPageCursor: string; - nextPageCursor: string; - data: GameServer[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: GameServer[]; +}; export type GetGamesProductInfoOptions = { - universeIds: number[]; -} + universeIds: number[]; +}; export type GameGamesProductInfo = { - data: { - universeId: number; - isForSale: boolean; - price: number; - sellerId: number; - productId: number; - }[]; + data: { + universeId: number; + isForSale: boolean; + price: number; + sellerId: number; + productId: number; + }[]; }; export type ListGamesOptions = { - sortToken?: string; - gameFilter?: string; - timeFilter?: string; - genreFilter?: string; - exclusiveStartId?: number; - sortOrder?: string; - gameSetTargetId?: number; - keyword?: string; - startRows?: number; - maxRows?: number; - isKeywordSuggestionEnabled?: boolean; - contextCountryRegionId?: number; - contextUniverseId?: number; - pageContextPageId?: number; - pageContextSeeAll?: boolean; - sortPosition?: number; -} + sortToken?: string; + gameFilter?: string; + timeFilter?: string; + genreFilter?: string; + exclusiveStartId?: number; + sortOrder?: string; + gameSetTargetId?: number; + keyword?: string; + startRows?: number; + maxRows?: number; + isKeywordSuggestionEnabled?: boolean; + contextCountryRegionId?: number; + contextUniverseId?: number; + pageContextPageId?: number; + pageContextSeeAll?: boolean; + sortPosition?: number; +}; export type ListGames = { - games: { - creatorId: number; - creatorName: string; - creatorType: "User" | "Group" | string; - upVotes: number; - downVotes: number; - universeId: number; - placeId: number; - playerCount: number; - imageToken: string; - users: { - userId: number; - gameId: string; - }[]; - isSponsored: boolean; - nativeAdData: string; - price: number; - analyticsIdentifier: string; + games: { + creatorId: number; + creatorName: string; + creatorType: "User" | "Group" | string; + upVotes: number; + downVotes: number; + universeId: number; + placeId: number; + playerCount: number; + imageToken: string; + users: { + userId: number; + gameId: string; }[]; - suggestedKeyword: string; - correctedKeyword: string; - filteredKeyword: string; - hasMoreRows: boolean; - nextPageExclusiveStartId: number; - featuredSearchUniverseId: number; - emphasis: boolean; - cutOffIndex: number; - algorithm: string; - algorithmQueryType: string; - suggestionAlgorithm: string; -} + isSponsored: boolean; + nativeAdData: string; + price: number; + analyticsIdentifier: string; + }[]; + suggestedKeyword: string; + correctedKeyword: string; + filteredKeyword: string; + hasMoreRows: boolean; + nextPageExclusiveStartId: number; + featuredSearchUniverseId: number; + emphasis: boolean; + cutOffIndex: number; + algorithm: string; + algorithmQueryType: string; + suggestionAlgorithm: string; +}; export type MultiGetPlacesOptions = { - placeIds: number[]; -} + placeIds: number[]; +}; export type MultiGetPlaces = PlaceOptions[]; export type MultiGetGameUniversesPlayabilityOptions = { - universeIds: number[]; -} + universeIds: number[]; +}; export type MultiGetGameUniversesPlayability = { - playabilityStatus: "UnplayableOtherReason" | string; - isPlayable: boolean; - universeId: number; + playabilityStatus: "UnplayableOtherReason" | string; + isPlayable: boolean; + universeId: number; }[]; export type GetGameRecommendationsByAlgorithmOptions = { - algorithmName: string; - paginationKey?: string; - maxRows?: number; -} + algorithmName: string; + paginationKey?: string; + maxRows?: number; +}; export type GetGameRecommendationsByAlgorithm = { - games: ListGames["games"]; - nextPaginationKey: string | null; + games: ListGames["games"]; + nextPaginationKey: string | null; }; export type GetGameRecommendationsByGameOptions = { - universeId: number; - paginationKey?: string; - maxRows?: number; -} + universeId: number; + paginationKey?: string; + maxRows?: number; +}; export type GetGameRecommendationsByGame = GetGameRecommendationsByAlgorithm; export type GetGameSortsOptions = { - gameSortsContext?: "GamesDefaultSorts" | "GamesAllSorts" | "HomeSorts" | "ChatSorts" | "UnifiedHomeSorts" | "GamesPageAbTestSorts1" | "GamesPageAbTestSorts2"; -} + gameSortsContext?: + | "GamesDefaultSorts" + | "GamesAllSorts" + | "HomeSorts" + | "ChatSorts" + | "UnifiedHomeSorts" + | "GamesPageAbTestSorts1" + | "GamesPageAbTestSorts2"; +}; export type GetGameSorts = { - sorts: { - token: string; - name: string; - displayName: string; - gameSetTargetId: null; - timeOptionsAvailable: boolean; - genreOptionsAvailable: boolean; - numberOfRows: number; - numberOfGames: null; - isDefaultSort: boolean; - contextUniverseId: null; - contextCountryRegionId: number; - tokenExpiryInSeconds: number; - }[]; - timeFilters: { - token: string; - name: string; - tokenExpiryInSeconds: number; - }[]; - genreFilters: { - token: string; - name: string; - tokenExpiryInSeconds: number; - }[]; - pageContext: { - pageId: string; - isSeeAllPage: boolean; - }; -} + sorts: { + token: string; + name: string; + displayName: string; + gameSetTargetId: null; + timeOptionsAvailable: boolean; + genreOptionsAvailable: boolean; + numberOfRows: number; + numberOfGames: null; + isDefaultSort: boolean; + contextUniverseId: null; + contextCountryRegionId: number; + tokenExpiryInSeconds: number; + }[]; + timeFilters: { + token: string; + name: string; + tokenExpiryInSeconds: number; + }[]; + genreFilters: { + token: string; + name: string; + tokenExpiryInSeconds: number; + }[]; + pageContext: { + pageId: string; + isSeeAllPage: boolean; + }; +}; export type IsGameFavoritedOptions = { - universeId: number; -} + universeId: number; +}; export type IsGameFavorited = { - isFavorited: boolean; -} + isFavorited: boolean; +}; export type ToggleGameFavoriteOptions = { - universeId: number; - favorite: boolean; -} + universeId: number; + favorite: boolean; +}; export type ToggleGameFavorite = unknown; export type GetGameFavoriteCountOptions = { - universeId: number; -} + universeId: number; +}; export type GetGameFavoriteCount = { - favoritesCount: number; -} + favoritesCount: number; +}; export type GetGameGamePassesOptions = { - universeId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + universeId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetGameGamePasses = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - name: string; - displayName: string; - productId: number; - price: number; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + displayName: string; + productId: number; + price: number; + }[]; +}; export type GetSelfUniverseVoteStatusOptions = { - universeId: number; -} + universeId: number; +}; export type GetSelfUniverseVoteStatus = { - canVote: boolean; - userVote: boolean; - reasonForNotVoteable: string; -} + canVote: boolean; + userVote: boolean; + reasonForNotVoteable: string; +}; export type GetGamesVotesOptions = { - universeIds: number[]; -} + universeIds: number[]; +}; export type GetGamesVotes = { - data: { - number: PartialGameUniverse; - upVotes: number; - downVotes: number; - }[]; + data: { + number: PartialGameUniverse; + upVotes: number; + downVotes: number; + }[]; }; export type SetSelfGameVoteOptions = { - universeId: number; - vote: boolean; -} -export type SetSelfGameVote = unknown + universeId: number; + vote: boolean; +}; +export type SetSelfGameVote = unknown; export type CanSelfInviteUserToVIPServerOptions = { - userId: number; -} + userId: number; +}; export type CanSelfInviteUserToVIPServer = { - canInvite: boolean; -} + canInvite: boolean; +}; export type GetVIPServerOptions = { - id: number; -} + id: number; +}; export type GetVIPServer = VIPServerOptions; export type UpdateVIPServerOptions = { - id: number; - name: string; - newJoinCode: boolean; - active: boolean; -} + id: number; + name: string; + newJoinCode: boolean; + active: boolean; +}; export type UpdateVIPServer = VIPServerOptions; export type CreateVIPServerOptions = { - universeId: number; - name: string; - expectedPrice: number; -} + universeId: number; + name: string; + expectedPrice: number; +}; export type CreateVIPServer = GameServer; export type UpdateVIPServerPermissionsOptions = { - id: number; - clanAllowed: boolean; - enemyClanId: number; - friendsAllowed: boolean; - usersToAdd: number[]; - usersToRemove: number[]; -} + id: number; + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + usersToAdd: number[]; + usersToRemove: number[]; +}; export type UpdateVIPServerPermissions = { - clanAllowed: boolean; - enemyClanId: number; - friendsAllowed: boolean; - users: { - id: number; - name: string; - displayName: string; - }[]; -} -export type UpdateVIPServerSubscriptionOptions = { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: { id: number; - active: boolean; - price: number; -} + name: string; + displayName: string; + }[]; +}; +export type UpdateVIPServerSubscriptionOptions = { + id: number; + active: boolean; + price: number; +}; export type UpdateVIPServerSubscription = { - active: boolean; - expired: boolean; - expirationDate: string; - price: number; -} + active: boolean; + expired: boolean; + expirationDate: string; + price: number; +}; export default class GamesAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://games.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://games.roblox.com/" + }); + } - getGames (options: GetGameUniversesOptions): Promise { - const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; - return this.request({ - requiresAuth: true, - request: { - path: `v1/games?${universeIdsQueryString}` - }, - json: true - }) - .then(response => response.body); - } + getGames (options: GetGameUniversesOptions): Promise { + const universeIdsQueryString = `universeIds=${options.universeIds.join( + "&universeIds=" + )}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games?${universeIdsQueryString}` + }, + json: true + }).then(response => response.body); + } - getGameServersByType (options: GetGameServersByTypeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.placeId}/servers/${options.serverType}`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getGameServersByType ( + options: GetGameServersByTypeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.placeId}/servers/${options.serverType}`, + qs: options + }, + json: true + }).then(response => response.body); + } - getGamesProductInfo (options: GetGamesProductInfoOptions): Promise { - const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/games-product-info?${universeIdsQueryString}` - }, - json: true - }) - .then(response => response.body); - } + getGamesProductInfo ( + options: GetGamesProductInfoOptions + ): Promise { + const universeIdsQueryString = `universeIds=${options.universeIds.join( + "&universeIds=" + )}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/games-product-info?${universeIdsQueryString}` + }, + json: true + }).then(response => response.body); + } - listGames (options: ListGamesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/list`, - qs: { - "model.sortToken": options.sortToken, - "model.gameFilter": options.gameFilter, - "model.timeFilter": options.timeFilter, - "model.genreFilter": options.genreFilter, - "model.exclusiveStartId": options.exclusiveStartId, - "model.sortOrder": options.sortOrder, - "model.gameSetTargetId": options.gameSetTargetId, - "model.keyword": options.keyword, - "model.startRows": options.startRows, - "model.maxRows": options.maxRows, - "model.isKeywordSuggestionEnabled": options.isKeywordSuggestionEnabled, - "model.contextCountryRegionId": options.contextCountryRegionId, - "model.contextUniverseId": options.contextUniverseId, - "model.pageContext.pageId": options.pageContextPageId, - "model.pageContext.isSeeAllPage": options.pageContextSeeAll, - "model.sortPosition": options.sortPosition - } - }, - json: true - }) - .then(response => response.body); - } + listGames (options: ListGamesOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/list`, + qs: { + "model.sortToken": options.sortToken, + "model.gameFilter": options.gameFilter, + "model.timeFilter": options.timeFilter, + "model.genreFilter": options.genreFilter, + "model.exclusiveStartId": options.exclusiveStartId, + "model.sortOrder": options.sortOrder, + "model.gameSetTargetId": options.gameSetTargetId, + "model.keyword": options.keyword, + "model.startRows": options.startRows, + "model.maxRows": options.maxRows, + "model.isKeywordSuggestionEnabled": + options.isKeywordSuggestionEnabled, + "model.contextCountryRegionId": options.contextCountryRegionId, + "model.contextUniverseId": options.contextUniverseId, + "model.pageContext.pageId": options.pageContextPageId, + "model.pageContext.isSeeAllPage": options.pageContextSeeAll, + "model.sortPosition": options.sortPosition + } + }, + json: true + }).then(response => response.body); + } - getMultiPlaces (options: MultiGetPlacesOptions): Promise { - const placeIdsQueryString = `placeIds=${options.placeIds.join("&placeIds=")}`; + getMultiPlaces (options: MultiGetPlacesOptions): Promise { + const placeIdsQueryString = `placeIds=${options.placeIds.join( + "&placeIds=" + )}`; - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/multiget-place-details?${placeIdsQueryString}` - }, - json: true - }) - .then(response => response.body); - } + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/multiget-place-details?${placeIdsQueryString}` + }, + json: true + }).then(response => response.body); + } - getMultiGamesPlayabilityStatus (options: MultiGetGameUniversesPlayabilityOptions): Promise { - const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/multiget-playability-status?${universeIdsQueryString}` - }, - json: true - }) - .then(response => response.body); - } + getMultiGamesPlayabilityStatus ( + options: MultiGetGameUniversesPlayabilityOptions + ): Promise { + const universeIdsQueryString = `universeIds=${options.universeIds.join( + "&universeIds=" + )}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/multiget-playability-status?${universeIdsQueryString}` + }, + json: true + }).then(response => response.body); + } - getGameRecommendationsByAlgorithm (options: GetGameRecommendationsByAlgorithmOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/recommendations/algorithm/${options.algorithmName}`, - qs: { - "model.paginationKey": options.paginationKey, - "model.maxRows": options.maxRows - } - }, - json: true - }) - .then(response => response.body); - } + getGameRecommendationsByAlgorithm ( + options: GetGameRecommendationsByAlgorithmOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/recommendations/algorithm/${options.algorithmName}`, + qs: { + "model.paginationKey": options.paginationKey, + "model.maxRows": options.maxRows + } + }, + json: true + }).then(response => response.body); + } - getGameRecommendationsByGame (options: GetGameRecommendationsByGameOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/recommendations/game/${options.universeId}`, - qs: { - "model.paginationKey": options.paginationKey, - "model.maxRows": options.maxRows - } - }, - json: true - }) - .then(response => response.body); - } + getGameRecommendationsByGame ( + options: GetGameRecommendationsByGameOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/recommendations/game/${options.universeId}`, + qs: { + "model.paginationKey": options.paginationKey, + "model.maxRows": options.maxRows + } + }, + json: true + }).then(response => response.body); + } - getGameSorts (options: GetGameSortsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/sorts`, - qs: { - "model.gameSortsContext": options.gameSortsContext - } - }, - json: true - }) - .then(response => response.body); - } + getGameSorts (options: GetGameSortsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/sorts`, + qs: { + "model.gameSortsContext": options.gameSortsContext + } + }, + json: true + }).then(response => response.body); + } - isGameFavorited (options: IsGameFavoritedOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.universeId}/favorites` - }, - json: true - }) - .then(response => response.body); - } + isGameFavorited (options: IsGameFavoritedOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/favorites` + }, + json: true + }).then(response => response.body); + } - toggleGameFavorite (options: ToggleGameFavoriteOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.universeId}/favorites`, - method: "POST", - json: { - isFavorited: options.favorite - } - }, - json: true - }) - .then(response => response.body); - } + toggleGameFavorite ( + options: ToggleGameFavoriteOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/favorites`, + method: "POST", + json: { + isFavorited: options.favorite + } + }, + json: true + }).then(response => response.body); + } - getGameFavoriteCount (options: GetGameFavoriteCountOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.universeId}/favorites/count` - }, - json: true - }) - .then(response => response.body); - } + getGameFavoriteCount ( + options: GetGameFavoriteCountOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/favorites/count` + }, + json: true + }).then(response => response.body); + } - getGameGamePasses (options: GetGameGamePassesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.universeId}/game-passes`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getGameGamePasses ( + options: GetGameGamePassesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/game-passes`, + qs: options + }, + json: true + }).then(response => response.body); + } - getSelfGameVote (options: GetSelfUniverseVoteStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.universeId}/votes/user` - }, - json: true - }) - .then(response => response.body); - } + getSelfGameVote ( + options: GetSelfUniverseVoteStatusOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/votes/user` + }, + json: true + }).then(response => response.body); + } - getGamesVotes (options: GetGamesVotesOptions): Promise { - const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/votes?${universeIdsQueryString}` - }, - json: true - }) - .then(response => response.body); - } + getGamesVotes (options: GetGamesVotesOptions): Promise { + const universeIdsQueryString = `universeIds=${options.universeIds.join( + "&universeIds=" + )}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/votes?${universeIdsQueryString}` + }, + json: true + }).then(response => response.body); + } - setSelfGameVote (options: SetSelfGameVoteOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/${options.universeId}/user-votes`, - method: "PATCH", - json: { - vote: options.vote - } - }, - json: true - }) - .then(response => response.body); - } + setSelfGameVote (options: SetSelfGameVoteOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/user-votes`, + method: "PATCH", + json: { + vote: options.vote + } + }, + json: true + }).then(response => response.body); + } - canSelfInviteUserToVIPServer (options: CanSelfInviteUserToVIPServerOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/vip-server/can-invite/${options.userId}` - }, - json: true - }) - .then(response => response.body); - } + canSelfInviteUserToVIPServer ( + options: CanSelfInviteUserToVIPServerOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/vip-server/can-invite/${options.userId}` + }, + json: true + }).then(response => response.body); + } - getVIPServer (options: GetVIPServerOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/vip-servers/${options.id}`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getVIPServer (options: GetVIPServerOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/vip-servers/${options.id}`, + qs: options + }, + json: true + }).then(response => response.body); + } - updateVIPServer (options: UpdateVIPServerOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/vip-servers/${options.id}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateVIPServer (options: UpdateVIPServerOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/vip-servers/${options.id}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } - createVIPServer (options: CreateVIPServerOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/vip-servers/${options.universeId}`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + createVIPServer (options: CreateVIPServerOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/vip-servers/${options.universeId}`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - updateVIPServerPermissions (options: UpdateVIPServerPermissionsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/vip-servers/${options.id}/permissions`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateVIPServerPermissions ( + options: UpdateVIPServerPermissionsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/vip-servers/${options.id}/permissions`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } - updateVIPServerSubscription (options: UpdateVIPServerSubscriptionOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/games/vip-servers/${options.id}/subscription`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateVIPServerSubscription ( + options: UpdateVIPServerSubscriptionOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/vip-servers/${options.id}/subscription`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/GeneralAPI.ts b/src/client/apis/GeneralAPI.ts index f350babb9..facab4487 100644 --- a/src/client/apis/GeneralAPI.ts +++ b/src/client/apis/GeneralAPI.ts @@ -2,493 +2,484 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { AssetVersionOptions, ProductOptions } from "../../structures/Asset"; - export declare type GetAssetVersionOptions = number; export declare type AwardBadgeOptions = { - userId: number; - badgeId: number; - placeId: number; -} + userId: number; + badgeId: number; + placeId: number; +}; export declare type GetUserFriendsOptions = { - userId: number; - page: number; -} + userId: number; + page: number; +}; export declare type AcceptFriendRequestOptions = { - userId: number; -} + userId: number; +}; export declare type DeclineFriendRequestOptions = { - userId: number; -} + userId: number; +}; export declare type SendFriendRequestOptions = { - userId: number; -} + userId: number; +}; export declare type GetUserFriendsCountOptions = { - userId: number; -} + userId: number; +}; export declare type UnfriendUserOptions = { - userId: number; -} + userId: number; +}; export declare type IsUserFollowingOptions = { - userId: number; - followUserId: number; -} + userId: number; + followUserId: number; +}; export declare type FollowUserOptions = { - userId: number; -} + userId: number; +}; export declare type UnfollowUserOptions = { - userId: number; -} + userId: number; +}; export declare type GetUserGroupsOptions = { - userId: number; -} + userId: number; +}; export declare type GetGroupOptions = { - groupId: number; -} + groupId: number; +}; export declare type GetGroupAlliesOptions = { - groupId: number; - page: number; -} + groupId: number; + page: number; +}; export declare type GetGroupEnemiesOptions = { - groupId: number; - page: number; -} + groupId: number; + page: number; +}; export declare type GetProductInfoOptions = { - assetId: number; -} + assetId: number; +}; export declare type GetGamePassProductInfoOptions = { - gamePassId: number; -} + gamePassId: number; +}; export declare type UserOwnsAssetOptions = { - userId: number; - assetId: number; -} + userId: number; + assetId: number; +}; export declare type BlockUserOptions = { - userId: number; -} + userId: number; +}; export declare type UnblockUserOptions = { - userId: number; -} + userId: number; +}; export declare type GetUserByUsernameOptions = { - username: string; -} + username: string; +}; export declare type UserCanManageAssetOptions = { - userId: number; - assetId: number; -} + userId: number; + assetId: number; +}; export declare type GetUserByIdOptions = { - userId: number; -} + userId: number; +}; export declare type GetAssetVersions = AssetVersionOptions[]; export declare type AwardBadge = boolean; export declare type GetBalance = { - robux: number; -} + robux: number; +}; export declare type GetUserFriends = { - Id: number; - Username: string; - AvatarUri: string; - AvatarFinal: boolean; - IsOnline: boolean; + Id: number; + Username: string; + AvatarUri: string; + AvatarFinal: boolean; + IsOnline: boolean; }[]; export declare type AcceptFriendRequest = boolean; export declare type DeclineFriendRequest = boolean; export declare type SendFriendRequest = boolean; export declare type GetUserFriendsCount = { - count: number; + count: number; }; export declare type UnfriendUser = boolean; export declare type IsUserFollowing = boolean; export declare type FollowUser = boolean; export declare type UnfollowUser = boolean; export declare type GetUserGroups = { - id: number; + id: number; + name: string; + emblemId: number | null; + emblemUrl: string | null; + role: { + rank: number; name: string; - emblemId: number | null; - emblemUrl: string | null; - role: { - rank: number; - name: string; - }; - inClan: boolean; - primary: boolean; + }; + inClan: boolean; + primary: boolean; }[]; export declare type GetGroup = { + Name: string; + Id: number; + Owner: { Name: string; Id: number; - Owner: { - Name: string; - Id: number; - }; - EmblemUrl: string; - Description: string; - Roles: { - Name: string; - Rank: number; - }[]; -} + }; + EmblemUrl: string; + Description: string; + Roles: { + Name: string; + Rank: number; + }[]; +}; export declare type GetGroupAllies = { - Groups: GetGroup[]; - FinalPage: boolean; + Groups: GetGroup[]; + FinalPage: boolean; }; -export declare type GetGroupEnemies = GetGroupAllies +export declare type GetGroupEnemies = GetGroupAllies; export declare type GetIncomingItems = { - unreadMessageCount: number; - friendRequestsCount: number; -} + unreadMessageCount: number; + friendRequestsCount: number; +}; export declare type GetProductInfo = ProductOptions; export declare type GetGamePassProductInfo = ProductOptions; export declare type UserOwnsAsset = boolean; export declare type GetDeviceInfo = { - platformType: string; - deviceType: string; - operatingSystemType: string; -} + platformType: string; + deviceType: string; + operatingSystemType: string; +}; export declare type BlockUser = boolean; export declare type UnblockUser = boolean; export declare type GetUserById = { - id: number; - name: string; + id: number; + name: string; }; export declare type GetUserByUsername = GetUserById; export declare type UserCanManageAsset = boolean; export default class GeneralAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://api.roblox.com/", - client - }); - } + constructor (client: Client) { + super({ + baseUrl: "https://api.roblox.com/", + client + }); + } - getAssetVersions (options: GetAssetVersionOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `assets/${options}/versions` - }, - json: true - }) - .then(response => response.body); - } + getAssetVersions (options: GetAssetVersionOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `assets/${options}/versions` + }, + json: true + }).then(response => response.body); + } - awardBadge (options: AwardBadgeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "assets/award-badge", - method: "POST", - qs: options - } - }) - .then(() => true); - } + awardBadge (options: AwardBadgeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "assets/award-badge", + method: "POST", + qs: options + } + }).then(() => true); + } - getBalance (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "currency/balance" - } - }) - .then(response => response.body as GetBalance); - } + getBalance (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "currency/balance" + } + }).then(response => response.body as GetBalance); + } - getUserFriends (options: GetUserFriendsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `users/${options.userId}/friends`, - qs: { - page: options.page - } - }, - json: true - }) - .then(response => response.body); - } + getUserFriends (options: GetUserFriendsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}/friends`, + qs: { + page: options.page + } + }, + json: true + }).then(response => response.body); + } - acceptFriendRequest (options: AcceptFriendRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "user/accept-friend-request", - method: "POST", - qs: { - requesterUserId: options.userId - } - } - }) - .then(() => true as AcceptFriendRequest); - } + acceptFriendRequest ( + options: AcceptFriendRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "user/accept-friend-request", + method: "POST", + qs: { + requesterUserId: options.userId + } + } + }).then(() => true as AcceptFriendRequest); + } - declineFriendRequest (options: DeclineFriendRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "user/decline-friend-request", - method: "POST", - qs: { - requesterUserId: options.userId - } - } - }) - .then(() => true as DeclineFriendRequest); - } + declineFriendRequest ( + options: DeclineFriendRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "user/decline-friend-request", + method: "POST", + qs: { + requesterUserId: options.userId + } + } + }).then(() => true as DeclineFriendRequest); + } - sendFriendRequest (options: SendFriendRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "user/request-friendship", - method: "POST", - qs: { - recipientUserId: options.userId - } - } - }) - .then(() => true as SendFriendRequest); - } + sendFriendRequest ( + options: SendFriendRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "user/request-friendship", + method: "POST", + qs: { + recipientUserId: options.userId + } + } + }).then(() => true as SendFriendRequest); + } - getUserFriendsCount (options: GetUserFriendsCountOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "user/get-friendship-count", - qs: options - }, - json: true - }) - .then(response => response.body.count); - } + getUserFriendsCount ( + options: GetUserFriendsCountOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "user/get-friendship-count", + qs: options + }, + json: true + }).then(response => response.body.count); + } - unfriendUser (options: UnfriendUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "user/unfriend", - method: "POST", - qs: { - friendUserId: options.userId - } - } - }) - .then(() => true as UnfriendUser); - } + unfriendUser (options: UnfriendUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "user/unfriend", + method: "POST", + qs: { + friendUserId: options.userId + } + } + }).then(() => true as UnfriendUser); + } - isUserFollowing (options: IsUserFollowingOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "user/following-exists", - qs: options - } - }) - .then(response => response.body.isFollowing); - } + isUserFollowing (options: IsUserFollowingOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "user/following-exists", + qs: options + } + }).then(response => response.body.isFollowing); + } - followUser (options: FollowUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "user/follow", - method: "POST", - qs: { - followedUserId: options.userId - } - } - }) - .then(() => true as FollowUser); - } + followUser (options: FollowUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "user/follow", + method: "POST", + qs: { + followedUserId: options.userId + } + } + }).then(() => true as FollowUser); + } - unfollowUser (options: UnfollowUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "user/unfollow", - method: "POST", - qs: { - followedUserId: options.userId - } - } - }) - .then(() => true as UnfollowUser); - } + unfollowUser (options: UnfollowUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "user/unfollow", + method: "POST", + qs: { + followedUserId: options.userId + } + } + }).then(() => true as UnfollowUser); + } - getUserGroups (options: GetUserGroupsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `users/${options.userId}/groups` - } - }) - .then(response => response.body); - } + getUserGroups (options: GetUserGroupsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}/groups` + } + }).then(response => response.body); + } - getGroup (options: GetGroupOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `groups/${options.groupId}` - }, - json: true - }) - .then(response => response.body); - } + getGroup (options: GetGroupOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `groups/${options.groupId}` + }, + json: true + }).then(response => response.body); + } - getGroupAllies (options: GetGroupAlliesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `groups/${options.groupId}/allies`, - qs: { - page: options.page - } - }, - json: true - }) - .then(response => response.body); - } + getGroupAllies (options: GetGroupAlliesOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `groups/${options.groupId}/allies`, + qs: { + page: options.page + } + }, + json: true + }).then(response => response.body); + } - getGroupEnemies (options: GetGroupEnemiesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `groups/${options.groupId}/enemies`, - qs: { - page: options.page - } - }, - json: true - }) - .then(response => response.body); - } + getGroupEnemies (options: GetGroupEnemiesOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `groups/${options.groupId}/enemies`, + qs: { + page: options.page + } + }, + json: true + }).then(response => response.body); + } - getIncomingItems (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "incoming-items/counts" - }, - json: true - }) - .then((response: any) => ({ - friendRequestsCount: response.body.friendRequestsCount, - unreadMessageCount: response.body.unreadMessageCount - })); - } + getIncomingItems (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "incoming-items/counts" + }, + json: true + }).then((response: any) => ({ + friendRequestsCount: response.body.friendRequestsCount, + unreadMessageCount: response.body.unreadMessageCount + })); + } - getProductInfo (options: GetProductInfoOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "marketplace/productinfo", - qs: options - }, - json: true - }) - .then(response => response.body); - } + getProductInfo (options: GetProductInfoOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "marketplace/productinfo", + qs: options + }, + json: true + }).then(response => response.body); + } - getGamePassProductInfo (options: GetGamePassProductInfoOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "marketplace/game-pass-product-info", - qs: options - }, - json: true - }) - .then(response => response.body); - } + getGamePassProductInfo ( + options: GetGamePassProductInfoOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "marketplace/game-pass-product-info", + qs: options + }, + json: true + }).then(response => response.body); + } - userOwnsAsset (options: UserOwnsAssetOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "ownership/hasasset", - qs: options - } - }) - .then(response => (response.body as string).includes("true") as UserOwnsAsset); - } + userOwnsAsset (options: UserOwnsAssetOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "ownership/hasasset", + qs: options + } + }).then( + response => (response.body as string).includes("true") as UserOwnsAsset + ); + } - getDeviceInfo (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "reference/deviceinfo" - } - }) - .then(response => ({ - deviceType: response.body.DeviceType, - operatingSystemType: response.body.OperationSystemType, - platformType: response.body.PlatformType - })); - } + getDeviceInfo (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "reference/deviceinfo" + } + }).then(response => ({ + deviceType: response.body.DeviceType, + operatingSystemType: response.body.OperationSystemType, + platformType: response.body.PlatformType + })); + } - blockUser (options: BlockUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "userblock/block", - qs: options, - method: "POST" - }, - json: true - }) - .then(response => response.body.success === true as BlockUser); - } + blockUser (options: BlockUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "userblock/block", + qs: options, + method: "POST" + }, + json: true + }).then(response => response.body.success === (true as BlockUser)); + } - unblockUser (options: UnblockUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "userblock/unblock", - qs: options, - method: "POST" - }, - json: true - }) - .then(response => response.body.success === true as UnblockUser); - } + unblockUser (options: UnblockUserOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "userblock/unblock", + qs: options, + method: "POST" + }, + json: true + }).then(response => response.body.success === (true as UnblockUser)); + } - getUserById (options: GetUserByIdOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `users/${options.userId}` - }, - json: true - }) - .then(response => ({ - id: response.body.Id, - name: response.body.Username - })); - } + getUserById (options: GetUserByIdOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}` + }, + json: true + }).then(response => ({ + id: response.body.Id, + name: response.body.Username + })); + } - getUserByUsername (options: GetUserByUsernameOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "users/get-by-username", - qs: options - }, - json: true - }) - .then(response => ({ - id: response.body.Id, - name: response.body.Username - })); - } + getUserByUsername ( + options: GetUserByUsernameOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "users/get-by-username", + qs: options + }, + json: true + }).then(response => ({ + id: response.body.Id, + name: response.body.Username + })); + } - userCanManageAsset (options: UserCanManageAssetOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `users/${options.userId}/canmanage/${options.assetId}` - }, - json: true - }) - .then(response => response.body.CanManage === true as UserCanManageAsset); - } + userCanManageAsset ( + options: UserCanManageAssetOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}/canmanage/${options.assetId}` + }, + json: true + }).then( + response => response.body.CanManage === (true as UserCanManageAsset) + ); + } } diff --git a/src/client/apis/GroupsAPI.ts b/src/client/apis/GroupsAPI.ts index bda2a11ac..72d351440 100644 --- a/src/client/apis/GroupsAPI.ts +++ b/src/client/apis/GroupsAPI.ts @@ -1,1312 +1,1362 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { GroupOptions, GroupRoleOptions, GroupRolePermissionsOptions } from "../../structures/Group"; - +import { + GroupOptions, + GroupRoleOptions, + GroupRolePermissionsOptions +} from "../../structures/Group"; export type GetGroupOptions = { - groupId: number; -} + groupId: number; +}; export type GetGroup = { - id: number; - name: string; - description: string; - owner: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }; - shout: { - body: string; - poster: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }; - created: string; - updated: string; + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + shout: { + body: string; + poster: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; }; - memberCount: number; - isBuildersClubOnly: boolean; - publicEntryAllowed: boolean; - isLocked: boolean; -} + created: string; + updated: string; + }; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; +}; export type GetMultiGroupsOptions = { - groupIds: number[]; -} + groupIds: number[]; +}; export type GetMultiGroups = { - data: GroupOptions[]; -} + data: GroupOptions[]; +}; export type GetGroupAuditLogsOptions = { - groupId: number; - actionType: "DeletePost" | "RemoveMember" | "AcceptJoinRequest" | "DeclineJoinRequest" | "PostStatus" | "ChangeRank" | "BuyAd" | "SendAllyRequest" | "CreateEnemy" | "AcceptAllyRequest" | "DeclineAllyRequest" | "DeleteAlly" | "DeleteEnemy" | "AddGroupPlace" | "RemoveGroupPlace" | "CreateItems" | "ConfigureItems" | "SpendGroupFunds" | "ChangeOwner" | "Delete" | "AdjustCurrencyAmounts" | "Abandon" | "Claim" | "Rename" | "ChangeDescription" | "InviteToClan" | "KickFromClan" | "CancelCLanInvite" | "BuyClan" | "CreateGroupAsset" | "UpdateGroupAsset" | "ConfigureGroupAsset" | "RevertGroupAsset" | "CreateGroupDeveloperProduct" | "ConfigureGroupGame" | "Lock" | "Unlock" | "CreateGamePass" | "CreateBadge" | "ConfigureBadge" | "SavePlace" | "PublishPlace"; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + actionType: + | "DeletePost" + | "RemoveMember" + | "AcceptJoinRequest" + | "DeclineJoinRequest" + | "PostStatus" + | "ChangeRank" + | "BuyAd" + | "SendAllyRequest" + | "CreateEnemy" + | "AcceptAllyRequest" + | "DeclineAllyRequest" + | "DeleteAlly" + | "DeleteEnemy" + | "AddGroupPlace" + | "RemoveGroupPlace" + | "CreateItems" + | "ConfigureItems" + | "SpendGroupFunds" + | "ChangeOwner" + | "Delete" + | "AdjustCurrencyAmounts" + | "Abandon" + | "Claim" + | "Rename" + | "ChangeDescription" + | "InviteToClan" + | "KickFromClan" + | "CancelCLanInvite" + | "BuyClan" + | "CreateGroupAsset" + | "UpdateGroupAsset" + | "ConfigureGroupAsset" + | "RevertGroupAsset" + | "CreateGroupDeveloperProduct" + | "ConfigureGroupGame" + | "Lock" + | "Unlock" + | "CreateGamePass" + | "CreateBadge" + | "ConfigureBadge" + | "SavePlace" + | "PublishPlace"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetGroupAuditLogs = { - previousPageCursor: string; - nextPageCursor: string; - data: { - actor: { - user: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }; - role: { - id: number; - name: string; - description: string; - rank: number; - memberCount: number; - }; - }; - actionType: string; - description: unknown; - created: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + actor: { + user: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + }; + actionType: string; + description: unknown; + created: string; + }[]; +}; export type GetGroupSettingsOptions = { - groupId: number; -} + groupId: number; +}; export type GetGroupSettings = { - groupId: number; - isApprovalRequired: boolean; - isBuildersClubRequired: boolean; - areEnemiesAllowed: boolean; - areGroupFundsVisible: boolean; - areGroupGamesVisible: boolean; -} + groupId: number; + isApprovalRequired: boolean; + isBuildersClubRequired: boolean; + areEnemiesAllowed: boolean; + areGroupFundsVisible: boolean; + areGroupGamesVisible: boolean; +}; export type UpdateGroupSettingsOptions = GetGroupSettings; -export type UpdateGroupSettings = unknown +export type UpdateGroupSettings = unknown; export type GetGroupConfigurationMetaData = { - groupConfiguration: { - nameMaxLength: number; - descriptionMaxLength: number; - iconMaxFileSizeMb: number; - cost: number; - }; - recurringPayoutsConfiguration: { - maxPayoutPartners: number; - }; - roleConfiguration: { - nameMaxLength: number; - descriptionMaxLength: number; - limit: number; - cost: number; - minRank: number; - maxRank: number; - }; - isPremiumPayoutsEnabled: boolean; - isDefaultEmblemPolicyEnabled: boolean; -} + groupConfiguration: { + nameMaxLength: number; + descriptionMaxLength: number; + iconMaxFileSizeMb: number; + cost: number; + }; + recurringPayoutsConfiguration: { + maxPayoutPartners: number; + }; + roleConfiguration: { + nameMaxLength: number; + descriptionMaxLength: number; + limit: number; + cost: number; + minRank: number; + maxRank: number; + }; + isPremiumPayoutsEnabled: boolean; + isDefaultEmblemPolicyEnabled: boolean; +}; export type GetGroupsMetaData = { - groupLimit: number; - currentGroupCount: number; - groupStatusMaxLength: number; - areProfileGroupsHidden: boolean; - isGroupDetailsPolicyEnabled: boolean; -} + groupLimit: number; + currentGroupCount: number; + groupStatusMaxLength: number; + areProfileGroupsHidden: boolean; + isGroupDetailsPolicyEnabled: boolean; +}; export type CreateGroupOptions = { - name: string; - description: string; - publicGroup: boolean; - buildersClubMembersOnly: boolean; - files: unknown; -} + name: string; + description: string; + publicGroup: boolean; + buildersClubMembersOnly: boolean; + files: unknown; +}; export type CreateGroup = GroupOptions; export type UpdateGroupDescriptionOptions = { - groupId: number; - description: string; -} + groupId: number; + description: string; +}; export type UpdateGroupDescription = { - newDescription: string; -} + newDescription: string; +}; export type UpdateGroupStatusOptions = { - groupId: number; - message: string; -} + groupId: number; + message: string; +}; export type UpdateGroupStatus = GroupOptions["shout"]; export type UpdateGroupIconOptions = { - groupId: number; - files: unknown; -} -export type UpdateGroupIcon = unknown + groupId: number; + files: unknown; +}; +export type UpdateGroupIcon = unknown; export type DeclineJoinRequestsOptions = { - groupId: number; - userIds: number[]; -} -export type DeclineJoinRequests = unknown + groupId: number; + userIds: number[]; +}; +export type DeclineJoinRequests = unknown; export type GetJoinRequestsOptions = { - groupId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetJoinRequests = { - previousPageCursor: string; - nextPageCursor: string; - data: { - requester: { - userId: number; - username: string; - displayName: string; - }; - created: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + requester: { + userId: number; + username: string; + displayName: string; + }; + created: string; + }[]; +}; export type AcceptJoinRequestsOptions = { - groupId: number; - userIds: number[]; -} -export type AcceptJoinRequests = unknown + groupId: number; + userIds: number[]; +}; +export type AcceptJoinRequests = unknown; export type DeclineJoinRequestOptions = { - groupId: number; - userId: number; -} -export type DeclineJoinRequest = unknown + groupId: number; + userId: number; +}; +export type DeclineJoinRequest = unknown; export type GetJoinRequestOptions = { - groupId: number; - userId: number; -} + groupId: number; + userId: number; +}; export type GetJoinRequest = GetJoinRequests["data"][0]; export type AcceptJoinRequestOptions = { - groupId: number; - userId: number; -} -export type AcceptJoinRequest = unknown + groupId: number; + userId: number; +}; +export type AcceptJoinRequest = unknown; export type GetSelfGroupMembershipOptions = { - groupId: number; -} + groupId: number; +}; export type GetSelfGroupMembership = { - groupId: number; - isPrimary: boolean; - isPendingJoin: boolean; - userRole: { - user: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }; - role: { - id: number; - name: string; - description: string; - rank: number; - memberCount: number; - }; + groupId: number; + isPrimary: boolean; + isPendingJoin: boolean; + userRole: { + user: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; }; - permissions: GroupRolePermissionsOptions["permissions"]; + }; + permissions: GroupRolePermissionsOptions["permissions"]; }; export type GetGroupRolesOptions = { - groupId: number; -} + groupId: number; +}; export type GetGroupRoles = { - groupId: number; - roles: { - id: number; - name: string; - description: string; - rank: number; - memberCount: number; - }[]; -} + groupId: number; + roles: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }[]; +}; export type GetMembersWithRoleOptions = { - groupId: number; - roleId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + roleId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetMembersWithRole = { - previousPageCursor: string; - nextPageCursor: string; - data: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }[]; +}; export type GetMembersOptions = { - groupId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetMembers = GetMembersWithRole; export type JoinGroupOptions = { - groupId: number; - captchaToken: string; - captchaProvider: "PROVIDER_ARKOSELABS" | string; -} -export type JoinGroup = unknown + groupId: number; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; +export type JoinGroup = unknown; export type GetSelfPendingGroupJoins = { - data: GroupOptions[]; -} + data: GroupOptions[]; +}; export type GetUserGroupsOptions = { - userId: number; -} + userId: number; +}; export type GetUserGroups = { - data: { - group: GroupOptions; - role: GetGroupRoles["roles"][0]; - }[]; -} + data: { + group: GroupOptions; + role: GetGroupRoles["roles"][0]; + }[]; +}; export type ChangeOwnerOptions = { - groupId: number; - userId: number; -} -export type ChangeOwner = unknown + groupId: number; + userId: number; +}; +export type ChangeOwner = unknown; export type ClaimGroupOptions = { - groupId: number; -} -export type ClaimGroup = unknown + groupId: number; +}; +export type ClaimGroup = unknown; export type KickMemberOptions = { - groupId: number; - userId: number; -} -export type KickMember = unknown + groupId: number; + userId: number; +}; +export type KickMember = unknown; export type UpdateMemberOptions = { - groupId: number; - userId: number; - roleId: number; -} -export type UpdateMember = unknown + groupId: number; + userId: number; + roleId: number; +}; +export type UpdateMember = unknown; export type GetGroupPayoutsOptions = { - groupId: number; -} + groupId: number; +}; export type GetGroupPayouts = { - data: { - user: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }; - percentage: number; - }[]; -} + data: { + user: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + percentage: number; + }[]; +}; export type PayoutMembersOptions = { - groupId: number; - users: { - userId: number; - amount: number; - }[]; - type: "FixedAmount" | "Percentage" | string; -} -export type PayoutMembers = unknown -export type UpdateRecurringPayoutsOptions = PayoutMembersOptions -export type UpdateRecurringPayouts = unknown + groupId: number; + users: { + userId: number; + amount: number; + }[]; + type: "FixedAmount" | "Percentage" | string; +}; +export type PayoutMembers = unknown; +export type UpdateRecurringPayoutsOptions = PayoutMembersOptions; +export type UpdateRecurringPayouts = unknown; export type GetGroupRelationshipsOptions = { - groupId: number; - relationshipType: "enemies" | "allies"; - startRowIndex?: number; - maxRows?: number; -} + groupId: number; + relationshipType: "enemies" | "allies"; + startRowIndex?: number; + maxRows?: number; +}; export type GetGroupRelationships = { - groupId: number; - relationshipType: GetGroupRelationshipsOptions["relationshipType"]; - totalGroupCount: number; - relatedGroups: GroupOptions[]; - nextRowIndex: number; -} + groupId: number; + relationshipType: GetGroupRelationshipsOptions["relationshipType"]; + totalGroupCount: number; + relatedGroups: GroupOptions[]; + nextRowIndex: number; +}; export type DeclineRelationshipRequestsOptions = { - groupId: number; - relationshipType: GetGroupRelationshipsOptions["relationshipType"]; - withGroups: number[]; -} -export type DeclineRelationshipRequests = unknown + groupId: number; + relationshipType: GetGroupRelationshipsOptions["relationshipType"]; + withGroups: number[]; +}; +export type DeclineRelationshipRequests = unknown; export type GetRelationshipRequestsOptions = GetGroupRelationshipsOptions; export type GetRelationshipRequests = GetGroupRelationships; -export type AcceptRelationshipRequestsOptions = DeclineRelationshipRequestsOptions -export type AcceptRelationshipRequests = unknown -export type DeleteRelationshipOptions = Omit & { - withGroup: number; -} -export type DeleteRelationship = unknown -export type CreateRelationshipOptions = Omit & { - withGroup: number; -} -export type CreateRelationship = unknown -export type DeclineRelationshipRequestOptions = Omit & { - withGroup: number; +export type AcceptRelationshipRequestsOptions = + DeclineRelationshipRequestsOptions; +export type AcceptRelationshipRequests = unknown; +export type DeleteRelationshipOptions = Omit< +DeclineRelationshipRequestsOptions, +"withGroups" +> & { + withGroup: number; +}; +export type DeleteRelationship = unknown; +export type CreateRelationshipOptions = Omit< +DeclineRelationshipRequestsOptions, +"withGroups" +> & { + withGroup: number; }; -export type DeclineRelationshipRequest = unknown -export type AcceptRelationshipRequestOptions = DeclineRelationshipRequestOptions; -export type AcceptRelationshipRequest = unknown +export type CreateRelationship = unknown; +export type DeclineRelationshipRequestOptions = Omit< +DeclineRelationshipRequestsOptions, +"withGroups" +> & { + withGroup: number; +}; +export type DeclineRelationshipRequest = unknown; +export type AcceptRelationshipRequestOptions = + DeclineRelationshipRequestOptions; +export type AcceptRelationshipRequest = unknown; export type GetRolePermissionsOptions = { - groupId: number; - roleId: number; -} + groupId: number; + roleId: number; +}; export type GetRolePermissions = GroupRolePermissionsOptions; export type UpdateRolePermissionsOptions = { - groupId: number; - roleId: number; - DeleteFromWall: boolean; - PostToWall: boolean; - InviteMembers: boolean; - PostToStatus: boolean; - RemoveMembers: boolean; - ViewStatus: boolean; - ViewWall: boolean; - ChangeRank: boolean; - AdvertiseGroup: boolean; - ManageRelationships: boolean; - AddGroupPlaces: boolean; - ViewAuditLogs: boolean; - CreateItems: boolean; - ManageItems: boolean; - SpendGroupFunds: boolean; - ManageClan: boolean; - ManageGroupGames: boolean; -} -export type UpdateRolePermissions = unknown + groupId: number; + roleId: number; + DeleteFromWall: boolean; + PostToWall: boolean; + InviteMembers: boolean; + PostToStatus: boolean; + RemoveMembers: boolean; + ViewStatus: boolean; + ViewWall: boolean; + ChangeRank: boolean; + AdvertiseGroup: boolean; + ManageRelationships: boolean; + AddGroupPlaces: boolean; + ViewAuditLogs: boolean; + CreateItems: boolean; + ManageItems: boolean; + SpendGroupFunds: boolean; + ManageClan: boolean; + ManageGroupGames: boolean; +}; +export type UpdateRolePermissions = unknown; export type GetGuestPermissionsOptions = { - groupId: number; -} + groupId: number; +}; export type GetGuestPermissions = GroupRolePermissionsOptions; export type GetAllRolesPermissionsOptions = { - groupId: number; -} + groupId: number; +}; export type GetAllRolesPermissions = { - data: GroupRolePermissionsOptions[]; -} + data: GroupRolePermissionsOptions[]; +}; export type GetSocialLinksOptions = { - groupId: number; -} + groupId: number; +}; export type GetSocialLinks = { - data: { - id: number; - type: "Facebook" | string; - url: string; - title: string; - }[]; -} -export type PostSocialLinkOptions = { - groupId: number; + data: { + id: number; type: "Facebook" | string; url: string; title: string; -} + }[]; +}; +export type PostSocialLinkOptions = { + groupId: number; + type: "Facebook" | string; + url: string; + title: string; +}; export type PostSocialLink = GetSocialLinks["data"][0]; export type DeleteSocialLinkOptions = { - groupId: number; - id: number; -} -export type DeleteSocialLink = unknown + groupId: number; + id: number; +}; +export type DeleteSocialLink = unknown; export type UpdateSocialLinkOptions = { - groupId: number; - id: number; - type: "Facebook" | string; - url: string; - title: string; -} -export type UpdateSocialLink = unknown + groupId: number; + id: number; + type: "Facebook" | string; + url: string; + title: string; +}; +export type UpdateSocialLink = unknown; export type GetWallPostsOptions = { - groupId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetWallPosts = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - body: string; - created: string; - updated: string; - poster: { - buildersClubMembershipType: "None" | string; - userId: number; - username: string; - displayName: string; - }; - }[]; -} -export type CreateWallPostOptions = { - groupId: number; + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; body: string; - captchaToken: string; - captchaProvider: "PROVIDER_ARKOSELABS" | string; -} + created: string; + updated: string; + poster: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + }[]; +}; +export type CreateWallPostOptions = { + groupId: number; + body: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; export type CreateWallPost = GetWallPosts["data"][0]; export type DeleteWallPostOptions = { - groupId: number; - id: number; -} -export type DeleteWallPost = unknown + groupId: number; + id: number; +}; +export type DeleteWallPost = unknown; export type DeleteWallPostsByUserOptions = { - groupId: number; - userId: number; -} -export type DeleteWallPostsByUser = unknown + groupId: number; + userId: number; +}; +export type DeleteWallPostsByUser = unknown; export type SearchGroupsByKeywordOptions = { - keyword: string; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + keyword: string; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type SearchGroupsByKeyword = { - keyword: string; - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - name: string; - description: string; - memberCount: number; - publicEntryAllowed: boolean; - created: string; - updated: string; - }[]; + keyword: string; + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + description: string; + memberCount: number; + publicEntryAllowed: boolean; + created: string; + updated: string; + }[]; }; export type SearchGroupsOptions = { - groupName: string; -} + groupName: string; +}; export type SearchGroups = { - data: { - id: number; - name: string; - memberCount: number; - }[]; -} + data: { + id: number; + name: string; + memberCount: number; + }[]; +}; export type GetGroupSearchMetaData = { - SuggestedGroupKeywords: string[]; -} + SuggestedGroupKeywords: string[]; +}; export type GetRolesByIdsOptions = { - roleIds: number[]; -} + roleIds: number[]; +}; export type GetRolesByIds = { - data: { - groupId: number; - id: number; - name: string; - description: string; - rank: number; - memberCount: number; - }[]; -} + data: { + groupId: number; + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }[]; +}; export type GetUserPrimaryGroupOptions = { - userId: number; -} + userId: number; +}; export type GetUserPrimaryGroup = { - group?: GroupOptions; - role?: GroupRoleOptions; - isPrimaryGroup?: boolean; -} + group?: GroupOptions; + role?: GroupRoleOptions; + isPrimaryGroup?: boolean; +}; export type RemovePrimaryGroup = unknown; export type SetPrimaryGroupOptions = { - groupId: number; -} -export type SetPrimaryGroup = unknown + groupId: number; +}; +export type SetPrimaryGroup = unknown; export type CreateRoleOptions = { - groupId: number; - name: string; - description: string; - rank: number; - usingGroupFunds: boolean; -} + groupId: number; + name: string; + description: string; + rank: number; + usingGroupFunds: boolean; +}; export type CreateRole = Omit; export type DeleteRoleOptions = { - groupId: number; - roleId: number; -} -export type DeleteRole = unknown + groupId: number; + roleId: number; +}; +export type DeleteRole = unknown; export type UpdateRoleOptions = { - groupId: number; - roleId: number; - name: string; - description: string; - rank: number; -} + groupId: number; + roleId: number; + name: string; + description: string; + rank: number; +}; export type UpdateRole = CreateRole; export default class GroupsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://groups.roblox.com/" - }); - } - - getGroup (options: GetGroupOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}` - }, - json: true - }) - .then(response => response.body); - } - - getMultiGroups (options: GetMultiGroupsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/groups`, - qs: { - groupIds: options.groupIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } - - getAuditLogs (options: GetGroupAuditLogsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/audit-log`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getGroupSettings (options: GetGroupSettingsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/settings` - }, - json: true - }) - .then(response => response.body); - } - - updateGroupSettings (options: UpdateGroupSettingsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/settings`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getGroupConfigurationMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/configuration/metadata` - }, - json: true - }) - .then(response => response.body); - } - - getGroupsMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/metadata` - }, - json: true - }) - .then(response => response.body); - } - - createGroup (options: CreateGroupOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/create`, - method: "POST", - formData: { - "request.name": options.name, - "request.description": options.description, - "request.publicGroup": options.publicGroup, - "request.buildersClubMembersOnly": options.buildersClubMembersOnly, - "request.files": options.files - } - }, - json: true - }) - .then(response => response.body); - } - - updateGroupDescription (options: UpdateGroupDescriptionOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/description`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - updateGroupStatus (options: UpdateGroupStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/status`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - updateGroupIcon (options: UpdateGroupIconOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/icon`, - method: "PATCH", - body: options.files - }, - json: true - }) - .then(response => response.body); - } - - declineJoinRequests (options: DeclineJoinRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/join-requests`, - method: "DELETE", - json: { - UserIds: options.userIds - } - }, - json: true - }) - .then(response => response.body); - } - - getJoinRequests (options: GetJoinRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/join-requests`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - acceptJoinRequests (options: AcceptJoinRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/join-requests`, - method: "POST", - json: { - UserIds: options.userIds - } - }, - json: true - }) - .then(response => response.body); - } - - declineJoinRequest (options: DeclineJoinRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - getJoinRequest (options: GetJoinRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}` - }, - json: true - }) - .then(response => response.body); - } - - acceptJoinRequest (options: AcceptJoinRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - getSelfGroupMembership (options: GetSelfGroupMembershipOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/membership` - }, - json: true - }) - .then(response => response.body); - } - - getGroupRoles (options: GetGroupRolesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/roles` - }, - json: true - }) - .then(response => response.body); - } - - getMembersWithRole (options: GetMembersWithRoleOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/roles/${options.roleId}/users`, - qs: { - ...options, - roleSetId: options.roleId - } - }, - json: true - }) - .then(response => response.body); - } - - getMembers (options: GetMembersOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/users`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - joinGroup (options: JoinGroupOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/users`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getSelfPendingGroupJoins (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/user/groups/pending` - }, - json: true - }) - .then(response => response.body); - } - - getUserGroups (options: GetUserGroupsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/groups/roles` - }, - json: true - }) - .then(response => response.body); - } - - changeGroupOwner (options: ChangeOwnerOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/change-owner`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - claimGroup (options: ClaimGroupOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/claim-ownership`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - kickMember (options: KickMemberOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/users/${options.userId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - updateMember (options: UpdateMemberOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/users/${options.userId}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getGroupPayouts (options: GetGroupPayoutsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/payouts` - }, - json: true - }) - .then(response => response.body); - } - - payoutMembers (options: PayoutMembersOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/payouts`, - method: "POST", - json: { - PayoutType: options.type, - Recipients: options.users.map(userData => ({ - recipientId: userData.userId, - recipientType: "User", - amount: userData.amount - })) - } - }, - json: true - }) - .then(response => response.body); - } - - updateRecurringPayouts (options: UpdateRecurringPayoutsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/payouts/recurring`, - method: "POST", - json: { - PayoutType: options.type, - Recipients: options.users.map(userData => ({ - recipientId: userData.userId, - recipientType: "User", - amount: userData.amount - })) - } - }, - json: true - }) - .then(response => response.body); - } - - getGroupRelationships (options: GetGroupRelationshipsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}`, - qs: { - "model.startRowIndex": options.startRowIndex || 0, - "model.maxRows": options.maxRows - } - }, - json: true - }) - .then(response => response.body); - } - - declineRelationshipRequests (options: DeclineRelationshipRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, - method: "DELETE", - json: { - GroupIds: options.withGroups - } - }, - json: true - }) - .then(response => response.body); - } - - getRelationshipRequests (options: GetRelationshipRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - acceptRelationshipRequests (options: AcceptRelationshipRequestsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, - method: "DELETE", - json: { - GroupIds: options.withGroups - } - }, - json: true - }) - .then(response => response.body); - } - - deleteRelationship (options: DeleteRelationshipOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/${options.withGroup}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - createRelationship (options: CreateRelationshipOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/${options.withGroup}`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - acceptRelationshipRequest (options: AcceptRelationshipRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}` - }, - json: true - }) - .then(response => response.body); - } - - declineRelationshipRequest (options: DeclineRelationshipRequestOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - getRolePermissions (options: GetRolePermissionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions` - }, - json: true - }) - .then(response => response.body); - } - - updateRolePermissions (options: UpdateRolePermissionsOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getGuestPermissions (options: GetGuestPermissionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/roles/guest/permissions` - }, - json: true - }) - .then(response => response.body); - } - - getAllRolesPermissions (options: GetAllRolesPermissionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/roles/permissions` - }, - json: true - }) - .then(response => response.body); - } - - getSocialLinks (options: GetSocialLinksOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/social-links` - }, - json: true - }) - .then(response => response.body); - } - - createSocialLink (options: PostSocialLinkOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/social-links`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - deleteSocialLink (options: DeleteSocialLinkOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/social-links/${options.id}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - updateSocialLink (options: UpdateSocialLinkOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/social-links/${options.id}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getWallPosts (options: GetWallPostsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/${options.groupId}/wall/posts`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - createWallPost (options: CreateWallPostOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/wall/posts`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - deleteWallPost (options: DeleteWallPostOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/wall/posts/${options.id}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - deleteUserWallPosts (options: DeleteWallPostsByUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/wall/users/${options.userId}/posts`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - searchGroupsByKeyword (options: SearchGroupsByKeywordOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/search`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - searchGroups (options: SearchGroupsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/search/lookup`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getGroupSearchMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/search/metadata` - }, - json: true - }) - .then(response => response.body); - } - - getRolesByIds (options: GetRolesByIdsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/roles`, - qs: { - ids: options.roleIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } - - getUserPrimaryGroup (options: GetUserPrimaryGroupOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/groups/primary/role` - }, - json: true - }) - .then(response => response.body); - } - - removePrimaryGroup (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/user/groups/primary`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - setPrimaryGroup (options: SetPrimaryGroupOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/user/groups/primary`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - createRole (options: CreateRoleOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/rolesets/create`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - deleteRole (options: DeleteRoleOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/rolesets/${options.roleId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } - - updateRole (options: UpdateRoleOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/groups/${options.groupId}/rolesets/${options.roleId}`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://groups.roblox.com/" + }); + } + + getGroup (options: GetGroupOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}` + }, + json: true + }).then(response => response.body); + } + + getMultiGroups (options: GetMultiGroupsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/groups`, + qs: { + groupIds: options.groupIds.join(",") + } + }, + json: true + }).then(response => response.body); + } + + getAuditLogs (options: GetGroupAuditLogsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/audit-log`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getGroupSettings ( + options: GetGroupSettingsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/settings` + }, + json: true + }).then(response => response.body); + } + + updateGroupSettings ( + options: UpdateGroupSettingsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/settings`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + getGroupConfigurationMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/configuration/metadata` + }, + json: true + }).then(response => response.body); + } + + getGroupsMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/metadata` + }, + json: true + }).then(response => response.body); + } + + createGroup (options: CreateGroupOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/create`, + method: "POST", + formData: { + "request.name": options.name, + "request.description": options.description, + "request.publicGroup": options.publicGroup, + "request.buildersClubMembersOnly": options.buildersClubMembersOnly, + "request.files": options.files + } + }, + json: true + }).then(response => response.body); + } + + updateGroupDescription ( + options: UpdateGroupDescriptionOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/description`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + updateGroupStatus ( + options: UpdateGroupStatusOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/status`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + updateGroupIcon (options: UpdateGroupIconOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/icon`, + method: "PATCH", + body: options.files + }, + json: true + }).then(response => response.body); + } + + declineJoinRequests ( + options: DeclineJoinRequestsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests`, + method: "DELETE", + json: { + UserIds: options.userIds + } + }, + json: true + }).then(response => response.body); + } + + getJoinRequests (options: GetJoinRequestsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests`, + qs: options + }, + json: true + }).then(response => response.body); + } + + acceptJoinRequests ( + options: AcceptJoinRequestsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests`, + method: "POST", + json: { + UserIds: options.userIds + } + }, + json: true + }).then(response => response.body); + } + + declineJoinRequest ( + options: DeclineJoinRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + getJoinRequest (options: GetJoinRequestOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}` + }, + json: true + }).then(response => response.body); + } + + acceptJoinRequest ( + options: AcceptJoinRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + getSelfGroupMembership ( + options: GetSelfGroupMembershipOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/membership` + }, + json: true + }).then(response => response.body); + } + + getGroupRoles (options: GetGroupRolesOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/roles` + }, + json: true + }).then(response => response.body); + } + + getMembersWithRole ( + options: GetMembersWithRoleOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/${options.roleId}/users`, + qs: { + ...options, + roleSetId: options.roleId + } + }, + json: true + }).then(response => response.body); + } + + getMembers (options: GetMembersOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/users`, + qs: options + }, + json: true + }).then(response => response.body); + } + + joinGroup (options: JoinGroupOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/users`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + getSelfPendingGroupJoins (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/groups/pending` + }, + json: true + }).then(response => response.body); + } + + getUserGroups (options: GetUserGroupsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/groups/roles` + }, + json: true + }).then(response => response.body); + } + + changeGroupOwner (options: ChangeOwnerOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/change-owner`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + claimGroup (options: ClaimGroupOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/claim-ownership`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + kickMember (options: KickMemberOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/users/${options.userId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + updateMember (options: UpdateMemberOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/users/${options.userId}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + getGroupPayouts (options: GetGroupPayoutsOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/payouts` + }, + json: true + }).then(response => response.body); + } + + payoutMembers (options: PayoutMembersOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/payouts`, + method: "POST", + json: { + PayoutType: options.type, + Recipients: options.users.map(userData => ({ + recipientId: userData.userId, + recipientType: "User", + amount: userData.amount + })) + } + }, + json: true + }).then(response => response.body); + } + + updateRecurringPayouts ( + options: UpdateRecurringPayoutsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/payouts/recurring`, + method: "POST", + json: { + PayoutType: options.type, + Recipients: options.users.map(userData => ({ + recipientId: userData.userId, + recipientType: "User", + amount: userData.amount + })) + } + }, + json: true + }).then(response => response.body); + } + + getGroupRelationships ( + options: GetGroupRelationshipsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}`, + qs: { + "model.startRowIndex": options.startRowIndex || 0, + "model.maxRows": options.maxRows + } + }, + json: true + }).then(response => response.body); + } + + declineRelationshipRequests ( + options: DeclineRelationshipRequestsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, + method: "DELETE", + json: { + GroupIds: options.withGroups + } + }, + json: true + }).then(response => response.body); + } + + getRelationshipRequests ( + options: GetRelationshipRequestsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, + qs: options + }, + json: true + }).then(response => response.body); + } + + acceptRelationshipRequests ( + options: AcceptRelationshipRequestsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, + method: "DELETE", + json: { + GroupIds: options.withGroups + } + }, + json: true + }).then(response => response.body); + } + + deleteRelationship ( + options: DeleteRelationshipOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/${options.withGroup}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + createRelationship ( + options: CreateRelationshipOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/${options.withGroup}`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + acceptRelationshipRequest ( + options: AcceptRelationshipRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}` + }, + json: true + }).then(response => response.body); + } + + declineRelationshipRequest ( + options: DeclineRelationshipRequestOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + getRolePermissions ( + options: GetRolePermissionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions` + }, + json: true + }).then(response => response.body); + } + + updateRolePermissions ( + options: UpdateRolePermissionsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + getGuestPermissions ( + options: GetGuestPermissionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/guest/permissions` + }, + json: true + }).then(response => response.body); + } + + getAllRolesPermissions ( + options: GetAllRolesPermissionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/permissions` + }, + json: true + }).then(response => response.body); + } + + getSocialLinks (options: GetSocialLinksOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/social-links` + }, + json: true + }).then(response => response.body); + } + + createSocialLink (options: PostSocialLinkOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/social-links`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + deleteSocialLink ( + options: DeleteSocialLinkOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/social-links/${options.id}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + updateSocialLink ( + options: UpdateSocialLinkOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/social-links/${options.id}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } + + getWallPosts (options: GetWallPostsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/wall/posts`, + qs: options + }, + json: true + }).then(response => response.body); + } + + createWallPost (options: CreateWallPostOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/wall/posts`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + deleteWallPost (options: DeleteWallPostOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/wall/posts/${options.id}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + deleteUserWallPosts ( + options: DeleteWallPostsByUserOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/wall/users/${options.userId}/posts`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + searchGroupsByKeyword ( + options: SearchGroupsByKeywordOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/search`, + qs: options + }, + json: true + }).then(response => response.body); + } + + searchGroups (options: SearchGroupsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/search/lookup`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getGroupSearchMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/search/metadata` + }, + json: true + }).then(response => response.body); + } + + getRolesByIds (options: GetRolesByIdsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/roles`, + qs: { + ids: options.roleIds.join(",") + } + }, + json: true + }).then(response => response.body); + } + + getUserPrimaryGroup ( + options: GetUserPrimaryGroupOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/groups/primary/role` + }, + json: true + }).then(response => response.body); + } + + removePrimaryGroup (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/groups/primary`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + setPrimaryGroup (options: SetPrimaryGroupOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/groups/primary`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + createRole (options: CreateRoleOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/rolesets/create`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + deleteRole (options: DeleteRoleOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/rolesets/${options.roleId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } + + updateRole (options: UpdateRoleOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/rolesets/${options.roleId}`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } } - diff --git a/src/client/apis/InventoryAPI.ts b/src/client/apis/InventoryAPI.ts index 7dfb80534..b82c688ec 100644 --- a/src/client/apis/InventoryAPI.ts +++ b/src/client/apis/InventoryAPI.ts @@ -1,184 +1,244 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetPackageAssetsOptions = { - packageId: number; -} + packageId: number; +}; export type GetPackageAssets = { - assetIds: number[]; -} + assetIds: number[]; +}; export type GetUserCollectiblesOptions = { - userId: number; - assetType?: "Image" | "TShirt" | "Audio" | "Mesh" | "Lua" | "HTML" | "Text" | "Hat" | "Place" | "Model" | "Shirt" | "Pants" | "Decal" | "Avatar" | "Head" | "Face" | "Gear" | "Badge" | "GroupEmblem" | "Animation" | "Arms" | "Legs" | "Torso" | "RightArm" | "LeftArm" | "LeftLeg" | "RightLeg" | "Package" | "YouTubeVideo" | "GamePass" | "App" | "Code" | "Plugin" | "SolidModel" | "MeshPart" | "HairAccessory" | "NeckAccessory" | "ShoulderAccessory" | "FrontAccessory" | "BackAccessory" | "WaistAccessory" | "ClimbAnimation" | "DeathAnimation" | "FallAnimation" | "IdleAnimation" | "JumpAnimation" | "RunAnimation" | "SwimAnimation" | "WalkAnimation" | "PoseAnimation" | "LocalizationTableManifest" | "LocalizationTableTranslation" | "EmoteAnimation" | "Video" | "TexturePack"; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + userId: number; + assetType?: + | "Image" + | "TShirt" + | "Audio" + | "Mesh" + | "Lua" + | "HTML" + | "Text" + | "Hat" + | "Place" + | "Model" + | "Shirt" + | "Pants" + | "Decal" + | "Avatar" + | "Head" + | "Face" + | "Gear" + | "Badge" + | "GroupEmblem" + | "Animation" + | "Arms" + | "Legs" + | "Torso" + | "RightArm" + | "LeftArm" + | "LeftLeg" + | "RightLeg" + | "Package" + | "YouTubeVideo" + | "GamePass" + | "App" + | "Code" + | "Plugin" + | "SolidModel" + | "MeshPart" + | "HairAccessory" + | "NeckAccessory" + | "ShoulderAccessory" + | "FrontAccessory" + | "BackAccessory" + | "WaistAccessory" + | "ClimbAnimation" + | "DeathAnimation" + | "FallAnimation" + | "IdleAnimation" + | "JumpAnimation" + | "RunAnimation" + | "SwimAnimation" + | "WalkAnimation" + | "PoseAnimation" + | "LocalizationTableManifest" + | "LocalizationTableTranslation" + | "EmoteAnimation" + | "Video" + | "TexturePack"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetUserCollectibles = { - previousPageCursor: string; - nextPageCursor: string; - data: { - userAssetId: number; - serialNumber: number; - assetId: number; - name: string; - recentAveragePrice: number; - originalPrice: number; - assetStock: number; - buildersClubMembershipType: "None" | string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + userAssetId: number; + serialNumber: number; + assetId: number; + name: string; + recentAveragePrice: number; + originalPrice: number; + assetStock: number; + buildersClubMembershipType: "None" | string; + }[]; +}; export type GetUserItemsByTypeAndTargetIdOptions = { - userId: number; - itemType: "Asset" | "GamePass" | "Badge" | "Bundle"; - itemTargetId: number; -} + userId: number; + itemType: "Asset" | "GamePass" | "Badge" | "Bundle"; + itemTargetId: number; +}; export type GetUserItemsByTypeAndTargetId = { - previousPageCursor: string; - nextPageCursor: string; - data: { - Id: number; - Name: string; - Type: GetUserItemsByTypeAndTargetIdOptions["itemType"]; - InstanceId: number; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + Id: number; + Name: string; + Type: GetUserItemsByTypeAndTargetIdOptions["itemType"]; + InstanceId: number; + }[]; +}; export type GetAssetOwnersOptions = { - assetId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + assetId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type GetAssetOwners = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - serialNumber: number; - owner: { - id: number; - type: "User" | string; - name: string; - }; - created: string; - updated: string; + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + serialNumber: number; + owner: { + id: number; + type: "User" | string; + name: string; }; -} + created: string; + updated: string; + }; +}; export type GetUserInventoryOptions = { - userId: number; - assetTypes: GetUserCollectiblesOptions["assetType"][]; - limit?: 10 | 25 | 50 | 100; - cursor?: string; - sortOrder?: "Asc" | "Desc"; -} + userId: number; + assetTypes: GetUserCollectiblesOptions["assetType"][]; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; export type GetUserInventory = { - previousPageCursor: string; - nextPageCursor: string; - data: { - assetId: number; - name: string; - assetType: GetUserCollectiblesOptions["assetType"]; - created: string; - }[]; -} -export type GetUserInventoryByAssetTypeIdOptions = Omit & { - assetTypeId: number; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + assetId: number; + name: string; + assetType: GetUserCollectiblesOptions["assetType"]; + created: string; + }[]; +}; +export type GetUserInventoryByAssetTypeIdOptions = Omit< +GetUserInventoryOptions, +"assetTypes" +> & { + assetTypeId: number; +}; export type GetUserInventoryByAssetTypeId = { - previousPageCursor: string; - nextPageCursor: string; - data: { - assetName: string; - userAssetId: number; - assetId: number; - serialNumber: number; - owner: { - userId: number; - username: string; - buildersClubMembershipType: "None" | string; - }; - created: string; - updated: string; - }[]; -} - + previousPageCursor: string; + nextPageCursor: string; + data: { + assetName: string; + userAssetId: number; + assetId: number; + serialNumber: number; + owner: { + userId: number; + username: string; + buildersClubMembershipType: "None" | string; + }; + created: string; + updated: string; + }[]; +}; export default class InventoryAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://inventory.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://inventory.roblox.com/" + }); + } - getPackageAssets (options: GetPackageAssetsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/packages/${options.packageId}/assets` - }, - json: true - }) - .then(response => response.body); - } + getPackageAssets ( + options: GetPackageAssetsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/packages/${options.packageId}/assets` + }, + json: true + }).then(response => response.body); + } - getUserCollectibles (options: GetUserCollectiblesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/assets/collectibles`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserCollectibles ( + options: GetUserCollectiblesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/assets/collectibles`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserItemsByTypeAndTargetId (options: GetUserItemsByTypeAndTargetIdOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/items/${options.itemType}/${options.itemTargetId}` - }, - json: true - }) - .then(response => response.body); - } + getUserItemsByTypeAndTargetId ( + options: GetUserItemsByTypeAndTargetIdOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/items/${options.itemType}/${options.itemTargetId}` + }, + json: true + }).then(response => response.body); + } - getAssetOwners (options: GetAssetOwnersOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/assets/${options.assetId}/owners`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getAssetOwners (options: GetAssetOwnersOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/assets/${options.assetId}/owners`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserInventory (options: GetUserInventoryOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/users/${options.userId}/inventory`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserInventory ( + options: GetUserInventoryOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/users/${options.userId}/inventory`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUserInventoryByAssetTypeId (options: GetUserInventoryByAssetTypeIdOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/users/${options.userId}/inventory/${options.assetTypeId}`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUserInventoryByAssetTypeId ( + options: GetUserInventoryByAssetTypeIdOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/users/${options.userId}/inventory/${options.assetTypeId}`, + qs: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/ItemConfigurationAPI.ts b/src/client/apis/ItemConfigurationAPI.ts index fd7c31dc0..f92905684 100644 --- a/src/client/apis/ItemConfigurationAPI.ts +++ b/src/client/apis/ItemConfigurationAPI.ts @@ -1,189 +1,186 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetCreatedAssetsOptions = { - assetType: string; - isArchived?: boolean; - groupId?: number; - sortOrder?: "Asc" | "Desc"; -} + assetType: string; + isArchived?: boolean; + groupId?: number; + sortOrder?: "Asc" | "Desc"; +}; export type GetCreatedAssets = { - previousPageCursor: string; - nextPageCursor: string; - data: { - assetId: number; - name: string; - }[]; -} -export type GetMultiCreatedAssetDetailsOptions = { - assetIds: number[]; -} -export type GetMultiCreatedAssetDetails = { + previousPageCursor: string; + nextPageCursor: string; + data: { assetId: number; name: string; - status: string; - description: string; - creatorType: string; - creatorTargetId: number; - price: number; - priceConfiguration: { - priceInRobux: number; - premiumDiscountPercentage: number; - premiumPriceInRobux: number; - }; - isArchived: boolean; - assetType: string; -}[] + }[]; +}; +export type GetMultiCreatedAssetDetailsOptions = { + assetIds: number[]; +}; +export type GetMultiCreatedAssetDetails = { + assetId: number; + name: string; + status: string; + description: string; + creatorType: string; + creatorTargetId: number; + price: number; + priceConfiguration: { + priceInRobux: number; + premiumDiscountPercentage: number; + premiumPriceInRobux: number; + }; + isArchived: boolean; + assetType: string; +}[]; export type GetItemTagsByItemIdsOptions = { - itemIds: number[]; -} + itemIds: number[]; +}; export type GetItemTagsByItemIds = { - data: { - id: string; - itemTags: { - id: string; - tag: { - tagId: string; - name: string; - localizedDisplayName: string; - status: "Success" | string; - }; - }[]; + data: { + id: string; + itemTags: { + id: string; + tag: { + tagId: string; + name: string; + localizedDisplayName: string; + status: "Success" | string; + }; }[]; -} + }[]; +}; export type CreateItemTagOptions = { - itemId: number; - tagId: string; -} + itemId: number; + tagId: string; +}; export type CreateItemTag = GetItemTagsByItemIds["data"][0]["itemTags"][0]; export type GetItemTagsMetaData = { - isItemTagsFeatureEnabled: boolean; - enabledAssetTypes: string[]; - maximumItemTagsPerItem: number; -} + isItemTagsFeatureEnabled: boolean; + enabledAssetTypes: string[]; + maximumItemTagsPerItem: number; +}; export type DeleteItemTagOptions = { - itemTagId: number; -} -export type DeleteItemTag = unknown + itemTagId: number; +}; +export type DeleteItemTag = unknown; export type GetTagsByTagIdsOptions = { - tagIds: number[]; -} + tagIds: number[]; +}; export type GetTagsByTagIds = { - data: Omit[]; -} + data: Omit[]; +}; export type SearchTagsOptions = { - prefix: string; - results: number; -} + prefix: string; + results: number; +}; export type SearchTags = GetTagsByTagIds; export default class InventoryAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://itemconfiguration.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://itemconfiguration.roblox.com/" + }); + } - getCreatedAssets (options: GetCreatedAssetsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/creations/get-assets`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getCreatedAssets ( + options: GetCreatedAssetsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/creations/get-assets`, + qs: options + }, + json: true + }).then(response => response.body); + } - getMultiCreatedAssets (options: GetMultiCreatedAssetDetailsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/creations/get-asset-details`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getMultiCreatedAssets ( + options: GetMultiCreatedAssetDetailsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/creations/get-asset-details`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getItemTagsByItemIds (options: GetItemTagsByItemIdsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/item-tags`, - qs: { - itemIds: options.itemIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getItemTagsByItemIds ( + options: GetItemTagsByItemIdsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags`, + qs: { + itemIds: options.itemIds.join(",") + } + }, + json: true + }).then(response => response.body); + } - createItemTag (options: CreateItemTagOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/item-tags`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + createItemTag (options: CreateItemTagOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getItemTagsMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/item-tags/metadata` - }, - json: true - }) - .then(response => response.body); - } + getItemTagsMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags/metadata` + }, + json: true + }).then(response => response.body); + } - deleteItemTag (options: DeleteItemTagOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/item-tags/${options.itemTagId}`, - method: "DELETE" - }, - json: true - }) - .then(response => response.body); - } + deleteItemTag (options: DeleteItemTagOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags/${options.itemTagId}`, + method: "DELETE" + }, + json: true + }).then(response => response.body); + } - getTagsByTagIds (options: GetTagsByTagIdsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/tags`, - qs: { - tagIds: options.tagIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } + getTagsByTagIds (options: GetTagsByTagIdsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/tags`, + qs: { + tagIds: options.tagIds.join(",") + } + }, + json: true + }).then(response => response.body); + } - searchTags (options: SearchTagsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/tags/prefix-search`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + searchTags (options: SearchTagsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/tags/prefix-search`, + qs: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/LocaleAPI.ts b/src/client/apis/LocaleAPI.ts index 9502a54f5..67bbd7254 100644 --- a/src/client/apis/LocaleAPI.ts +++ b/src/client/apis/LocaleAPI.ts @@ -1,132 +1,127 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetCountryRegionsOptions = { - locale: string; -} + locale: string; +}; export type GetCountryRegions = { - countryRegionList: { - code: string; - name: string; - displayName: string; - }[]; -} + countryRegionList: { + code: string; + name: string; + displayName: string; + }[]; +}; export type GetLocalesOptions = { - displayValueLocale?: string; -} + displayValueLocale?: string; +}; export type GetLocales = { - data: { - locale: { - id: number; - locale: string; - name: string; - nativeName: string; - language: { - id: number; - name: string; - nativeName: string; - languageCode: string; - }; - }; - isEnabledForFullExperience: boolean; - isEnabledForSignupAndLogin: boolean; - isEnabledForInGameUgc: boolean; - }[]; -} + data: { + locale: { + id: number; + locale: string; + name: string; + nativeName: string; + language: { + id: number; + name: string; + nativeName: string; + languageCode: string; + }; + }; + isEnabledForFullExperience: boolean; + isEnabledForSignupAndLogin: boolean; + isEnabledForInGameUgc: boolean; + }[]; +}; export type GetSupportedLocales = { - supportedLocales: GetLocales["data"][0]["locale"][]; -} + supportedLocales: GetLocales["data"][0]["locale"][]; +}; export type GetUserLocale = { - supportedLocale: GetLocales["data"][0]["locale"]; -} + supportedLocale: GetLocales["data"][0]["locale"]; +}; export type GetLocusSupportedLocales = { - signupAndLogin: GetLocales["data"][0]["locale"]; - generalExperience: GetLocales["data"][0]["locale"]; - ugc: GetLocales["data"][0]["locale"]; -} + signupAndLogin: GetLocales["data"][0]["locale"]; + generalExperience: GetLocales["data"][0]["locale"]; + ugc: GetLocales["data"][0]["locale"]; +}; export type SetUserLocaleOptions = { - supportedLocaleCode: string; -} + supportedLocaleCode: string; +}; export type SetUserLocale = { - success: boolean; -} + success: boolean; +}; export default class LocaleAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://locale.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://locale.roblox.com/" + }); + } - getCountryRegions (options: GetCountryRegionsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/country-regions`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getCountryRegions ( + options: GetCountryRegionsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/country-regions`, + qs: options + }, + json: true + }).then(response => response.body); + } - getLocales (options: GetLocalesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/locales`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getLocales (options: GetLocalesOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales`, + qs: options + }, + json: true + }).then(response => response.body); + } - getSupportedLocales (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/locales/supported-locales` - }, - json: true - }) - .then(response => response.body); - } + getSupportedLocales (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales/supported-locales` + }, + json: true + }).then(response => response.body); + } - getUserLocale (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/locales/user-locale` - }, - json: true - }) - .then(response => response.body); - } + getUserLocale (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/locales/user-locale` + }, + json: true + }).then(response => response.body); + } - getLocusSupportedLocales (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/locales/user-localization-locus-supported-locales` - }, - json: true - }) - .then(response => response.body); - } + getLocusSupportedLocales (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales/user-localization-locus-supported-locales` + }, + json: true + }).then(response => response.body); + } - setUserLocale (options: SetUserLocaleOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/locales/set-user-supported-locale`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + setUserLocale (options: SetUserLocaleOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/locales/set-user-supported-locale`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/MetricsAPI.ts b/src/client/apis/MetricsAPI.ts index 97b49f2a5..42c2f2148 100644 --- a/src/client/apis/MetricsAPI.ts +++ b/src/client/apis/MetricsAPI.ts @@ -1,68 +1,68 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetThumbnailsMetaData = { - logRatio: number; -} + logRatio: number; +}; export type RecordThumbnailLoadOptions = { - duration: number; - loadState: string; - thumbnailType: string; -} -export type RecordThumbnailLoad = unknown + duration: number; + loadState: string; + thumbnailType: string; +}; +export type RecordThumbnailLoad = unknown; export type RecordBundleLoadOptions = { - bundleUrl: string; - bundleName: string; - loadTimeInMilliseconds: number; - cdnProviderName: string; - loadState: string; - bundleContentType: string; -} -export type RecordBundleLoad = unknown + bundleUrl: string; + bundleName: string; + loadTimeInMilliseconds: number; + cdnProviderName: string; + loadState: string; + bundleContentType: string; +}; +export type RecordBundleLoad = unknown; export default class LocaleAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://metrics.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://metrics.roblox.com/" + }); + } - getThumbnailsMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/thumbnails/metadata` - }, - json: true - }) - .then(response => response.body); - } + getThumbnailsMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/thumbnails/metadata` + }, + json: true + }).then(response => response.body); + } - recordThumbnailLoad (options: RecordThumbnailLoadOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/thumbnails/load`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + recordThumbnailLoad ( + options: RecordThumbnailLoadOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/thumbnails/load`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - recordBundleLoad (options: RecordBundleLoadOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/thumbnails/metadata`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + recordBundleLoad ( + options: RecordBundleLoadOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/thumbnails/metadata`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/NotificationsAPI.ts b/src/client/apis/NotificationsAPI.ts index 57b78bdbe..52dd92f1c 100644 --- a/src/client/apis/NotificationsAPI.ts +++ b/src/client/apis/NotificationsAPI.ts @@ -1,650 +1,651 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetNotificationsSettings = { - notificationBandSettings: { - notificationSourceType: string; - receiverDestinationType: string; + notificationBandSettings: { + notificationSourceType: string; + receiverDestinationType: string; + isEnabled: boolean; + isOverridable: boolean; + isSetByReceiver: boolean; + pushNotificationDestinationPreferences: [ + { + name: string; + platform: string; + destinationId: 0; isEnabled: boolean; - isOverridable: boolean; isSetByReceiver: boolean; - pushNotificationDestinationPreferences: [ - { - name: string; - platform: string; - destinationId: 0; - isEnabled: boolean; - isSetByReceiver: boolean; - } - ]; - }[]; - optedOutNotificationSourceTypes: string[]; - optedOutReceiverDestinationTypes: string[]; -} + } + ]; + }[]; + optedOutNotificationSourceTypes: string[]; + optedOutReceiverDestinationTypes: string[]; +}; export type GetRealtimeNotificationsSettings = { - primaryDomain: string; - fallbackDomain: string; -} + primaryDomain: string; + fallbackDomain: string; +}; export type AllowNotificationSourceOptions = { - sourceType: string; -} -export type AllowNotificationSource = unknown + sourceType: string; +}; +export type AllowNotificationSource = unknown; export type DisallowNotificationSourceOptions = AllowNotificationSourceOptions; -export type DisallowNotificationSource = unknown +export type DisallowNotificationSource = unknown; export type AllowNotificationsDestinationOptions = { - destinationType: string; -} -export type AllowNotificationsDestination = unknown -export type DisallowNotificationsDestinationOptions = AllowNotificationsDestinationOptions; -export type DisallowNotificationsDestination = unknown + destinationType: string; +}; +export type AllowNotificationsDestination = unknown; +export type DisallowNotificationsDestinationOptions = + AllowNotificationsDestinationOptions; +export type DisallowNotificationsDestination = unknown; export type UpdateNotificationDestinationSettingsOptions = { + notificationSourceType: string; + destinationId: number; + isEnabled: boolean; +}; +export type UpdateNotificationDestinationSettings = unknown; +export type UpdateNotificationSettingsOptions = { + updatedSettings: { notificationSourceType: string; - destinationId: number; + receiverDestination: string; isEnabled: boolean; -} -export type UpdateNotificationDestinationSettings = unknown -export type UpdateNotificationSettingsOptions = { - updatedSettings: { - notificationSourceType: string; - receiverDestination: string; - isEnabled: boolean; - }[]; -} -export type UpdateNotificationSettings = unknown + }[]; +}; +export type UpdateNotificationSettings = unknown; export type GetChromeNotificationsManifest = { - name: string; - gcm_sender_id: string; -} + name: string; + gcm_sender_id: string; +}; export type GetCurrentNotificationDeviceDestination = { - destination: { - user: { - name: string; - userId: number; - }; - name: string; - notificationToken: string; - supportsUpdateNotifications: boolean; - userPushNotificationDestinationId: number; - application: string; - platform: string; + destination: { + user: { + name: string; + userId: number; }; - statusMessage: string; -} + name: string; + notificationToken: string; + supportsUpdateNotifications: boolean; + userPushNotificationDestinationId: number; + application: string; + platform: string; + }; + statusMessage: string; +}; export type GetNotificationDestinations = { - destinations: GetCurrentNotificationDeviceDestination["destination"][]; - statusMessage: string; -} + destinations: GetCurrentNotificationDeviceDestination["destination"][]; + statusMessage: string; +}; export type GetNotificationsMetaDataOptions = { - notificationToken: string; - notificationId: number; -} + notificationToken: string; + notificationId: number; +}; export type GetNotificationsMetaData = { - metadata: { - notificationId: string; - type: string; - detail: unknown; - fallbackDelivered: boolean; - }; - statusMessage: string; -} + metadata: { + notificationId: string; + type: string; + detail: unknown; + fallbackDelivered: boolean; + }; + statusMessage: string; +}; export type GetNotificationIdsOptions = { - notificationToken: string; - limit: number; - cursor?: string; -} + notificationToken: string; + limit: number; + cursor?: string; +}; export type GetNotificationIds = { - ids: string[]; - statusMessage: string; -} + ids: string[]; + statusMessage: string; +}; export type DeregisterAllDevices = { - statusMessage: string; -} + statusMessage: string; +}; export type DeregisterCurrentDevice = { - statusMessage: string; -} + statusMessage: string; +}; export type MarkNotificationReadOptions = { - platformType: string; - notificationId: string; -} + platformType: string; + notificationId: string; +}; export type MarkNotificationRead = { - statusMessage: string; -} + statusMessage: string; +}; export type MarkNotificationCategoryReadOptions = { - notificationType: string; - category: string; - latestNotificationId: string; -} + notificationType: string; + category: string; + latestNotificationId: string; +}; export type MarkNotificationCategoryRead = { - statusMessage: string; -} + statusMessage: string; +}; export type MarkNotificationInteractionOptions = { - platformType: string; - notificationToken: string; - notificationId: number; - interactionType: string; -} + platformType: string; + notificationToken: string; + notificationId: number; + interactionType: string; +}; export type MarkNotificationInteraction = { - statusMessage: string; -} + statusMessage: string; +}; export type RegisterAmazonAndroidOptions = { - notificationToken: string; - authorizeForUser: boolean; - oldNotificationToken: string; - deviceName: string; -} + notificationToken: string; + authorizeForUser: boolean; + oldNotificationToken: string; + deviceName: string; +}; export type RegisterAmazonAndroid = { - registration: { - userPushNotificationDestinationId: number; - name: string; - notificationToken: string; - application: string; - platform: string; - }; - statusMessage: string; -} + registration: { + userPushNotificationDestinationId: number; + name: string; + notificationToken: string; + application: string; + platform: string; + }; + statusMessage: string; +}; export type RegisterAndroidNativeOptions = RegisterAmazonAndroidOptions; export type RegisterAndroidNative = RegisterAmazonAndroid; export type RegisterAndroidTencentServiceOptions = RegisterAmazonAndroidOptions; export type RegisterAndroidTencentService = RegisterAmazonAndroid; export type RegisterChromeOptions = { - notificationToken: string; - initiatedByUser: boolean; -} + notificationToken: string; + initiatedByUser: boolean; +}; export type RegisterChrome = RegisterAmazonAndroid; export type RegisterFirefoxOptions = RegisterChromeOptions & { - notificationEndpoint: string; -} + notificationEndpoint: string; +}; export type RegisterFirefox = RegisterAmazonAndroid; export type RegisterIOSNativeOptions = { - notificationToken: string; - destinationIdentifier: string; - authorizeForUser: boolean; - oldNotificationToken: string; - deviceName: string; + notificationToken: string; + destinationIdentifier: string; + authorizeForUser: boolean; + oldNotificationToken: string; + deviceName: string; }; export type RegisterIOSNative = RegisterAmazonAndroid; export type GetLatestUniversesUpdatesOptions = { - universeIds: number[]; - sinceDateTime?: string; -} + universeIds: number[]; + sinceDateTime?: string; +}; export type GetLatestUniverseUpdates = { - universeId: number; - rootPlaceId: number; - createdOn: string; - createdOnKey: string; - content: string; - universeName: string; + universeId: number; + rootPlaceId: number; + createdOn: string; + createdOnKey: string; + content: string; + universeName: string; }[]; export type GetStreamNotificationsPromptSettings = { - hasUserInteractedWithNotificationsStream: boolean; - showNotificationStreamPrompt: boolean; -} + hasUserInteractedWithNotificationsStream: boolean; + showNotificationStreamPrompt: boolean; +}; export type GetRecentStreamNotificationsOptions = { - startIndex?: number; - maxRows?: number; -} + startIndex?: number; + maxRows?: number; +}; export type GetRecentStreamNotifications = { - id: number; - notificationSourceType: string; - eventDate: string; - isInteracted: boolean; - metadataCollection: unknown[]; - eventCount: number; + id: number; + notificationSourceType: string; + eventDate: string; + isInteracted: boolean; + metadataCollection: unknown[]; + eventCount: number; }[]; export type GetStreamNotificationsMetaData = { - bannerDismissTimeSpan: number; - signalRDisconnectionResponseInMilliseconds: number; - canLaunchGameFromGameUpdate: boolean; - useFriendsApiForAjaxRequests: boolean; -} + bannerDismissTimeSpan: number; + signalRDisconnectionResponseInMilliseconds: number; + canLaunchGameFromGameUpdate: boolean; + useFriendsApiForAjaxRequests: boolean; +}; export type GetStreamNotificationsUnreadCount = { - unreadNotifications: number; - statusMessage: string; -} + unreadNotifications: number; + statusMessage: string; +}; export type ClearUnreadStreamNotifications = { - statusMessage: string; -} + statusMessage: string; +}; export type SendGameUpdateNotificationInteractedOptions = { - universeId: number; - createdOnKey: string; - interactioNType: string; - currentUserId: number; -} + universeId: number; + createdOnKey: string; + interactioNType: string; + currentUserId: number; +}; export type SendGameUpdateNotificationInteracted = { - statusMessage: string; -} + statusMessage: string; +}; export type SendGameUpdateNotificationReadOptions = { - universeId: number; - createdOn: string; - currentUserId: number; -} + universeId: number; + createdOn: string; + currentUserId: number; +}; export type SendGameUpdateNotificationRead = { - statusMessage: string; -} + statusMessage: string; +}; export type MarkStreamNotificationInteractedOptions = { - eventId: string; -} + eventId: string; +}; export type MarkStreamNotificationInteracted = { - statusMessage: string; - -} + statusMessage: string; +}; export type SuppressStreamNotificationsPrompt = { - statusMessage: string; -} - + statusMessage: string; +}; export default class NotificationsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://notifications.roblox.com/" - }); - } - - getNotificationsSettings (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/get-settings` - }, - json: true - }) - .then(response => response.body); - } - - getRealtimeNotificationSettings (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/settings/realtime` - }, - json: true - }) - .then(response => response.body); - } - - allowNotificationSource (options: AllowNotificationSourceOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/notification-source-types/allow`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - disallowNotificationSource (options: DisallowNotificationSourceOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/notification-source-types/opt-out`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - allowNotificationDestination (options: AllowNotificationsDestinationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/receiver-destination-types/allow`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - disallowNotificationDestination (options: DisallowNotificationsDestinationOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/receiver-destination-types/opt-out`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - updateDestinationSetting (options: UpdateNotificationDestinationSettingsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/update-destination-setting`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - updateNotificationSettings (options: UpdateNotificationSettingsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/notifications/update-notification-settings`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getChromeManifest (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/chrome-manifest` - }, - json: true - }) - .then(response => response.body); - } - - getCurrentDeviceDestination (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/get-current-device-destination` - }, - json: true - }) - .then(response => response.body); - } - - getDestinations (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/get-destinations` - }, - json: true - }) - .then(response => response.body); - } - - getPushNotificationsMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/metadata` - }, - json: true - }) - .then(response => response.body); - } - - getNotificationIds (options: GetNotificationIdsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/notification-ids`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - deregisterAllDevices (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/deregister-all-devices`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - deregisterCurrentDevice (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/deregister-current-device` - }, - json: true - }) - .then(response => response.body); - } - - markNotificationRead (options: MarkNotificationReadOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/mark-as-read`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - markNotificationCategoryRead (options: MarkNotificationCategoryReadOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/mark-category-as-read`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - markNotificationInteraction (options: MarkNotificationInteractionOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/mark-interaction`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - registerAndroidAmazon (options: RegisterAmazonAndroidOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/register-android-amazon`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - registerAndroidNative (options: RegisterAndroidNativeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/register-android-native`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - registerAndroidTencentSerice (options: RegisterAndroidTencentServiceOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/register-android-tencent-service`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - registerChrome (options: RegisterChromeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/register-chrome`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - registerFirefox (options: RegisterFirefoxOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/register-firefox`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - registerIOSNative (options: RegisterIOSNativeOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/push-notifications/register-ios-native`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - getLatestUniversesUpdates (options: GetLatestUniversesUpdatesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/get-latest-game-updates`, - qs: { - ...options, - universeId: options.universeIds.join(",") - } - }, - json: true - }) - .then(response => response.body); - } - - getStreamNotificationsPromptSettings (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/get-prompt-settings` - }, - json: true - }) - .then(response => response.body); - } - - getRecentStreamNotifications (options: GetRecentStreamNotificationsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/get-recent`, - qs: options - }, - json: true - }) - .then(response => response.body); - } - - getStreamNotificationsMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/metadata` - }, - json: true - }) - .then(response => response.body); - } - - getUnreadStreamNotificationsCount (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/unread-count` - }, - json: true - }) - .then(response => response.body); - } - - clearUnreadStreamNotifications (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/clear-unread`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } - - markGameUpdateNotificationInteracted (options: SendGameUpdateNotificationInteractedOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/game-update-notification-interacted`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - markGameUpdateNotificationRead (options: SendGameUpdateNotificationReadOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/get-latest-game-updates`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } - - suppressStreamNotificationsPrompt (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v2/stream-notifications/suppress-prompt`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://notifications.roblox.com/" + }); + } + + getNotificationsSettings (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/get-settings` + }, + json: true + }).then(response => response.body); + } + + getRealtimeNotificationSettings (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/settings/realtime` + }, + json: true + }).then(response => response.body); + } + + allowNotificationSource ( + options: AllowNotificationSourceOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/notification-source-types/allow`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + disallowNotificationSource ( + options: DisallowNotificationSourceOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/notification-source-types/opt-out`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + allowNotificationDestination ( + options: AllowNotificationsDestinationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/receiver-destination-types/allow`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + disallowNotificationDestination ( + options: DisallowNotificationsDestinationOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/receiver-destination-types/opt-out`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + updateDestinationSetting ( + options: UpdateNotificationDestinationSettingsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/update-destination-setting`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + updateNotificationSettings ( + options: UpdateNotificationSettingsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/update-notification-settings`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + getChromeManifest (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/chrome-manifest` + }, + json: true + }).then(response => response.body); + } + + getCurrentDeviceDestination (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/get-current-device-destination` + }, + json: true + }).then(response => response.body); + } + + getDestinations (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/get-destinations` + }, + json: true + }).then(response => response.body); + } + + getPushNotificationsMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/metadata` + }, + json: true + }).then(response => response.body); + } + + getNotificationIds ( + options: GetNotificationIdsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/notification-ids`, + qs: options + }, + json: true + }).then(response => response.body); + } + + deregisterAllDevices (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/deregister-all-devices`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + deregisterCurrentDevice (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/deregister-current-device` + }, + json: true + }).then(response => response.body); + } + + markNotificationRead ( + options: MarkNotificationReadOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/mark-as-read`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + markNotificationCategoryRead ( + options: MarkNotificationCategoryReadOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/mark-category-as-read`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + markNotificationInteraction ( + options: MarkNotificationInteractionOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/mark-interaction`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + registerAndroidAmazon ( + options: RegisterAmazonAndroidOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-android-amazon`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + registerAndroidNative ( + options: RegisterAndroidNativeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-android-native`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + registerAndroidTencentSerice ( + options: RegisterAndroidTencentServiceOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-android-tencent-service`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + registerChrome (options: RegisterChromeOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-chrome`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + registerFirefox (options: RegisterFirefoxOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-firefox`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + registerIOSNative ( + options: RegisterIOSNativeOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-ios-native`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + getLatestUniversesUpdates ( + options: GetLatestUniversesUpdatesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-latest-game-updates`, + qs: { + ...options, + universeId: options.universeIds.join(",") + } + }, + json: true + }).then(response => response.body); + } + + getStreamNotificationsPromptSettings (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-prompt-settings` + }, + json: true + }).then(response => response.body); + } + + getRecentStreamNotifications ( + options: GetRecentStreamNotificationsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-recent`, + qs: options + }, + json: true + }).then(response => response.body); + } + + getStreamNotificationsMetaData (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/metadata` + }, + json: true + }).then(response => response.body); + } + + getUnreadStreamNotificationsCount (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/unread-count` + }, + json: true + }).then(response => response.body); + } + + clearUnreadStreamNotifications (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/clear-unread`, + method: "POST" + }, + json: true + }).then(response => response.body); + } + + markGameUpdateNotificationInteracted ( + options: SendGameUpdateNotificationInteractedOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/game-update-notification-interacted`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + markGameUpdateNotificationRead ( + options: SendGameUpdateNotificationReadOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-latest-game-updates`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } + + suppressStreamNotificationsPrompt (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/suppress-prompt`, + method: "POST" + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/OtherAPI.ts b/src/client/apis/OtherAPI.ts index c058a3d3e..6e2ec07d2 100644 --- a/src/client/apis/OtherAPI.ts +++ b/src/client/apis/OtherAPI.ts @@ -2,66 +2,66 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; - export type GetUserProfileHeaderOptions = { - userId: number; -} + userId: number; +}; export type GetUserProfileHeader = { + UserId: number; + ProfileUserId: number; + ProfileUserName: string; + ProfileDisplayName: string; + FriendsCount: number; + UserPresenceType: EnumUserPresence; + LastLocation: string | null; + UserStatus: string | null; + UserStatusDate: string | null; + UserPlaceId: number | null; + FollowersCount: number; + FollowingsCount: number; + IsVieweeBlocked: boolean; + IsViewerBlocked: boolean; + AreFriends: boolean; + IncomingFriendRequestPending: boolean; + MaySendFriendInvitation: boolean; + FriendRequestPending: boolean; + MayFollow: boolean; + IsFollowing: boolean; + CanMessage: boolean; + MessagesDisabled: boolean; + CanBeFollowed: boolean; + CanTrade: boolean; + CanSeeFavorites: boolean; + MayImpersonate: boolean; + MayEdit: boolean; + HeadShotImage: { + Final: boolean; + Url: string; + RetryUrl: string | null; UserId: number; - ProfileUserId: number; - ProfileUserName: string; - ProfileDisplayName: string; - FriendsCount: number; - UserPresenceType: EnumUserPresence; - LastLocation: string | null; - UserStatus: string | null; - UserStatusDate: string | null; - UserPlaceId: number | null; - FollowersCount: number; - FollowingsCount: number; - IsVieweeBlocked: boolean; - IsViewerBlocked: boolean; - AreFriends: boolean; - IncomingFriendRequestPending: boolean; - MaySendFriendInvitation: boolean; - FriendRequestPending: boolean; - MayFollow: boolean; - IsFollowing: boolean; - CanMessage: boolean; - MessagesDisabled: boolean; - CanBeFollowed: boolean; - CanTrade: boolean; - CanSeeFavorites: boolean; - MayImpersonate: boolean; - MayEdit: boolean; - HeadShotImage: { - Final: boolean; - Url: string; - RetryUrl: string | null; - UserId: number; - EndpointType: "Avatar" | string; - }; - PreviousUserNames: string; - IsUserOnPhone: boolean; - CanSeeInventory: boolean; -} + EndpointType: "Avatar" | string; + }; + PreviousUserNames: string; + IsUserOnPhone: boolean; + CanSeeInventory: boolean; +}; export default class OtherAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://roblox.com/" + }); + } - getUserProfileHeader (options: GetUserProfileHeaderOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - url: `https://www.roblox.com/users/profile/profileheader-json?userId=${options.userId}` - }, - json: true - }) - .then(response => response.body); - } + getUserProfileHeader ( + options: GetUserProfileHeaderOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + url: `https://www.roblox.com/users/profile/profileheader-json?userId=${options.userId}` + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/PremiumFeaturesAPI.ts b/src/client/apis/PremiumFeaturesAPI.ts index 641592578..898b8ae18 100644 --- a/src/client/apis/PremiumFeaturesAPI.ts +++ b/src/client/apis/PremiumFeaturesAPI.ts @@ -1,47 +1,47 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type PremiumUpsellCheckOptions = { - userId: number; - universeId: number; - placeId: number; -} -export type PremiumUpsellCheck = unknown + userId: number; + universeId: number; + placeId: number; +}; +export type PremiumUpsellCheck = unknown; export type ValidateUserMembershipOptions = { - userId: number; -} + userId: number; +}; export type ValidateUserMembership = boolean; - export default class PremiumFeaturesAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://premiumfeatures.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://premiumfeatures.roblox.com/" + }); + } - premiumUpsellCheck (options: PremiumUpsellCheckOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/premium-upsell-check`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + premiumUpsellCheck ( + options: PremiumUpsellCheckOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/premium-upsell-check`, + qs: options + }, + json: true + }).then(response => response.body); + } - validateUserMembership (options: ValidateUserMembershipOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/validate-membership` - }, - json: true - }) - .then(response => response.body); - } + validateUserMembership ( + options: ValidateUserMembershipOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/validate-membership` + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/PresenceAPI.ts b/src/client/apis/PresenceAPI.ts index 59cc2d97d..c110215a0 100644 --- a/src/client/apis/PresenceAPI.ts +++ b/src/client/apis/PresenceAPI.ts @@ -2,60 +2,61 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; - export type RegisterAppPresenceOptions = { - location: string; - placeId: number; - disconnect: boolean; -} -export type RegisterAppPresence = unknown + location: string; + placeId: number; + disconnect: boolean; +}; +export type RegisterAppPresence = unknown; export type GetUsersPresencesOptions = { - userIds: number[]; -} + userIds: number[]; +}; export type GetUsersPresences = { - userPresences: { - userPresenceType: EnumUserPresence; - lastLocation: string; - placeId: number; - rootPlaceId: number; - gameId: string; - universeId: number; - userId: number; - lastOnline: string; - }[]; -} + userPresences: { + userPresenceType: EnumUserPresence; + lastLocation: string; + placeId: number; + rootPlaceId: number; + gameId: string; + universeId: number; + userId: number; + lastOnline: string; + }[]; +}; export default class PresenceAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://presence.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://presence.roblox.com/" + }); + } - registerAppPresence (options: RegisterAppPresenceOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/presence/register-app-presence`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + registerAppPresence ( + options: RegisterAppPresenceOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/presence/register-app-presence`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getUsersPresences (options: GetUsersPresencesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/presence/users`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getUsersPresences ( + options: GetUsersPresencesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/presence/users`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/PrivateMessagesAPI.ts b/src/client/apis/PrivateMessagesAPI.ts index 853d0fc56..075a9c35e 100644 --- a/src/client/apis/PrivateMessagesAPI.ts +++ b/src/client/apis/PrivateMessagesAPI.ts @@ -1,218 +1,212 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetAnnouncements = { - collection: { - id: number; - sender: { - id: number; - name: string; - displayName: string; - }; - subject: string; - body: string; - created: string; - updated: string; + collection: { + id: number; + sender: { + id: number; + name: string; + displayName: string; }; - totalCollectionSize: number; -} + subject: string; + body: string; + created: string; + updated: string; + }; + totalCollectionSize: number; +}; export type GetAnnouncementsMetaData = { - numOfAnnouncements: number; -} + numOfAnnouncements: number; +}; export type GetMessagesOptions = { - pageNumber?: number; - pageSize?: number; - messageTab?: "Inbox" | "Sent" | "Archive"; -} + pageNumber?: number; + pageSize?: number; + messageTab?: "Inbox" | "Sent" | "Archive"; +}; export type GetMessages = { - collection: { - id: number; - sender: { - id: number; - name: string; - displayName: string; - }; - recipient: { - id: number; - name: string; - displayName: string; - }; - subject: string; - body: string; - created: string; - updated: string; - isRead: boolean; - isSystemMessage: boolean; - isReportAbuseDisplayed: boolean; - }[]; - totalCollectionSize: number; - totalPages: number; - pageNumber: number; -} + collection: { + id: number; + sender: { + id: number; + name: string; + displayName: string; + }; + recipient: { + id: number; + name: string; + displayName: string; + }; + subject: string; + body: string; + created: string; + updated: string; + isRead: boolean; + isSystemMessage: boolean; + isReportAbuseDisplayed: boolean; + }[]; + totalCollectionSize: number; + totalPages: number; + pageNumber: number; +}; export type GetMessageOptions = { - messageId: number; -} + messageId: number; +}; export type GetMessage = GetMessages["collection"][0]; export type GetUnreadMessagesCount = { - count: number; -} + count: number; +}; export type ArchiveMessagesOptions = { - messageIds: number[]; -} + messageIds: number[]; +}; export type ArchiveMessages = { - failedMessages?: { - messageId: number; - errorMessage: string; - }[]; -} + failedMessages?: { + messageId: number; + errorMessage: string; + }[]; +}; export type MarkMessagesReadOptions = ArchiveMessagesOptions; export type MarkMessagesRead = ArchiveMessages; export type MarkMessagesUnreadOptions = ArchiveMessagesOptions; export type MarkMessagesUnread = ArchiveMessages; export type SendMessageOptions = { - userId: number; - subject: string; - body: string; - recipientId: number; - replyMessageId?: number; - includePreviousMessage?: boolean; -} + userId: number; + subject: string; + body: string; + recipientId: number; + replyMessageId?: number; + includePreviousMessage?: boolean; +}; export type SendMessage = { - success: boolean; - shortMessage: string; - message: string; -} + success: boolean; + shortMessage: string; + message: string; +}; export type UnArchiveMessagesOptions = ArchiveMessagesOptions; export type UnArchiveMessages = ArchiveMessages; - export default class PrivateMessagesAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://privatemessages.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://privatemessages.roblox.com/" + }); + } - getAnnouncements (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/announcements` - }, - json: true - }) - .then(response => response.body); - } + getAnnouncements (): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/announcements` + }, + json: true + }).then(response => response.body); + } - getAnnouncementsMetaData (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/announcements/metadata` - }, - json: true - }) - .then(response => response.body); - } + getAnnouncementsMetaData (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/announcements/metadata` + }, + json: true + }).then(response => response.body); + } - getMessages (options: GetMessagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getMessages (options: GetMessagesOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages`, + qs: options + }, + json: true + }).then(response => response.body); + } - getMessage (options: GetMessageOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/${options.messageId}` - }, - json: true - }) - .then(response => response.body); - } + getMessage (options: GetMessageOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/${options.messageId}` + }, + json: true + }).then(response => response.body); + } - getUnreadMessagesCount (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/unread/count` - }, - json: true - }) - .then(response => response.body); - } + getUnreadMessagesCount (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/unread/count` + }, + json: true + }).then(response => response.body); + } - archiveMessages (options: ArchiveMessagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/archive`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + archiveMessages (options: ArchiveMessagesOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/archive`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - markMessagesRead (options: MarkMessagesReadOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/mark-read`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + markMessagesRead ( + options: MarkMessagesReadOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/mark-read`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - markMessagesUnread (options: MarkMessagesUnreadOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/mark-unread`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + markMessagesUnread ( + options: MarkMessagesUnreadOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/mark-unread`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - sendMessage (options: SendMessageOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/send`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + sendMessage (options: SendMessageOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/send`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - unArchiveMessages (options: UnArchiveMessagesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/messages/unarchive`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + unArchiveMessages ( + options: UnArchiveMessagesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/unarchive`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/PublishAPI.ts b/src/client/apis/PublishAPI.ts index c105c7b8d..4414642e2 100644 --- a/src/client/apis/PublishAPI.ts +++ b/src/client/apis/PublishAPI.ts @@ -1,157 +1,157 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type UploadAssetsOptions = { - files: unknown; -} + files: unknown; +}; export type UploadAssets = { - AssetDetails: { - assetId: number; - assetFileName: string; - uploadAssetError: "None" | string; - }[]; -} + AssetDetails: { + assetId: number; + assetFileName: string; + uploadAssetError: "None" | string; + }[]; +}; export type PublishAudioOptions = { - name: string; - file: unknown; - groupId?: number; - paymentSource: string; -} + name: string; + file: unknown; + groupId?: number; + paymentSource: string; +}; export type PublishAudio = { - Id: number; - Name: string; -} + Id: number; + Name: string; +}; export type VerifyAudioOptions = PublishAudioOptions; export type VerifyAudio = { - price: number; - canAfford: boolean; -} + price: number; + canAfford: boolean; +}; export type PublishBadgeIconOptions = { - badgeId: number; - files: unknown; -} + badgeId: number; + files: unknown; +}; export type PublishBadgeIcon = { - targetId: number; -} + targetId: number; +}; export type PublishGamePassIconOptions = { - gamePassId: number; - files: unknown; -} + gamePassId: number; + files: unknown; +}; export type PublishGamePassIcon = { - targetId: number; -} + targetId: number; +}; export type UploadGameThumbnailOptions = { - gameId: number; - files: unknown; -} + gameId: number; + files: unknown; +}; export type UploadGameThumbnail = { - targetId: number; -} + targetId: number; +}; export type UploadPluginIconOptions = { - pluginId: number; - files: unknown; -} + pluginId: number; + files: unknown; +}; export type UploadPluginIcon = { - targetId: number; -} + targetId: number; +}; export default class PublishAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://publish.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://publish.roblox.com/" + }); + } - uploadAssets (options: UploadAssetsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets/upload`, - method: "POST", - body: options.files - }, - json: true - }) - .then(response => response.body); - } + uploadAssets (options: UploadAssetsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/upload`, + method: "POST", + body: options.files + }, + json: true + }).then(response => response.body); + } - publishAudio (options: PublishAudioOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/audio`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + publishAudio (options: PublishAudioOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/audio`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - verifyAudio (options: VerifyAudioOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/audio/verify`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + verifyAudio (options: VerifyAudioOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/audio/verify`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - publishBadgeIcon (options: PublishBadgeIconOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/badges/${options.badgeId}/icon`, - method: "POST", - body: options.files - }, - json: true - }) - .then(response => response.body); - } + publishBadgeIcon ( + options: PublishBadgeIconOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/${options.badgeId}/icon`, + method: "POST", + body: options.files + }, + json: true + }).then(response => response.body); + } - publishGamePassIcon (options: PublishGamePassIconOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/game-passes/${options.gamePassId}/icon`, - method: "POST", - body: options.files - }, - json: true - }) - .then(response => response.body); - } + publishGamePassIcon ( + options: PublishGamePassIconOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/game-passes/${options.gamePassId}/icon`, + method: "POST", + body: options.files + }, + json: true + }).then(response => response.body); + } - uploadGameThumbnail (options: UploadGameThumbnailOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/games/${options.gameId}/thumbnail/image`, - method: "POST", - body: options.files - }, - json: true - }) - .then(response => response.body); - } + uploadGameThumbnail ( + options: UploadGameThumbnailOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/${options.gameId}/thumbnail/image`, + method: "POST", + body: options.files + }, + json: true + }).then(response => response.body); + } - uploadPluginIcon (options: UploadPluginIconOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/plugins/${options.pluginId}/icon`, - method: "POST", - body: options.files - }, - json: true - }) - .then(response => response.body); - } + uploadPluginIcon ( + options: UploadPluginIconOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/plugins/${options.pluginId}/icon`, + method: "POST", + body: options.files + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/ThumbnailsAPI.ts b/src/client/apis/ThumbnailsAPI.ts index 01efb3a29..94928248c 100644 --- a/src/client/apis/ThumbnailsAPI.ts +++ b/src/client/apis/ThumbnailsAPI.ts @@ -1,353 +1,434 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetAssetsThumbnailsOptions = { - assetIds: number[]; - returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; - size?: "42x42" | "50x50" | "75x75" | "110x110" | "140x140" | "150x150" | "160x100" | "160x600" | "250x250" | "256x144" | "300x250" | "304x166" | "384x216" | "396x216" | "420x420" | "480x270" | "512x512" | "576x324" | "700x700" | "728x90" | "768x432"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + assetIds: number[]; + returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; + size?: + | "42x42" + | "50x50" + | "75x75" + | "110x110" + | "140x140" + | "150x150" + | "160x100" + | "160x600" + | "250x250" + | "256x144" + | "300x250" + | "304x166" + | "384x216" + | "396x216" + | "420x420" + | "480x270" + | "512x512" + | "576x324" + | "700x700" + | "728x90" + | "768x432"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetAssetsThumbnails = { - data: { - targetId: number; - state: "Error" | string; - imageUrl: string; - }[]; -} + data: { + targetId: number; + state: "Error" | string; + imageUrl: string; + }[]; +}; export type GetBadgesIconsOptions = { - badgeIds: number[]; - size?: "150x150"; - format?: "png" | "jpg"; - isCircular?: boolean; + badgeIds: number[]; + size?: "150x150"; + format?: "png" | "jpg"; + isCircular?: boolean; }; export type GetBadgesIcons = GetAssetsThumbnails; export type GetBundlesThumbnailsOptions = { - bundleIds: number[]; - size?: "150x150" | "420x420"; - format?: "png" | "jpg"; - isCircular?: boolean; + bundleIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; }; export type GetBundlesThumbnails = GetAssetsThumbnails; export type GetDeveloperProductsIconsOptions = { - developerProductIds: number[]; - size?: "150x150" | "420x420"; - format?: "png" | "jpg"; - isCircular?: boolean; + developerProductIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; }; export type GetDeveloperProductsIcons = GetAssetsThumbnails; export type GetGamePassesIconsOptions = { - gamePassIds: number[]; - size?: "150x150"; - format?: "png" | "jpg"; - isCircular?: boolean; + gamePassIds: number[]; + size?: "150x150"; + format?: "png" | "jpg"; + isCircular?: boolean; }; export type GetGamePassesIcons = GetAssetsThumbnails; export type GetUniverseThumbnailsOptions = { - universeId: number; - thumbnailIds: number[]; - size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + universeId: number; + thumbnailIds: number[]; + size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUniverseThumbnails = GetAssetsThumbnails; export type GetUniversesRootPlaceThumbnailsOptions = { - universeIds: number[]; - returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; - size?: "50x50" | "128x128" | "150x150" | "256x256" | "512x512"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + universeIds: number[]; + returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; + size?: "50x50" | "128x128" | "150x150" | "256x256" | "512x512"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUniversesRootPlaceThumbnails = GetAssetsThumbnails; export type GetUniversesThumbnailsOptions = { - universeIds: number[]; - countPerUniverse?: number; - defaults?: boolean; - size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + universeIds: number[]; + countPerUniverse?: number; + defaults?: boolean; + size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUniversesThumbnails = { - data: { - universeId: number; - error?: { - code: number; - message: string; - userFacingMessage: string; - field: string; - fieldData: unknown; - }; - thumbnails: { - targetId: number; - state: "Error" | string; - imageUrl: string; - }[]; + data: { + universeId: number; + error?: { + code: number; + message: string; + userFacingMessage: string; + field: string; + fieldData: unknown; + }; + thumbnails: { + targetId: number; + state: "Error" | string; + imageUrl: string; }[]; -} + }[]; +}; export type GetGroupsIconsOptions = { - groupIds: number[]; - size?: "150x150" | "420x420"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + groupIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetGroupsIcons = GetAssetsThumbnails; export type GetUsersFullBodyAvatarImagesOptions = { - userIds: number[]; - size?: "30x30" | "48x48" | "60x60" | "75x75" | "100x100" | "140x140" | "150x150" | "150x200" | "180x180" | "250x250" | "352x352" | "420x420" | "720x720"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + userIds: number[]; + size?: + | "30x30" + | "48x48" + | "60x60" + | "75x75" + | "100x100" + | "140x140" + | "150x150" + | "150x200" + | "180x180" + | "250x250" + | "352x352" + | "420x420" + | "720x720"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUsersFullBodyAvatarImages = GetAssetsThumbnails; export type GetUsersAvatarBustImagesOptions = { - userIds: number[]; - size?: "50x50" | "60x60" | "75x75"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + userIds: number[]; + size?: "50x50" | "60x60" | "75x75"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUsersAvatarBustImages = GetAssetsThumbnails; export type GetUsersAvatarHeadShotsImagesOptions = { - userIds: number[]; - size?: "48x48" | "50x50" | "60x60" | "75x75" | "110x110" | "150x150" | "180x180" | "352x352" | "420x420" | "720x720"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + userIds: number[]; + size?: + | "48x48" + | "50x50" + | "60x60" + | "75x75" + | "110x110" + | "150x150" + | "180x180" + | "352x352" + | "420x420" + | "720x720"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUsersAvatarHeadShotsImages = GetAssetsThumbnails; export type GetUsersOutfitsImagesOptions = { - userOutfitIds: number[]; - size?: "150x150" | "420x420"; - format?: "png" | "jpg"; - isCircular?: boolean; -} + userOutfitIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; export type GetUsersOutfitsImages = GetAssetsThumbnails; export type GetBatchImagesOptions = { + requestId: string; + targetId: number; + type: + | "Avatar" + | "AvatarHeadShot" + | "GameIcon" + | "BadgeIcon" + | "GameThumbnail" + | "GamePass" + | "Asset" + | "BundleThumbnail" + | "Outfit" + | "GroupIcon" + | "DeveloperProduct" + | "AutoGeneratedAsset"; + size: string; + isCircular: boolean; +}; +export type GetBatchImages = { + data: { requestId: string; + errorCode?: number; + errorMessage?: string; targetId: number; - type: "Avatar" | "AvatarHeadShot" | "GameIcon" | "BadgeIcon" | "GameThumbnail" | "GamePass" | "Asset" | "BundleThumbnail" | "Outfit" | "GroupIcon" | "DeveloperProduct" | "AutoGeneratedAsset"; - size: string; - isCircular: boolean; -} -export type GetBatchImages = { - data: { - requestId: string; - errorCode?: number; - errorMessage?: string; - targetId: number; - state: "Error" | string; - imageUrl: string; - }[]; -} + state: "Error" | string; + imageUrl: string; + }[]; +}; export default class ThumbnailsAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://thumbnails.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://thumbnails.roblox.com/" + }); + } - getAssetsThumbnails (options: GetAssetsThumbnailsOptions): Promise { - const assetIdsQueryString = `assetIds=${options.assetIds.join("&assetIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets?${assetIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getAssetsThumbnails ( + options: GetAssetsThumbnailsOptions + ): Promise { + const assetIdsQueryString = `assetIds=${options.assetIds.join( + "&assetIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets?${assetIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getBadgesIcons (options: GetBadgesIconsOptions): Promise { - const badgeIdsQueryString = `badgeIds=${options.badgeIds.join("&badgeIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/badges/icons?${badgeIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getBadgesIcons (options: GetBadgesIconsOptions): Promise { + const badgeIdsQueryString = `badgeIds=${options.badgeIds.join( + "&badgeIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/icons?${badgeIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getBundlesThumbnails (options: GetBundlesThumbnailsOptions): Promise { - const bundleIdsQueryString = `bundleIds=${options.bundleIds.join("&bundleIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/bundles/thumbnails?${bundleIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getBundlesThumbnails ( + options: GetBundlesThumbnailsOptions + ): Promise { + const bundleIdsQueryString = `bundleIds=${options.bundleIds.join( + "&bundleIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/thumbnails?${bundleIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getDeveloperProductIcons (options: GetDeveloperProductsIconsOptions): Promise { - const developerProductIdsQueryString = `developerProductIds=${options.developerProductIds.join("&developerProductIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/developer-products/icons?${developerProductIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getDeveloperProductIcons ( + options: GetDeveloperProductsIconsOptions + ): Promise { + const developerProductIdsQueryString = `developerProductIds=${options.developerProductIds.join( + "&developerProductIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/developer-products/icons?${developerProductIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getGamePassesIcons (options: GetGamePassesIconsOptions): Promise { - const gamePassIdsQueryString = `gamePassIds=${options.gamePassIds.join("&gamePassIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets?${gamePassIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getGamePassesIcons ( + options: GetGamePassesIconsOptions + ): Promise { + const gamePassIdsQueryString = `gamePassIds=${options.gamePassIds.join( + "&gamePassIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets?${gamePassIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getUniverseThumbnailIds (options: GetUniverseThumbnailsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/games/${options.universeId}/thumbnails`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getUniverseThumbnailIds ( + options: GetUniverseThumbnailsOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/${options.universeId}/thumbnails`, + qs: options + }, + json: true + }).then(response => response.body); + } - getUniversesRootPlaceThumbnail (options: GetUniversesRootPlaceThumbnailsOptions): Promise { - const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/games/icons?${universeIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getUniversesRootPlaceThumbnail ( + options: GetUniversesRootPlaceThumbnailsOptions + ): Promise { + const universeIdsQueryString = `universeIds=${options.universeIds.join( + "&universeIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/icons?${universeIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getUniversesThumbnailIds (options: GetUniversesThumbnailsOptions): Promise { - const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/games/multiget/thumbnails?${universeIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getUniversesThumbnailIds ( + options: GetUniversesThumbnailsOptions + ): Promise { + const universeIdsQueryString = `universeIds=${options.universeIds.join( + "&universeIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/multiget/thumbnails?${universeIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getGroupsIcons (options: GetGroupsIconsOptions): Promise { - const groupIdsQueryString = `groupIds=${options.groupIds.join("&groupIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/groups/icons?${groupIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getGroupsIcons (options: GetGroupsIconsOptions): Promise { + const groupIdsQueryString = `groupIds=${options.groupIds.join( + "&groupIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/icons?${groupIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getUsersFullBodyAvatarImages (options: GetUsersFullBodyAvatarImagesOptions): Promise { - const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/avatar?${userIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getUsersFullBodyAvatarImages ( + options: GetUsersFullBodyAvatarImagesOptions + ): Promise { + const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/avatar?${userIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getUsersAvatarBustImages (options: GetUsersAvatarBustImagesOptions): Promise { - const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/avatar-bust?${userIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getUsersAvatarBustImages ( + options: GetUsersAvatarBustImagesOptions + ): Promise { + const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/avatar-bust?${userIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getUsersAvatarHeadShotImages (options: GetUsersAvatarHeadShotsImagesOptions): Promise { - const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/avatar-headshot?${userIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getUsersAvatarHeadShotImages ( + options: GetUsersAvatarHeadShotsImagesOptions + ): Promise { + const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/avatar-headshot?${userIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getUsersOutfitsImages (options: GetUsersOutfitsImagesOptions): Promise { - const outfitIdsQueryString = `userOutfitIds=${options.userOutfitIds.join("&userOutfitIds=")}`; - return this.request({ - requiresAuth: false, - request: { - path: `v1/assets?${outfitIdsQueryString}`, - qs: { - ...options - } - }, - json: true - }) - .then(response => response.body); - } + getUsersOutfitsImages ( + options: GetUsersOutfitsImagesOptions + ): Promise { + const outfitIdsQueryString = `userOutfitIds=${options.userOutfitIds.join( + "&userOutfitIds=" + )}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets?${outfitIdsQueryString}`, + qs: { + ...options + } + }, + json: true + }).then(response => response.body); + } - getBatchImages (options: GetBatchImagesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/batch`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getBatchImages (options: GetBatchImagesOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/batch`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/TradesAPI.ts b/src/client/apis/TradesAPI.ts index b2c38814e..ac4eb7510 100644 --- a/src/client/apis/TradesAPI.ts +++ b/src/client/apis/TradesAPI.ts @@ -1,216 +1,211 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetTradeOptions = { - tradeId: number; -} + tradeId: number; +}; export type GetTrade = { - offers: { - user: { - id: number; - name: string; - displayName: string; - }; - userAssets: { - id: number; - serialNumber: number; - assetId: number; - name: string; - recentAveragePrice: number; - originalPrice: number; - assetStock: number; - membershipType: "None" | string; - }[]; - robux: number; + offers: { + user: { + id: number; + name: string; + displayName: string; + }; + userAssets: { + id: number; + serialNumber: number; + assetId: number; + name: string; + recentAveragePrice: number; + originalPrice: number; + assetStock: number; + membershipType: "None" | string; }[]; + robux: number; + }[]; + id: number; + user: { + id: number; + name: string; + displayName: string; + }; + created: string; + expiration: string; + isActive: boolean; + status: string; +}; +export type GetTradesByStatusTypeOptions = { + tradeStatusType: "Inbound" | "Outbound" | "Completed" | "Inactive"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export type GetTradesByStatusType = { + previousPageCursor: string; + nextPageCursor: string; + data: { id: number; user: { - id: number; - name: string; - displayName: string; + id: number; + name: string; + displayName: string; }; created: string; expiration: string; isActive: boolean; status: string; -} -export type GetTradesByStatusTypeOptions = { - tradeStatusType: "Inbound" | "Outbound" | "Completed" | "Inactive"; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} -export type GetTradesByStatusType = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - user: { - id: number; - name: string; - displayName: string; - }; - created: string; - expiration: string; - isActive: boolean; - status: string; - }[]; -} + }[]; +}; export type GetTradesCountByStatusTypeOptions = { - tradeStatusType: GetTradesByStatusTypeOptions["tradeStatusType"]; -} + tradeStatusType: GetTradesByStatusTypeOptions["tradeStatusType"]; +}; export type GetTradesCountByStatusType = { - count: number; -} + count: number; +}; export type GetTradesMetaData = { - maxItemsPerSide: number; - minValueRatio: number; - tradeSystemMaxRobuxPercent: number; - tradeSystemRobuxFee: number; -} + maxItemsPerSide: number; + minValueRatio: number; + tradeSystemMaxRobuxPercent: number; + tradeSystemRobuxFee: number; +}; export type CanSelfTradeWithUserOptions = { - userId: number; -} + userId: number; +}; export type CanSelfTradeWithUser = { - canTrade: boolean; - status: string; -} + canTrade: boolean; + status: string; +}; export type AcceptTradeOptions = { - tradeId: number; -} -export type AcceptTrade = unknown + tradeId: number; +}; +export type AcceptTrade = unknown; export type CounterTradeOptions = { - tradeId: number; - offers: { - userId: number; - userAssetIds: number[]; - robux: number; - }[]; -} + tradeId: number; + offers: { + userId: number; + userAssetIds: number[]; + robux: number; + }[]; +}; export type CounterTrade = { - id: number; -} + id: number; +}; export type DeclineTradeOptions = { - tradeId: number; -} -export type DeclineTrade = unknown + tradeId: number; +}; +export type DeclineTrade = unknown; export type SendTradeOptions = Omit; export type SendTrade = { - id: number; -} - + id: number; +}; export default class TradesAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://trades.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://trades.roblox.com/" + }); + } - getTrade (options: GetTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}` - }, - json: true - }) - .then(response => response.body); - } + getTrade (options: GetTradeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}` + }, + json: true + }).then(response => response.body); + } - getTradesByStatusType (options: GetTradesByStatusTypeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeStatusType}` - }, - json: true - }) - .then(response => response.body); - } + getTradesByStatusType ( + options: GetTradesByStatusTypeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeStatusType}` + }, + json: true + }).then(response => response.body); + } - getTradesCountByStatusType (options: GetTradesCountByStatusTypeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeStatusType}/count` - }, - json: true - }) - .then(response => response.body); - } + getTradesCountByStatusType ( + options: GetTradesCountByStatusTypeOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeStatusType}/count` + }, + json: true + }).then(response => response.body); + } - getTradesMetaData (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/metadata` - }, - json: true - }) - .then(response => response.body); - } + getTradesMetaData (): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/metadata` + }, + json: true + }).then(response => response.body); + } - canTradeWith (options: CanSelfTradeWithUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/can-trade-with` - }, - json: true - }) - .then(response => response.body); - } + canTradeWith ( + options: CanSelfTradeWithUserOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/can-trade-with` + }, + json: true + }).then(response => response.body); + } - acceptTrade (options: AcceptTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}/accept`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + acceptTrade (options: AcceptTradeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}/accept`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - counterTrade (options: CounterTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}/counter`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + counterTrade (options: CounterTradeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}/counter`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - declineTrade (options: DeclineTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}/decline`, - method: "POST" - }, - json: true - }) - .then(response => response.body); - } + declineTrade (options: DeclineTradeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}/decline`, + method: "POST" + }, + json: true + }).then(response => response.body); + } - sendTrade (options: SendTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/send`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + sendTrade (options: SendTradeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/send`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/TranslationRolesAPI.ts b/src/client/apis/TranslationRolesAPI.ts index 717f7e734..240760d5c 100644 --- a/src/client/apis/TranslationRolesAPI.ts +++ b/src/client/apis/TranslationRolesAPI.ts @@ -1,102 +1,103 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetSelfGameRolesOptions = { - gameId: number; -} + gameId: number; +}; export type GetSelfGameRoles = { - data: string[]; -} + data: string[]; +}; export type GetGameRoleAssigneesOptions = { - gameId: number; - role: "translator"; -} + gameId: number; + role: "translator"; +}; export type GetGameRoleAssignees = { - data: { - id: null; - name: string; - type: "user"; - }[]; -} + data: { + id: null; + name: string; + type: "user"; + }[]; +}; export type GetSelfGamesAccessByRoleOptions = { - role: "translator"; - exclusiveStartKey?: string; - pageSize?: number; -} + role: "translator"; + exclusiveStartKey?: string; + pageSize?: number; +}; export type GetSelfGamesAccessByRole = { - games: { - gameId: number; - assignee: { - assigneeType: "user"; - id: number; - }; - }[]; -} -export type UpdateUserAccess = { + games: { gameId: number; - userId: number; - role: "translator"; - revoke?: boolean; -} -export type UpdateUser = unknown + assignee: { + assigneeType: "user"; + id: number; + }; + }[]; +}; +export type UpdateUserAccess = { + gameId: number; + userId: number; + role: "translator"; + revoke?: boolean; +}; +export type UpdateUser = unknown; export default class TradesAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://translationroles.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://translationroles.roblox.com/" + }); + } - getSelfGameRoles (options: GetSelfGameRolesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/game-localization-roles/games/${options.gameId}/current-user/roles` - }, - json: true - }) - .then(response => response.body); - } + getSelfGameRoles ( + options: GetSelfGameRolesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/games/${options.gameId}/current-user/roles` + }, + json: true + }).then(response => response.body); + } - getGameRoleAssignees (options: GetGameRoleAssigneesOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/game-localization-roles/games/${options.gameId}/roles/${options.role}/assignees` - }, - json: true - }) - .then(response => response.body); - } + getGameRoleAssignees ( + options: GetGameRoleAssigneesOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/games/${options.gameId}/roles/${options.role}/assignees` + }, + json: true + }).then(response => response.body); + } - getSelfGamesAccessByRole (options: GetSelfGamesAccessByRoleOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/game-localization-roles/roles/${options.role}/current-user` - }, - json: true - }) - .then(response => response.body); - } + getSelfGamesAccessByRole ( + options: GetSelfGamesAccessByRoleOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/roles/${options.role}/current-user` + }, + json: true + }).then(response => response.body); + } - updateUserAccess (options: UpdateUserAccess): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/game-localization-roles/games/${options.gameId}`, - method: "PATCH", - json: { - assigneeId: options.userId, - assigneeType: "user", - role: "translator", - revoke: options.revoke !== undefined ? options.revoke : false - } - }, - json: true - }) - .then(response => response.body); - } + updateUserAccess (options: UpdateUserAccess): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/games/${options.gameId}`, + method: "PATCH", + json: { + assigneeId: options.userId, + assigneeType: "user", + role: "translator", + revoke: options.revoke !== undefined ? options.revoke : false + } + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/TwoStepVerificationAPI.ts b/src/client/apis/TwoStepVerificationAPI.ts index 9d4f114c1..97f266174 100644 --- a/src/client/apis/TwoStepVerificationAPI.ts +++ b/src/client/apis/TwoStepVerificationAPI.ts @@ -1,210 +1,220 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type GetTwoStepVerificationMetaDataOptions = { - userId: number; - challengeId: string; - actionType: string; + userId: number; + challengeId: string; + actionType: string; }; export type GetTwoStepVerificationMetaData = { - twoStepVerificationEnabled: boolean; - authenticatorEnabled: boolean; - authenticatorQrCodeSize: string; - emailCodeLength: number; - authenticatorCodeLength: number; + twoStepVerificationEnabled: boolean; + authenticatorEnabled: boolean; + authenticatorQrCodeSize: string; + emailCodeLength: number; + authenticatorCodeLength: number; }; -export type GetTwoStepConfigurationOptions = GetTwoStepVerificationMetaDataOptions; +export type GetTwoStepConfigurationOptions = + GetTwoStepVerificationMetaDataOptions; export type GetTwoStepConfiguration = { - primaryMediaType: "Email" | string; - methods: { - mediaType: "Email" | string; - enabled: boolean; - updated: string; - }[]; + primaryMediaType: "Email" | string; + methods: { + mediaType: "Email" | string; + enabled: boolean; + updated: string; + }[]; }; export type AuthenticatorVerifyOptions = { - challengeId: string; - actionType: string; - code: string; + challengeId: string; + actionType: string; + code: string; }; export type AuthenticatorVerify = { - verificationToken: string; + verificationToken: string; }; export type AuthenticatorDisableOptions = { - password: string; + password: string; }; export type AuthenticatorDisable = unknown; export type AuthenticatorEnableOptions = { - userId: number; + userId: number; }; export type AuthenticatorEnable = { - setupToken: string; - qrCodeImageUrl: string; - manualEntryKey: string; + setupToken: string; + qrCodeImageUrl: string; + manualEntryKey: string; }; export type AuthenticatorVerifySetupOptions = { - setupToken: string; - code: string; + setupToken: string; + code: string; }; export type AuthenticatorVerifySetup = unknown; export type EmailSendCodeOptions = { - challengeId: string; - actionType: string; + challengeId: string; + actionType: string; }; export type EmailSendCode = { - challengeId: string; - actionType: string; + challengeId: string; + actionType: string; }; export type EmailVerifyOptions = { - challengeId: string; - actionType: string; - code: string; + challengeId: string; + actionType: string; + code: string; }; export type EmailVerify = { - verificationToken: string; + verificationToken: string; }; export type EmailDisableOptions = { - password: string; -} + password: string; +}; export type EmailDisable = unknown; export type EmailEnableOptions = { - userId: number; + userId: number; }; export type EmailEnable = unknown; export default class TwoStepVerificationAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://twostepverification.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://twostepverification.roblox.com/" + }); + } - getMetaData (options: GetTwoStepVerificationMetaDataOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/metadata`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getMetaData ( + options: GetTwoStepVerificationMetaDataOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/metadata`, + qs: options + }, + json: true + }).then(response => response.body); + } - getConfiguration (options?: GetTwoStepConfigurationOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/configuration`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + getConfiguration ( + options?: GetTwoStepConfigurationOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user!.id}/configuration`, + qs: options + }, + json: true + }).then(response => response.body); + } - verifyWithAuthenticator (options: AuthenticatorVerifyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/challenges/authenticator/verify`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + verifyWithAuthenticator ( + options: AuthenticatorVerifyOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${ + this.client.user!.id + }/challenges/authenticator/verify`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - disableAuthenticator (options: AuthenticatorDisableOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/configuration/authenticator/disable`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + disableAuthenticator ( + options: AuthenticatorDisableOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${ + this.client.user!.id + }/configuration/authenticator/disable`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - enableAuthenticator (options: AuthenticatorEnableOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/configuration/authenticator/enable`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + enableAuthenticator ( + options: AuthenticatorEnableOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${ + this.client.user!.id + }/configuration/authenticator/enable`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - verifyAuthenticatorSetup (options: AuthenticatorVerifySetupOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/configuration/authenticator/disable`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + verifyAuthenticatorSetup ( + options: AuthenticatorVerifySetupOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${ + this.client.user!.id + }/configuration/authenticator/disable`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - sendEmailCode (options: EmailSendCodeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/challenges/email/send-code`, - json: options - }, - json: true - }) - .then(response => response.body); - } + sendEmailCode (options: EmailSendCodeOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user!.id}/challenges/email/send-code`, + json: options + }, + json: true + }).then(response => response.body); + } - verifyEmail (options: EmailVerifyOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/challenges/email/verify`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + verifyEmail (options: EmailVerifyOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user!.id}/challenges/email/verify`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - disableEmail (options: EmailDisableOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/configuration/email/disable`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + disableEmail (options: EmailDisableOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user!.id}/configuration/email/disable`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - enableEmail (options: EmailEnableOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${this.client.user!.id}/configuration/email/enable`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + enableEmail (options: EmailEnableOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user!.id}/configuration/email/enable`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/UsersAPI.ts b/src/client/apis/UsersAPI.ts index f7453a75e..755d29b34 100644 --- a/src/client/apis/UsersAPI.ts +++ b/src/client/apis/UsersAPI.ts @@ -1,213 +1,210 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; - export type ValidateDisplayNameNewUserOptions = { - displayName: string; - birthdate: string; -} -export type ValidateDisplayNameNewUser = unknown + displayName: string; + birthdate: string; +}; +export type ValidateDisplayNameNewUser = unknown; export type ValidateDisplayNameExistingUserOptions = { - userId: number; - displayName: string; -} -export type ValidateDisplayNameExistingUser = unknown + userId: number; + displayName: string; +}; +export type ValidateDisplayNameExistingUser = unknown; export type SetSelfDisplayNameOptions = { - userId: number; - newDisplayName: string; -} -export type SetSelfDisplayName = unknown + userId: number; + newDisplayName: string; +}; +export type SetSelfDisplayName = unknown; export type GetUserByIdOptions = { - userId: number; -} + userId: number; +}; export type GetUserById = { - description: string; - created: string; - isBanned: boolean; - id: number; - name: string; - displayName: string; -} + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; + displayName: string; +}; export type GetSelfAuthenticatedUserInformation = { + id: number; + name: string; + displayName: string; +}; +export type GetUsersByUsernamesOptions = { + usernames: string[]; + excludeBannedUsers?: boolean; +}; +export type GetUsersByUsernames = { + data: { + requestedUsername: string; id: number; name: string; displayName: string; -} -export type GetUsersByUsernamesOptions = { - usernames: string[]; - excludeBannedUsers?: boolean; -} -export type GetUsersByUsernames = { - data: { - requestedUsername: string; - id: number; - name: string; - displayName: string; - }[]; + }[]; }; export type GetUsersByUserIdsOptions = { - userIds: number[]; - excludeBannedUsers?: boolean; -} + userIds: number[]; + excludeBannedUsers?: boolean; +}; export type GetUsersByUserIds = { - data: Omit[]; + data: Omit[]; }; export type GetUserStatusOptions = { - userId: number; -} + userId: number; +}; export type GetUserStatus = { - status: string; -} + status: string; +}; export type UpdateSelfStatusOptions = { - userId: number; - status: string; -} + userId: number; + status: string; +}; export type UpdateSelfStatus = { - status: string; -} + status: string; +}; export type SearchUsersOptions = { - keyword: string; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -} + keyword: string; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; export type SearchUsers = { - previousPageCursor: string; - nextPageCursor: string; - data: { - previousUsernames: string[]; - id: number; - name: string; - displayName: string; - }[]; -} + previousPageCursor: string; + nextPageCursor: string; + data: { + previousUsernames: string[]; + id: number; + name: string; + displayName: string; + }[]; +}; export default class UsersAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://users.roblox.com/" - }); - } + constructor (client: Client) { + super({ + client, + baseUrl: "https://users.roblox.com/" + }); + } - validateDisplayNameNewUser (options: ValidateDisplayNameNewUserOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/display-names/validate`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + validateDisplayNameNewUser ( + options: ValidateDisplayNameNewUserOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/display-names/validate`, + qs: options + }, + json: true + }).then(response => response.body); + } - validateDisplayNameExistingUser (options: ValidateDisplayNameExistingUserOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/display-names/validate`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + validateDisplayNameExistingUser ( + options: ValidateDisplayNameExistingUserOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/display-names/validate`, + qs: options + }, + json: true + }).then(response => response.body); + } - setDisplayName (options: SetSelfDisplayNameOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/display-names`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + setDisplayName ( + options: SetSelfDisplayNameOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/display-names`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } - getUserById (options: GetUserByIdOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}` - }, - json: true - }) - .then(response => response.body); - } + getUserById (options: GetUserByIdOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}` + }, + json: true + }).then(response => response.body); + } - getAuthenticatedUserInformation (): Promise { - return this.request({ - // This should actually be "true", but as it's needed in client.login, it's set to false - requiresAuth: false, - request: { - path: `v1/users/authenticated` - }, - json: true - }) - .then(response => response.body); - } + getAuthenticatedUserInformation (): Promise { + return this.request({ + // This should actually be "true", but as it's needed in client.login, it's set to false + requiresAuth: false, + request: { + path: `v1/users/authenticated` + }, + json: true + }).then(response => response.body); + } - getUsersByUsernames (options: GetUsersByUsernamesOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/usernames/users`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getUsersByUsernames ( + options: GetUsersByUsernamesOptions + ): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/usernames/users`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getUsersByIds (options: GetUsersByUserIdsOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users`, - method: "POST", - json: options - }, - json: true - }) - .then(response => response.body); - } + getUsersByIds (options: GetUsersByUserIdsOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users`, + method: "POST", + json: options + }, + json: true + }).then(response => response.body); + } - getUserStatus (options: GetUserStatusOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/${options.userId}/status` - }, - json: true - }) - .then(response => response.body); - } + getUserStatus (options: GetUserStatusOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/status` + }, + json: true + }).then(response => response.body); + } - updateStatus (options: UpdateSelfStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/status`, - method: "PATCH", - json: options - }, - json: true - }) - .then(response => response.body); - } + updateStatus (options: UpdateSelfStatusOptions): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/status`, + method: "PATCH", + json: options + }, + json: true + }).then(response => response.body); + } - searchUsers (options: SearchUsersOptions): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/users/search`, - qs: options - }, - json: true - }) - .then(response => response.body); - } + searchUsers (options: SearchUsersOptions): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/search`, + qs: options + }, + json: true + }).then(response => response.body); + } } diff --git a/src/client/apis/index.ts b/src/client/apis/index.ts index d35163f9e..a922c9423 100644 --- a/src/client/apis/index.ts +++ b/src/client/apis/index.ts @@ -38,87 +38,86 @@ import OtherAPI from "./OtherAPI"; import TwoStepVerificationAPI from "./TwoStepVerificationAPI"; import DataAPI from "./DataAPI"; - export declare type APIs = { - accountInformationAPI: AccountInformationAPI; - accountSettingsAPI: AccountSettingsAPI; - adConfigurationAPI: AdConfigurationAPI; - adsAPI: AdsAPI; - assetDeliveryAPI: AssetDeliveryAPI; - authAPI: AuthAPI; - avatarAPI: AvatarAPI; - badgesAPI: BadgesAPI; - billingAPI: BillingAPI; - catalogAPI: CatalogAPI; - chatAPI: ChatAPI; - contactsAPI: ContactsAPI; - dataAPI: DataAPI; - developAPI: DevelopAPI; - economyAPI: EconomyAPI; - economyCreatorStats: EconomyCreatorStatsAPI; - engagementPayouts: EngagementPayoutsAPI; - followingsAPI: FollowingsAPI; - friendsAPI: FriendsAPI; - gamesAPI: GamesAPI; - gameInternationalizationAPI: GameInternationalizationAPI; - groupsAPI: GroupsAPI; - inventoryAPI: InventoryAPI; - itemConfigurationAPI: ItemConfigurationAPI; - localeAPI: LocaleAPI; - metricsAPI: MetricsAPI; - notificationsAPI: NotificationsAPI; - otherAPI: OtherAPI; - premiumFeaturesAPI: PremiumFeaturesAPI; - presenceAPI: PresenceAPI; - privateMessagesAPI: PrivateMessagesAPI; - publishAPI: PublishAPI; - thumbnailsAPI: ThumbnailsAPI; - tradesAPI: TradesAPI; - translationRolesAPI: TranslationRolesAPI; - usersAPI: UsersAPI; - generalApi: GeneralAPI; - twpStepVerification: TwoStepVerificationAPI; + accountInformationAPI: AccountInformationAPI; + accountSettingsAPI: AccountSettingsAPI; + adConfigurationAPI: AdConfigurationAPI; + adsAPI: AdsAPI; + assetDeliveryAPI: AssetDeliveryAPI; + authAPI: AuthAPI; + avatarAPI: AvatarAPI; + badgesAPI: BadgesAPI; + billingAPI: BillingAPI; + catalogAPI: CatalogAPI; + chatAPI: ChatAPI; + contactsAPI: ContactsAPI; + dataAPI: DataAPI; + developAPI: DevelopAPI; + economyAPI: EconomyAPI; + economyCreatorStats: EconomyCreatorStatsAPI; + engagementPayouts: EngagementPayoutsAPI; + followingsAPI: FollowingsAPI; + friendsAPI: FriendsAPI; + gamesAPI: GamesAPI; + gameInternationalizationAPI: GameInternationalizationAPI; + groupsAPI: GroupsAPI; + inventoryAPI: InventoryAPI; + itemConfigurationAPI: ItemConfigurationAPI; + localeAPI: LocaleAPI; + metricsAPI: MetricsAPI; + notificationsAPI: NotificationsAPI; + otherAPI: OtherAPI; + premiumFeaturesAPI: PremiumFeaturesAPI; + presenceAPI: PresenceAPI; + privateMessagesAPI: PrivateMessagesAPI; + publishAPI: PublishAPI; + thumbnailsAPI: ThumbnailsAPI; + tradesAPI: TradesAPI; + translationRolesAPI: TranslationRolesAPI; + usersAPI: UsersAPI; + generalApi: GeneralAPI; + twpStepVerification: TwoStepVerificationAPI; }; export default function initAPIs (client: Client): APIs { - return { - accountInformationAPI: new AccountInformationAPI(client), - accountSettingsAPI: new AccountSettingsAPI(client), - adConfigurationAPI: new AdConfigurationAPI(client), - adsAPI: new AdsAPI(client), - assetDeliveryAPI: new AssetDeliveryAPI(client), - authAPI: new AuthAPI(client), - avatarAPI: new AvatarAPI(client), - badgesAPI: new BadgesAPI(client), - billingAPI: new BillingAPI(client), - catalogAPI: new CatalogAPI(client), - chatAPI: new ChatAPI(client), - contactsAPI: new ContactsAPI(client), - dataAPI: new DataAPI(client), - developAPI: new DevelopAPI(client), - economyAPI: new EconomyAPI(client), - economyCreatorStats: new EconomyCreatorStatsAPI(client), - engagementPayouts: new EngagementPayoutsAPI(client), - followingsAPI: new FollowingsAPI(client), - friendsAPI: new FriendsAPI(client), - gamesAPI: new GamesAPI(client), - gameInternationalizationAPI: new GameInternationalizationAPI(client), - groupsAPI: new GroupsAPI(client), - inventoryAPI: new InventoryAPI(client), - itemConfigurationAPI: new ItemConfigurationAPI(client), - localeAPI: new LocaleAPI(client), - metricsAPI: new MetricsAPI(client), - generalApi: new GeneralAPI(client), - notificationsAPI: new NotificationsAPI(client), - otherAPI: new OtherAPI(client), - premiumFeaturesAPI: new PremiumFeaturesAPI(client), - presenceAPI: new PresenceAPI(client), - privateMessagesAPI: new PrivateMessagesAPI(client), - publishAPI: new PublishAPI(client), - thumbnailsAPI: new ThumbnailsAPI(client), - tradesAPI: new TradesAPI(client), - translationRolesAPI: new TranslationRolesAPI(client), - usersAPI: new UsersAPI(client), - twpStepVerification: new TwoStepVerificationAPI(client) - }; + return { + accountInformationAPI: new AccountInformationAPI(client), + accountSettingsAPI: new AccountSettingsAPI(client), + adConfigurationAPI: new AdConfigurationAPI(client), + adsAPI: new AdsAPI(client), + assetDeliveryAPI: new AssetDeliveryAPI(client), + authAPI: new AuthAPI(client), + avatarAPI: new AvatarAPI(client), + badgesAPI: new BadgesAPI(client), + billingAPI: new BillingAPI(client), + catalogAPI: new CatalogAPI(client), + chatAPI: new ChatAPI(client), + contactsAPI: new ContactsAPI(client), + dataAPI: new DataAPI(client), + developAPI: new DevelopAPI(client), + economyAPI: new EconomyAPI(client), + economyCreatorStats: new EconomyCreatorStatsAPI(client), + engagementPayouts: new EngagementPayoutsAPI(client), + followingsAPI: new FollowingsAPI(client), + friendsAPI: new FriendsAPI(client), + gamesAPI: new GamesAPI(client), + gameInternationalizationAPI: new GameInternationalizationAPI(client), + groupsAPI: new GroupsAPI(client), + inventoryAPI: new InventoryAPI(client), + itemConfigurationAPI: new ItemConfigurationAPI(client), + localeAPI: new LocaleAPI(client), + metricsAPI: new MetricsAPI(client), + generalApi: new GeneralAPI(client), + notificationsAPI: new NotificationsAPI(client), + otherAPI: new OtherAPI(client), + premiumFeaturesAPI: new PremiumFeaturesAPI(client), + presenceAPI: new PresenceAPI(client), + privateMessagesAPI: new PrivateMessagesAPI(client), + publishAPI: new PublishAPI(client), + thumbnailsAPI: new ThumbnailsAPI(client), + tradesAPI: new TradesAPI(client), + translationRolesAPI: new TranslationRolesAPI(client), + usersAPI: new UsersAPI(client), + twpStepVerification: new TwoStepVerificationAPI(client) + }; } diff --git a/src/client/lib/ChatManager/ChatManager.ts b/src/client/lib/ChatManager/ChatManager.ts index b097f4a63..789568978 100644 --- a/src/client/lib/ChatManager/ChatManager.ts +++ b/src/client/lib/ChatManager/ChatManager.ts @@ -1,164 +1,233 @@ import Client from "../../Client"; import { - AddUsersToConversation, - GetChatSettings, - MarkConversationsAsSeen, - MarkMessageInConversationAsRead, - RemoveUserFromConversation, - RenameGroupConversation, - ResetConversationUniverse, - SendGameLinkMessageOptions, - SendMessageOptions, - SetConversationUniverse, - StartCloudEditConversation, - StartGroupConversation, - StartOneToOneConversation, - UpdateUserTypingStatus + AddUsersToConversation, + GetChatSettings, + MarkConversationsAsSeen, + MarkMessageInConversationAsRead, + RemoveUserFromConversation, + RenameGroupConversation, + ResetConversationUniverse, + SendGameLinkMessageOptions, + SendMessageOptions, + SetConversationUniverse, + StartCloudEditConversation, + StartGroupConversation, + StartOneToOneConversation, + UpdateUserTypingStatus } from "../../apis/ChatAPI"; -import { ChatConversation, ChatMessage, ChatMessageSent } from "../../../structures/Chat"; - +import { + ChatConversation, + ChatMessage, + ChatMessageSent +} from "../../../structures/Chat"; export default class ChatManager { - public client: Client; - - constructor (client: Client) { - this.client = client; - } - - getSettings (): Promise { - return this.client.apis.chatAPI.getChatSettings(); - } - - getConversation (conversationId: number): Promise { - return this.getConversations([conversationId]) - .then(data => data[0] || null); - } - - getConversationMessages (conversationId: number, amount = 100, startMessageId?: string): Promise { - return this.client.apis.chatAPI.getConversationMessages({ - conversationId, - pageSize: amount, - exclusiveStartMessageId: startMessageId - }) - .then(response => response.map(chatData => new ChatMessage(chatData, this.client))); - } - - getUnreadConversationsCount (): Promise { - return this.client.apis.chatAPI.getUnreadConversationCount() - .then(response => response.count); - } - - getConversations (conversations: number[]): Promise { - return this.client.apis.chatAPI.getConversations({ - conversationIds: conversations - }) - .then(response => response.map(conversationData => new ChatConversation(conversationData, this.client))); - } - - addUsersToConversation (conversation: number, users: number[]): Promise { - return this.client.apis.chatAPI.addUsersToConversation({ - conversationId: conversation, - participantUserIds: users - }); - } - - markMessageRead (conversation: number, id: string): Promise { - return this.client.apis.chatAPI.markConversationMessagesRead({ - conversationId: conversation, - endMessageId: id - }); - } - - markConversationsRead (conversations: number[]): Promise { - return this.client.apis.chatAPI.markConversationsSeen({ - conversationsToMarkSeen: conversations - }); - } - - removeUserFromConversation (conversation: number, user: number): Promise { - return this.client.apis.chatAPI.removeUserFromConversation({ - conversationId: conversation, - participantUserId: user - }); - } - - renameGroupConversation (conversation: number, name: string): Promise { - return this.client.apis.chatAPI.renameGroupConversation({ - conversationId: conversation, - newTitle: name - }); - } - - getUnreadMessagesInConversations (conversations: number[], amount = 100): Promise { - return this.client.apis.chatAPI.getUnreadMessagesInConversations({ - conversationIds: conversations, - pageSize: amount - }) - .then(response => Array.prototype.concat.apply( - [], - response.map(conversationData => conversationData.chatMessages - .map(chatData => new ChatMessage(chatData, this.client)) - ))); - } - - getLatestMessagesInConversations (conversations: number[], amount = 100): Promise { - return this.client.apis.chatAPI.getMultiLatestConversationMessages({ - conversationIds: conversations, - pageSize: amount - }) - .then(response => Array.prototype.concat.apply( - [], - response.map(conversationData => conversationData.chatMessages - .map(chatData => new ChatMessage(chatData, this.client)) - ))); - } - - resetConversationUniverse (conversation: number): Promise { - return this.client.apis.chatAPI.resetConversationUniverse({ - conversationId: conversation - }); - } - - sendGameLinkMessage (options: SendGameLinkMessageOptions): Promise { - return this.client.apis.chatAPI.sendGameLinkMessage(options) - .then(response => new ChatMessageSent(response, this.client)); - } - - sendMessage (options: SendMessageOptions): Promise { - return this.client.apis.chatAPI.sendMessage(options) - .then(response => new ChatMessageSent(response, this.client)); - } - - setConversationUniverse (conversation: number, universe: number): Promise { - return this.client.apis.chatAPI.setConversationUniverse({ - conversationId: conversation, - universeId: universe - }); - } - - startCloudEditConversation (placeId: number): Promise { - return this.client.apis.chatAPI.startCloudEditConversation({ - placeId - }); - } - - startGroupConversation (title: string, users: number[]): Promise { - return this.client.apis.chatAPI.startGroupConversation({ - participantUserIds: users, - title - }); - } - - startOneToOneConversation (userId: number): Promise { - return this.client.apis.chatAPI.startOneToOneConversation({ - participantUserId: userId - }); - } - - updateTypingStatus (conversation: number, isTyping = true): Promise { - return this.client.apis.chatAPI.updateUserTypingStatus({ - conversationId: conversation, - isTyping - }); - } + public client: Client; + + constructor (client: Client) { + this.client = client; + } + + getSettings (): Promise { + return this.client.apis.chatAPI.getChatSettings(); + } + + getConversation (conversationId: number): Promise { + return this.getConversations([conversationId]).then( + data => data[0] || null + ); + } + + getConversationMessages ( + conversationId: number, + amount = 100, + startMessageId?: string + ): Promise { + return this.client.apis.chatAPI + .getConversationMessages({ + conversationId, + pageSize: amount, + exclusiveStartMessageId: startMessageId + }) + .then(response => + response.map(chatData => new ChatMessage(chatData, this.client)) + ); + } + + getUnreadConversationsCount (): Promise { + return this.client.apis.chatAPI + .getUnreadConversationCount() + .then(response => response.count); + } + + getConversations (conversations: number[]): Promise { + return this.client.apis.chatAPI + .getConversations({ + conversationIds: conversations + }) + .then(response => + response.map( + conversationData => + new ChatConversation(conversationData, this.client) + ) + ); + } + + addUsersToConversation ( + conversation: number, + users: number[] + ): Promise { + return this.client.apis.chatAPI.addUsersToConversation({ + conversationId: conversation, + participantUserIds: users + }); + } + + markMessageRead ( + conversation: number, + id: string + ): Promise { + return this.client.apis.chatAPI.markConversationMessagesRead({ + conversationId: conversation, + endMessageId: id + }); + } + + markConversationsRead ( + conversations: number[] + ): Promise { + return this.client.apis.chatAPI.markConversationsSeen({ + conversationsToMarkSeen: conversations + }); + } + + removeUserFromConversation ( + conversation: number, + user: number + ): Promise { + return this.client.apis.chatAPI.removeUserFromConversation({ + conversationId: conversation, + participantUserId: user + }); + } + + renameGroupConversation ( + conversation: number, + name: string + ): Promise { + return this.client.apis.chatAPI.renameGroupConversation({ + conversationId: conversation, + newTitle: name + }); + } + + getUnreadMessagesInConversations ( + conversations: number[], + amount = 100 + ): Promise { + return this.client.apis.chatAPI + .getUnreadMessagesInConversations({ + conversationIds: conversations, + pageSize: amount + }) + .then(response => + Array.prototype.concat.apply( + [], + response.map(conversationData => + conversationData.chatMessages.map( + chatData => new ChatMessage(chatData, this.client) + ) + ) + ) + ); + } + + getLatestMessagesInConversations ( + conversations: number[], + amount = 100 + ): Promise { + return this.client.apis.chatAPI + .getMultiLatestConversationMessages({ + conversationIds: conversations, + pageSize: amount + }) + .then(response => + Array.prototype.concat.apply( + [], + response.map(conversationData => + conversationData.chatMessages.map( + chatData => new ChatMessage(chatData, this.client) + ) + ) + ) + ); + } + + resetConversationUniverse ( + conversation: number + ): Promise { + return this.client.apis.chatAPI.resetConversationUniverse({ + conversationId: conversation + }); + } + + sendGameLinkMessage ( + options: SendGameLinkMessageOptions + ): Promise { + return this.client.apis.chatAPI + .sendGameLinkMessage(options) + .then(response => new ChatMessageSent(response, this.client)); + } + + sendMessage (options: SendMessageOptions): Promise { + return this.client.apis.chatAPI + .sendMessage(options) + .then(response => new ChatMessageSent(response, this.client)); + } + + setConversationUniverse ( + conversation: number, + universe: number + ): Promise { + return this.client.apis.chatAPI.setConversationUniverse({ + conversationId: conversation, + universeId: universe + }); + } + + startCloudEditConversation ( + placeId: number + ): Promise { + return this.client.apis.chatAPI.startCloudEditConversation({ + placeId + }); + } + + startGroupConversation ( + title: string, + users: number[] + ): Promise { + return this.client.apis.chatAPI.startGroupConversation({ + participantUserIds: users, + title + }); + } + + startOneToOneConversation ( + userId: number + ): Promise { + return this.client.apis.chatAPI.startOneToOneConversation({ + participantUserId: userId + }); + } + + updateTypingStatus ( + conversation: number, + isTyping = true + ): Promise { + return this.client.apis.chatAPI.updateUserTypingStatus({ + conversationId: conversation, + isTyping + }); + } } diff --git a/src/client/lib/ClientSocket/ClientSocket.ts b/src/client/lib/ClientSocket/ClientSocket.ts index dac9be591..dae59c0d3 100644 --- a/src/client/lib/ClientSocket/ClientSocket.ts +++ b/src/client/lib/ClientSocket/ClientSocket.ts @@ -7,103 +7,173 @@ import { EventEmitter } from "events"; import { PartialChatConversation } from "../../../structures/Chat"; import { PartialUser } from "../../../structures/User"; - export declare interface Socket extends EventEmitter { - on (event: "chatMessageSent", listener: (data: { conversation: PartialChatConversation }) => void): this; - - on (event: "chatUserTyping", listener: (data: { user: PartialUser; conversation: PartialChatConversation }) => void): this; - - on (event: "chatUserTypingStopped", listener: (data: { user: PartialUser; conversation: PartialChatConversation }) => void): this; - - on (event: "chatMessage", listener: (data: { user: PartialUser; conversation: PartialChatConversation }) => void): this; - - on (event: "chatMessageSent", listener: (data: { user: PartialUser; conversation: PartialChatConversation }) => void): this; - - on (event: "chatConversationAdded", listener: (data: { conversation: PartialChatConversation }) => void): this; - - on (event: "chatConversationRemoved", listener: (data: { conversation: PartialChatConversation }) => void): this; - - on (event: "chatMemberAdded", listener: (data: { conversation: PartialChatConversation }) => void): this; - - on (event: "chatMemberLeft", listener: (data: { conversation: PartialChatConversation }) => void): this; - - on (event: "friendLost", listener: (data: { user: PartialUser }) => void): this; - - on (event: "friendRequest", listener: (data: { user: PartialUser }) => void): this; - - on (event: "friendAdded", listener: (data: { user: PartialUser }) => void): this; - - on (event: "userPresenceChanged", listener: (data: { user: PartialUser }) => void): this; + on( + event: "chatMessageSent", + listener: (data: { conversation: PartialChatConversation }) => void + ): this; + + on( + event: "chatUserTyping", + listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void + ): this; + + on( + event: "chatUserTypingStopped", + listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void + ): this; + + on( + event: "chatMessage", + listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void + ): this; + + on( + event: "chatMessageSent", + listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void + ): this; + + on( + event: "chatConversationAdded", + listener: (data: { conversation: PartialChatConversation }) => void + ): this; + + on( + event: "chatConversationRemoved", + listener: (data: { conversation: PartialChatConversation }) => void + ): this; + + on( + event: "chatMemberAdded", + listener: (data: { conversation: PartialChatConversation }) => void + ): this; + + on( + event: "chatMemberLeft", + listener: (data: { conversation: PartialChatConversation }) => void + ): this; + + on( + event: "friendLost", + listener: (data: { user: PartialUser }) => void + ): this; + + on( + event: "friendRequest", + listener: (data: { user: PartialUser }) => void + ): this; + + on( + event: "friendAdded", + listener: (data: { user: PartialUser }) => void + ): this; + + on( + event: "userPresenceChanged", + listener: (data: { user: PartialUser }) => void + ): this; } - export class Socket extends EventEmitter { - public client: Client; - public socket: any; - public connected: boolean; - - constructor (client: Client) { - super(); - - this.client = client; - this.socket = null; - this.connected = false; - } - - connect (): Promise { - return new Promise((resolve, reject) => { - const connectSocket = (retries = 0): void => { - this.socket = new SignalR.client("wss://realtime.roblox.com/notifications", ["usernotificationhub"], 3, true); - this.socket.headers.Cookie = this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); - const maxRetries = this.client.options.setup?.websocket?.maxRetries ?? 3; - - const attemptReconnect = (): unknown => connectSocket(++retries); - const onError = (error: Error): void => { - this.emit("error", error); - attemptReconnect(); - }; - - if (retries >= maxRetries) { - this.socket.close(); - reject(new Error(`Connection failed, attempted to establish a connection ${retries} times`)); - } - - this.socket.serviceHandlers.connectFailed = (error: Error): unknown => onError(error); - this.socket.serviceHandlers.onerror = (error: Error): unknown => onError(error); - this.socket.serviceHandlers.connected = (): void => { - this.emit("ready"); - this.init(); - resolve(); - }; - this.socket.serviceHandlers.reconnecting = (): void => { - this.emit("reconnecting"); - }; - - // Start the attempt of connection - this.socket.start(); - }; - - connectSocket(); + public client: Client; + public socket: any; + public connected: boolean; + + constructor (client: Client) { + super(); + + this.client = client; + this.socket = null; + this.connected = false; + } + + connect (): Promise { + return new Promise((resolve, reject) => { + const connectSocket = (retries = 0): void => { + this.socket = new SignalR.client( + "wss://realtime.roblox.com/notifications", + ["usernotificationhub"], + 3, + true + ); + this.socket.headers.Cookie = + this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); + const maxRetries = + this.client.options.setup?.websocket?.maxRetries ?? 3; + + const attemptReconnect = (): unknown => connectSocket(++retries); + const onError = (error: Error): void => { + this.emit("error", error); + attemptReconnect(); + }; + + if (retries >= maxRetries) { + this.socket.close(); + reject( + new Error( + `Connection failed, attempted to establish a connection ${retries} times` + ) + ); + } + + this.socket.serviceHandlers.connectFailed = (error: Error): unknown => + onError(error); + this.socket.serviceHandlers.onerror = (error: Error): unknown => + onError(error); + this.socket.serviceHandlers.connected = (): void => { + this.emit("ready"); + this.init(); + resolve(); + }; + this.socket.serviceHandlers.reconnecting = (): void => { + this.emit("reconnecting"); + }; + + // Start the attempt of connection + this.socket.start(); + }; + + connectSocket(); + }); + } + + /** + * This is called after the connection of the socket has successfully been established + */ + init (): void { + this.socket.on( + "UserNotificationHub", + "notification", + (name: string, message: any) => { + this.emit("event", { + name, + message }); - } - - /** - * This is called after the connection of the socket has successfully been established - */ - init (): void { - this.socket.on("UserNotificationHub", "notification", (name: string, message: any) => { - this.emit("event", { - name, - message - }); - - const parsedMessage = !(message instanceof Object) ? JSON.parse(message) : message; - const messageType = parsedMessage.Type ? parsedMessage.Type.toLowerCase() : null; - const socketHandler = socketHandlers.get(name.toLowerCase()); - - if (socketHandler) { - return socketHandler(this, messageType, parsedMessage); - } - }); - } + + const parsedMessage = !(message instanceof Object) ? + JSON.parse(message) : + message; + const messageType = parsedMessage.Type ? + parsedMessage.Type.toLowerCase() : + null; + const socketHandler = socketHandlers.get(name.toLowerCase()); + + if (socketHandler) { + return socketHandler(this, messageType, parsedMessage); + } + } + ); + } } diff --git a/src/client/lib/ClientSocket/handlers/chatNotifications.ts b/src/client/lib/ClientSocket/handlers/chatNotifications.ts index 6643f53e9..723c97a43 100644 --- a/src/client/lib/ClientSocket/handlers/chatNotifications.ts +++ b/src/client/lib/ClientSocket/handlers/chatNotifications.ts @@ -2,62 +2,92 @@ import * as ClientSocket from "../ClientSocket"; import { PartialChatConversation } from "../../../../structures/Chat"; import { PartialUser } from "../../../../structures/User"; - -export default function handleChatNotifications (socket: ClientSocket.Socket, messageType: string, message: any): void { - switch (messageType) { - case "participanttyping": - socket.emit(message.IsTyping ? "chatUserTyping" : "chatUserTypingStopped", { - user: new PartialUser({ - id: message.UserId - }, socket.client), - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - case "newmessage": - socket.emit("chatMessage", { - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - case "newmessagebyself": - socket.emit("chatMessageSent", { - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - case "newconversation": - socket.emit("chatConversationAdded", { - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - case "conversationremoved": - socket.emit("chatConversationRemoved", { - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - case "participantadded": - socket.emit("chatMemberAdded", { - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - case "participantlefet": - socket.emit("chatMemberLeft", { - conversation: new PartialChatConversation({ - id: message.ConversationId - }, socket.client) - }); - break; - default: - break; - } +export default function handleChatNotifications ( + socket: ClientSocket.Socket, + messageType: string, + message: any +): void { + switch (messageType) { + case "participanttyping": + socket.emit( + message.IsTyping ? "chatUserTyping" : "chatUserTypingStopped", + { + user: new PartialUser( + { + id: message.UserId + }, + socket.client + ), + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + } + ); + break; + case "newmessage": + socket.emit("chatMessage", { + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + }); + break; + case "newmessagebyself": + socket.emit("chatMessageSent", { + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + }); + break; + case "newconversation": + socket.emit("chatConversationAdded", { + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + }); + break; + case "conversationremoved": + socket.emit("chatConversationRemoved", { + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + }); + break; + case "participantadded": + socket.emit("chatMemberAdded", { + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + }); + break; + case "participantlefet": + socket.emit("chatMemberLeft", { + conversation: new PartialChatConversation( + { + id: message.ConversationId + }, + socket.client + ) + }); + break; + default: + break; + } } diff --git a/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts b/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts index 120cb3d5b..bfff3bb4d 100644 --- a/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts +++ b/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts @@ -1,31 +1,45 @@ import * as ClientSocket from "../ClientSocket"; import { PartialUser } from "../../../../structures/User"; - -export default function handleFriendshipNotifications (socket: ClientSocket.Socket, messageType: string, message: any): void { - switch (messageType) { - case "friendshipdestroyed": - socket.emit("friendLost", { - user: new PartialUser({ - id: [message.UserId1, message.UserId2].filter(id => id !== socket.client.user!.id)[0]! - }, socket.client) - }); - break; - case "friendshiprequested": - socket.emit("friendRequest", { - user: new PartialUser({ - id: message.UserId1 - }, socket.client) - }); - break; - case "friendshipcreated": - socket.emit("friendAdded", { - user: new PartialUser({ - id: message.UserId1 - }, socket.client) - }); - break; - default: - break; - } +export default function handleFriendshipNotifications ( + socket: ClientSocket.Socket, + messageType: string, + message: any +): void { + switch (messageType) { + case "friendshipdestroyed": + socket.emit("friendLost", { + user: new PartialUser( + { + id: [message.UserId1, message.UserId2].filter( + id => id !== socket.client.user!.id + )[0]! + }, + socket.client + ) + }); + break; + case "friendshiprequested": + socket.emit("friendRequest", { + user: new PartialUser( + { + id: message.UserId1 + }, + socket.client + ) + }); + break; + case "friendshipcreated": + socket.emit("friendAdded", { + user: new PartialUser( + { + id: message.UserId1 + }, + socket.client + ) + }); + break; + default: + break; + } } diff --git a/src/client/lib/ClientSocket/handlers/index.ts b/src/client/lib/ClientSocket/handlers/index.ts index e5a4a8fd4..d440a8374 100644 --- a/src/client/lib/ClientSocket/handlers/index.ts +++ b/src/client/lib/ClientSocket/handlers/index.ts @@ -4,8 +4,10 @@ import handleFriendshipNotifications from "./friendShipnotifications"; import handleMessageNotifications from "./messageNotifications"; import handlePresenceBulkNotifications from "./presenceBulkNotifications"; - -const handlersMap = new Map void>(); +const handlersMap = new Map< +string, +(socket: ClientSocket, messageType: string, message: unknown) => void +>(); handlersMap.set("chatnotifications", handleChatNotifications); handlersMap.set("friendshipnotifications", handleFriendshipNotifications); diff --git a/src/client/lib/ClientSocket/handlers/messageNotifications.ts b/src/client/lib/ClientSocket/handlers/messageNotifications.ts index 2e46ed063..a2f376e09 100644 --- a/src/client/lib/ClientSocket/handlers/messageNotifications.ts +++ b/src/client/lib/ClientSocket/handlers/messageNotifications.ts @@ -1,34 +1,37 @@ import { Socket as ClientSocket } from "../ClientSocket"; - -export default function handleChatNotifications (socket: ClientSocket, messageType: string, message: any): void { - switch (messageType) { - case "created": - socket.emit("message", { - messageId: message.MessageId - }); - break; - case "markasread": - socket.emit("messageRead", { - messageId: message.MessageId - }); - break; - case "markasunread": - socket.emit("messageUnread", { - messageId: message.MessageId - }); - break; - case "archived": - socket.emit("messageArchived", { - messageId: message.MessageId - }); - break; - case "unarchived": - socket.emit("messageUnarchived", { - messageId: message.MessageId - }); - break; - default: - break; - } +export default function handleChatNotifications ( + socket: ClientSocket, + messageType: string, + message: any +): void { + switch (messageType) { + case "created": + socket.emit("message", { + messageId: message.MessageId + }); + break; + case "markasread": + socket.emit("messageRead", { + messageId: message.MessageId + }); + break; + case "markasunread": + socket.emit("messageUnread", { + messageId: message.MessageId + }); + break; + case "archived": + socket.emit("messageArchived", { + messageId: message.MessageId + }); + break; + case "unarchived": + socket.emit("messageUnarchived", { + messageId: message.MessageId + }); + break; + default: + break; + } } diff --git a/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts b/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts index 189d9115e..09f60a0ff 100644 --- a/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts +++ b/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts @@ -1,15 +1,24 @@ import { Socket as ClientSocket } from "../ClientSocket"; import { PartialUser } from "../../../../structures/User"; +export default function handlePresenceBulkNotifications ( + socket: ClientSocket, + _messageType: string, + message: any +): void { + if (!Array.isArray(message)) { + throw new Error("Presence bulk notification message was not an array"); + } -export default function handlePresenceBulkNotifications (socket: ClientSocket, _messageType: string, message: any): void { - if (!Array.isArray(message)) { - throw new Error("Presence bulk notification message was not an array"); - } - - message.forEach(presenceUpdated => { - socket.emit("userPresenceChanged", new PartialUser({ - id: presenceUpdated.UserId - }, socket.client)); - }); + message.forEach(presenceUpdated => { + socket.emit( + "userPresenceChanged", + new PartialUser( + { + id: presenceUpdated.UserId + }, + socket.client + ) + ); + }); } diff --git a/src/client/lib/DataStoreManager/DataStoreManager.ts b/src/client/lib/DataStoreManager/DataStoreManager.ts index b1a434b45..787286da3 100644 --- a/src/client/lib/DataStoreManager/DataStoreManager.ts +++ b/src/client/lib/DataStoreManager/DataStoreManager.ts @@ -2,39 +2,26 @@ import Client from "../../Client"; import OrderedDataStore from "./structures/OrderedDataStore"; import GlobalDataStore from "./structures/GlobalDataStore"; - export default class DataStoreManager { - public client: Client; - - constructor (client: Client) { - this.client = client; - } + public client: Client; - getOrderedDataStore (placeId: number, name: string, scope?: string) { - if (!this.client.isLoggedIn()) { - throw new Error(`You must be logged in to be able to use data stores!`); - } + constructor (client: Client) { + this.client = client; + } - return new OrderedDataStore( - this, - placeId, - name, - scope, - false - ); + getOrderedDataStore (placeId: number, name: string, scope?: string) { + if (!this.client.isLoggedIn()) { + throw new Error(`You must be logged in to be able to use data stores!`); } - getDataStore (placeId: number, name: string, scope?: string) { - if (!this.client.isLoggedIn()) { - throw new Error(`You must be logged in to be able to use data stores!`); - } + return new OrderedDataStore(this, placeId, name, scope, false); + } - return new GlobalDataStore( - this, - placeId, - name, - scope, - false - ); + getDataStore (placeId: number, name: string, scope?: string) { + if (!this.client.isLoggedIn()) { + throw new Error(`You must be logged in to be able to use data stores!`); } + + return new GlobalDataStore(this, placeId, name, scope, false); + } } diff --git a/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts b/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts index 2cc442008..4a26c2002 100644 --- a/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts +++ b/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts @@ -1,38 +1,41 @@ import DataStoreManager from "../DataStoreManager"; -import { RESTRequestOptions, RESTResponseDataType } from "../../../../interfaces/RESTInterfaces"; +import { + RESTRequestOptions, + RESTResponseDataType +} from "../../../../interfaces/RESTInterfaces"; import { DataStoreRequestType } from "../util/constants"; - type DataStoreHttpRequestOptions = RESTRequestOptions & { - placeId: number; - requestType: DataStoreRequestType; - data: string; + placeId: number; + requestType: DataStoreRequestType; + data: string; }; export default class DataStoreHttpRequest { - public initiator: DataStoreManager; - public options: DataStoreHttpRequestOptions; + public initiator: DataStoreManager; + public options: DataStoreHttpRequestOptions; - constructor (manager: DataStoreManager, options: DataStoreHttpRequestOptions) { - this.initiator = manager; - this.options = options; + constructor (manager: DataStoreManager, options: DataStoreHttpRequestOptions) { + this.initiator = manager; + this.options = options; - // Adjusting the body - this.options.body = this.options.data.length === 0 ? " " : this.options.data; + // Adjusting the body + this.options.body = + this.options.data.length === 0 ? " " : this.options.data; - // Always POST - this.options.method = this.options.method || "POST"; - this.options.headers = this.options.headers || {}; - this.options.headers = { - ...this.options.headers, - "Cache-Control": "no-cache", - "Content-Type": "application/x-www-form-urlencoded", - "Roblox-Place-Id": this.options.placeId, - Cookie: this.initiator.client.rest.getCookies("https://www.roblox.com/") - }; - } + // Always POST + this.options.method = this.options.method || "POST"; + this.options.headers = this.options.headers || {}; + this.options.headers = { + ...this.options.headers, + "Cache-Control": "no-cache", + "Content-Type": "application/x-www-form-urlencoded", + "Roblox-Place-Id": this.options.placeId, + Cookie: this.initiator.client.rest.getCookies("https://www.roblox.com/") + }; + } - send (): Promise { - return this.initiator.client.rest.request(this.options); - } + send (): Promise { + return this.initiator.client.rest.request(this.options); + } } diff --git a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts index ecc334cfc..ac12ca01c 100644 --- a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts @@ -2,298 +2,331 @@ import * as querystring from "querystring"; import DataStoreManager from "../DataStoreManager"; import DataStoreHttpRequest from "./DataStoreHttpRequest"; import { DataStoreRequestType } from "../util/constants"; -import { checkKey, checkName, checkPlaceId, checkScope, checkValue } from "../util/checks"; +import { + checkKey, + checkName, + checkPlaceId, + checkScope, + checkValue +} from "../util/checks"; import { RESTResponseDataType } from "../../../../interfaces/RESTInterfaces"; - type DataStoreType = "OrderedDataStore" | "GlobalDataStore"; type DataStoreKey = { - Scope: "global" | string; - Target: string; - Key: string; + Scope: "global" | string; + Target: string; + Key: string; }; type DataStoreValue = string; export default class GenericDataStore { - public manager: DataStoreManager; - public name: string; - public scope: string; - public legacy: boolean; - public baseAPIUrl: string; - public placeId: number; - public dataStoreType: DataStoreType; - public advanced: { - parseData?: (data: string) => DataType; - serializeData?: (data: DataType) => string; - }; - - constructor (manager: DataStoreManager, dataStoreType: DataStoreType, placeId: number, name: string, scope: string | null, legacy = false) { - this.manager = manager; - this.dataStoreType = dataStoreType; - this.placeId = placeId; - this.name = name; - this.scope = scope || "global"; - this.legacy = legacy; - this.baseAPIUrl = "https://gamepersistence.roblox.com/persistence/"; - this.advanced = {}; - - // Making sure we started off properly by checking all the set values - this.performPreflightChecks({}); - } - - /** - * When data is retrieved from data stores, it will be returned unmodified - * Using your own data converter will allow you to return it if you handle your data in a special way, such as - * JSON parsing it etc. - * @param {(data: string) => DataType} parseDataFunction - * @param {(data: DataType) => string} serializeDataFunction - */ - public setDataConverters (parseDataFunction: (data: string) => DataType, serializeDataFunction: (data: DataType) => string): void { - this.advanced.parseData = parseDataFunction; - this.advanced.serializeData = serializeDataFunction; - } - - buildPostDataForKey (key: string, index = 0): string { - const encodedQueryString = querystring.encode({ - [`qkeys[${index}].scope`]: this.scope ? this.safeEncodeValue(this.scope) : "", - [`qkeys[${index}].target`]: this.legacy ? "" : this.safeEncodeValue(key), - [`qkeys[${index}].key`]: this.legacy ? this.safeEncodeValue(key) : this.safeEncodeValue(this.name) - }); - - return `&${encodedQueryString}`; - } - - buildGetUrl (): string { - const encodedQueryString = this.createQueryString({}); - - return `${this.baseAPIUrl}getV2?${encodedQueryString}`; - } - - buildSetUrl (key: string, valueLength: number): string { - const encodedQueryString = this.createQueryString({ - key: this.legacy ? this.safeEncodeValue(key) : this.safeEncodeValue(this.name), - target: this.legacy ? "" : this.safeEncodeValue(key), - valueLength - }); - - return `${this.baseAPIUrl}set?${encodedQueryString}`; - } - - buildSetIfUrl (key: string, valueLength: number, expectedValueLength: number): string { - const encodedQueryString = this.createQueryString({ - key: this.legacy ? this.safeEncodeValue(key) : this.safeEncodeValue(this.name), - target: this.legacy ? "" : this.safeEncodeValue(key), - valueLength, - expectedValueLength - }); - - return `${this.baseAPIUrl}set?${encodedQueryString}`; + public manager: DataStoreManager; + public name: string; + public scope: string; + public legacy: boolean; + public baseAPIUrl: string; + public placeId: number; + public dataStoreType: DataStoreType; + public advanced: { + parseData?: (data: string) => DataType; + serializeData?: (data: DataType) => string; + }; + + constructor ( + manager: DataStoreManager, + dataStoreType: DataStoreType, + placeId: number, + name: string, + scope: string | null, + legacy = false + ) { + this.manager = manager; + this.dataStoreType = dataStoreType; + this.placeId = placeId; + this.name = name; + this.scope = scope || "global"; + this.legacy = legacy; + this.baseAPIUrl = "https://gamepersistence.roblox.com/persistence/"; + this.advanced = {}; + + // Making sure we started off properly by checking all the set values + this.performPreflightChecks({}); + } + + /** + * When data is retrieved from data stores, it will be returned unmodified + * Using your own data converter will allow you to return it if you handle your data in a special way, such as + * JSON parsing it etc. + * @param {(data: string) => DataType} parseDataFunction + * @param {(data: DataType) => string} serializeDataFunction + */ + public setDataConverters ( + parseDataFunction: (data: string) => DataType, + serializeDataFunction: (data: DataType) => string + ): void { + this.advanced.parseData = parseDataFunction; + this.advanced.serializeData = serializeDataFunction; + } + + buildPostDataForKey (key: string, index = 0): string { + const encodedQueryString = querystring.encode({ + [`qkeys[${index}].scope`]: this.scope ? + this.safeEncodeValue(this.scope) : + "", + [`qkeys[${index}].target`]: this.legacy ? "" : this.safeEncodeValue(key), + [`qkeys[${index}].key`]: this.legacy ? + this.safeEncodeValue(key) : + this.safeEncodeValue(this.name) + }); + + return `&${encodedQueryString}`; + } + + buildGetUrl (): string { + const encodedQueryString = this.createQueryString({}); + + return `${this.baseAPIUrl}getV2?${encodedQueryString}`; + } + + buildSetUrl (key: string, valueLength: number): string { + const encodedQueryString = this.createQueryString({ + key: this.legacy ? + this.safeEncodeValue(key) : + this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key), + valueLength + }); + + return `${this.baseAPIUrl}set?${encodedQueryString}`; + } + + buildSetIfUrl ( + key: string, + valueLength: number, + expectedValueLength: number + ): string { + const encodedQueryString = this.createQueryString({ + key: this.legacy ? + this.safeEncodeValue(key) : + this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key), + valueLength, + expectedValueLength + }); + + return `${this.baseAPIUrl}set?${encodedQueryString}`; + } + + buildIncrementUrl (key: string, delta: number): string { + const encodedQueryString = this.createQueryString({ + key: this.legacy ? + this.safeEncodeValue(key) : + this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key), + value: delta + }); + + return `${this.baseAPIUrl}increment?${encodedQueryString}`; + } + + buildRemoveUrl (key: string): string { + const encodedQueryString = this.createQueryString({ + key: this.legacy ? + this.safeEncodeValue(key) : + this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key) + }); + + return `${this.baseAPIUrl}increment?${encodedQueryString}`; + } + + public parseRetrievedData (data: string): [boolean, Result | any] { + let result = ""; + + if (data.length === 0) { + return [true, result]; } - buildIncrementUrl (key: string, delta: number): string { - const encodedQueryString = this.createQueryString({ - key: this.legacy ? this.safeEncodeValue(key) : this.safeEncodeValue(this.name), - target: this.legacy ? "" : this.safeEncodeValue(key), - value: delta - }); - - return `${this.baseAPIUrl}increment?${encodedQueryString}`; + try { + result = JSON.parse(data); + } catch { + return [false, result]; } - buildRemoveUrl (key: string): string { - const encodedQueryString = this.createQueryString({ - key: this.legacy ? this.safeEncodeValue(key) : this.safeEncodeValue(this.name), - target: this.legacy ? "" : this.safeEncodeValue(key) - }); - - return `${this.baseAPIUrl}increment?${encodedQueryString}`; + return [true, result]; + } + + /** + * Retrieves the value associated with the key (if any), otherwise returns null. + * Equivalent of DataStoreService:GetDataStore("name"):GetAsync("key"); + * @param {string} key + * @returns {Promise} + */ + public async getAsync (key: string): Promise { + this.performPreflightChecks({ + key + }); + + const createdRequest = new DataStoreHttpRequest(this.manager, { + url: this.buildGetUrl(), + placeId: this.placeId, + data: this.buildPostDataForKey(key), + requestType: DataStoreRequestType.GET_ASYNC + }); + + const response = await createdRequest.send(); + const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData<{ + data: { + Key: DataStoreKey; + Value: DataStoreValue; + }[]; + }>(response.body); + + if (!parsedResponseSuccess || !parsedResponse) { + throw new Error(`Failed to parse response from data stores!`); } - public parseRetrievedData (data: string): [boolean, Result | any] { - let result = ""; - - if (data.length === 0) { - return [true, result]; - } - - try { - result = JSON.parse(data); - } catch { - return [false, result]; - } - - return [true, result]; + if (parsedResponse.data && parsedResponse.data.length > 0) { + // Sending the returned data for internal processing + return this.parseIncomingData(parsedResponse.data[0].Value); + } else { + return null; } - - /** - * Retrieves the value associated with the key (if any), otherwise returns null. - * Equivalent of DataStoreService:GetDataStore("name"):GetAsync("key"); - * @param {string} key - * @returns {Promise} - */ - public async getAsync (key: string): Promise { - this.performPreflightChecks({ - key - }); - - const createdRequest = new DataStoreHttpRequest(this.manager, { - url: this.buildGetUrl(), - placeId: this.placeId, - data: this.buildPostDataForKey(key), - requestType: DataStoreRequestType.GET_ASYNC - }); - - const response = await createdRequest.send(); - const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData<{ - data: { - Key: DataStoreKey; - Value: DataStoreValue; - }[]; - }>(response.body); - - if (!parsedResponseSuccess || !parsedResponse) { - throw new Error(`Failed to parse response from data stores!`); - } - - if (parsedResponse.data && parsedResponse.data.length > 0) { - // Sending the returned data for internal processing - return this.parseIncomingData(parsedResponse.data[0].Value); - } else { - return null; - } - } - - /** - * Sets a value in data stores to the given key. - * Equivalent of DataStoreService:GetDataStore("name"):SetAsync("key", "value") - * @param {string} key - * @param {DataType} value - * @returns {Promise} - */ - public async setAsync (key: string, value: DataType): Promise { - const serializedValue = this.serializeOutgoingData(value); - this.performPreflightChecks({ - key, - value: serializedValue - }); - const createdRequest = new DataStoreHttpRequest(this.manager, { - url: this.buildSetUrl(key, serializedValue.length), - placeId: this.placeId, - data: `value=${this.safeEncodeValue(serializedValue)}`, - requestType: DataStoreRequestType.SET_ASYNC - }); - - const response = await createdRequest.send(); - const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData<{ data: string }>(response.body); - - if (!parsedResponseSuccess || !parsedResponse) { - throw new Error(`Failed to parse response!`); - } - - return this.parseIncomingData(parsedResponse.data as string); + } + + /** + * Sets a value in data stores to the given key. + * Equivalent of DataStoreService:GetDataStore("name"):SetAsync("key", "value") + * @param {string} key + * @param {DataType} value + * @returns {Promise} + */ + public async setAsync (key: string, value: DataType): Promise { + const serializedValue = this.serializeOutgoingData(value); + this.performPreflightChecks({ + key, + value: serializedValue + }); + const createdRequest = new DataStoreHttpRequest(this.manager, { + url: this.buildSetUrl(key, serializedValue.length), + placeId: this.placeId, + data: `value=${this.safeEncodeValue(serializedValue)}`, + requestType: DataStoreRequestType.SET_ASYNC + }); + + const response = await createdRequest.send(); + const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData<{ + data: string; + }>(response.body); + + if (!parsedResponseSuccess || !parsedResponse) { + throw new Error(`Failed to parse response!`); } - public incrementAsync (key: string, delta = 1): Promise { - this.performPreflightChecks({ - key - }); - const createdRequest = new DataStoreHttpRequest(this.manager, { - url: this.buildIncrementUrl(key, delta), - placeId: this.placeId, - data: "", - requestType: DataStoreRequestType.INCREMENT_ASYNC - }); - - return createdRequest.send(); + return this.parseIncomingData(parsedResponse.data as string); + } + + public incrementAsync (key: string, delta = 1): Promise { + this.performPreflightChecks({ + key + }); + const createdRequest = new DataStoreHttpRequest(this.manager, { + url: this.buildIncrementUrl(key, delta), + placeId: this.placeId, + data: "", + requestType: DataStoreRequestType.INCREMENT_ASYNC + }); + + return createdRequest.send(); + } + + public removeAsync (key: string): Promise { + this.performPreflightChecks({ + key + }); + const createdRequest = new DataStoreHttpRequest(this.manager, { + url: this.buildRemoveUrl(key), + placeId: this.placeId, + data: "", + requestType: DataStoreRequestType.SET_ASYNC + }); + + return createdRequest.send(); + } + + public createQueryString (addition: Record) { + return querystring.encode({ + placeId: this.placeId, + type: this.dataStoreType === "GlobalDataStore" ? "standard" : "sorted", + scope: this.safeEncodeValue(this.scope), + ...addition + }); + } + + /** + * This will (possibly) use a custom provided converter function that turns string into DataType. + * @param {string} data + * @returns {DataType} + * @private + */ + parseIncomingData (data: string): DataType { + if (this.advanced.parseData) { + return this.advanced.parseData(data); + } else { + return data as unknown as DataType; } - - public removeAsync (key: string): Promise { - this.performPreflightChecks({ - key - }); - const createdRequest = new DataStoreHttpRequest(this.manager, { - url: this.buildRemoveUrl(key), - placeId: this.placeId, - data: "", - requestType: DataStoreRequestType.SET_ASYNC - }); - - return createdRequest.send(); + } + + /** + * This will (possibly) use a custom provided converter function that turns DataType into string so it can be saved + * to data stores + * @param {DataType} data + * @returns {string} + * @private + */ + serializeOutgoingData (data: DataType): string { + let serializedStage1: string | DataType = ""; + + if (this.advanced.serializeData) { + serializedStage1 = this.advanced.serializeData(data); + } else { + serializedStage1 = data; } - public createQueryString (addition: Record) { - return querystring.encode({ - placeId: this.placeId, - type: this.dataStoreType === "GlobalDataStore" ? "standard" : "sorted", - scope: this.safeEncodeValue(this.scope), - ...addition - }); - } + let serializedFinal: string | null = ""; - /** - * This will (possibly) use a custom provided converter function that turns string into DataType. - * @param {string} data - * @returns {DataType} - * @private - */ - parseIncomingData (data: string): DataType { - if (this.advanced.parseData) { - return this.advanced.parseData(data); - } else { - return (data as unknown) as DataType; - } + try { + serializedFinal = JSON.stringify(serializedStage1); + } catch { + serializedFinal = null; } - /** - * This will (possibly) use a custom provided converter function that turns DataType into string so it can be saved - * to data stores - * @param {DataType} data - * @returns {string} - * @private - */ - serializeOutgoingData (data: DataType): string { - let serializedStage1: string | DataType = ""; - - if (this.advanced.serializeData) { - serializedStage1 = this.advanced.serializeData(data); - } else { - serializedStage1 = data; - } - - let serializedFinal: string | null = ""; - - try { - serializedFinal = JSON.stringify(serializedStage1); - } catch { - serializedFinal = null; - } - - if (!serializedFinal) { - throw new Error(`Failed to serialize the data using JSON.stringify`); - } - - return serializedFinal; + if (!serializedFinal) { + throw new Error(`Failed to serialize the data using JSON.stringify`); } - safeEncodeValue (input: string) { - return encodeURIComponent(input); + return serializedFinal; + } + + safeEncodeValue (input: string) { + return encodeURIComponent(input); + } + + /** + * Performs various checks before sending any requests to make sure the requests are valid before sent + * @param {{key?: string, value?: DataType}} options + * @private + */ + performPreflightChecks (options: { key?: string; value?: string }) { + checkScope(this.scope); + checkName(this.name); + checkPlaceId(this.placeId); + + if (options.key !== undefined) { + checkKey(options.key); } - - /** - * Performs various checks before sending any requests to make sure the requests are valid before sent - * @param {{key?: string, value?: DataType}} options - * @private - */ - performPreflightChecks (options: { key?: string; value?: string }) { - checkScope(this.scope); - checkName(this.name); - checkPlaceId(this.placeId); - - if (options.key !== undefined) { - checkKey(options.key); - } - if (options.value !== undefined) { - checkValue(options.value); - } + if (options.value !== undefined) { + checkValue(options.value); } + } } diff --git a/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts b/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts index 8b1149cfb..42c7980f5 100644 --- a/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts @@ -1,9 +1,23 @@ import GenericDataStore from "./GenericDataStore"; import DataStoreManager from "../DataStoreManager"; - -export default class GlobalDataStore extends GenericDataStore { - constructor (manager: DataStoreManager, placeId: number, name: string, scope?: string, legacy?: boolean) { - super(manager, "GlobalDataStore", placeId, name, scope || null, legacy || false); - } +export default class GlobalDataStore< + DataType +> extends GenericDataStore { + constructor ( + manager: DataStoreManager, + placeId: number, + name: string, + scope?: string, + legacy?: boolean + ) { + super( + manager, + "GlobalDataStore", + placeId, + name, + scope || null, + legacy || false + ); + } } diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts index 465894708..ca1c877ee 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts @@ -1,65 +1,87 @@ import GenericDataStore from "./GenericDataStore"; import DataStoreManager from "../DataStoreManager"; import DataStoreHttpRequest from "./DataStoreHttpRequest"; -import DataStoreManagerConstants, { DataStoreRequestType } from "../util/constants"; +import DataStoreManagerConstants, { + DataStoreRequestType +} from "../util/constants"; import OrderedDataStorePage from "./OrderedDataStorePage"; - export type GetSortedUrlOptions = { - ascending?: boolean; - pageSize?: number; - minValue?: number; - maxValue?: number; - startKey?: string; + ascending?: boolean; + pageSize?: number; + minValue?: number; + maxValue?: number; + startKey?: string; }; export type OrderedDataStoreResultType = { - data: { - Entries: { - Target: string; - Value: number; - }[]; - ExclusiveStartKey: string | null; - } + data: { + Entries: { + Target: string; + Value: number; + }[]; + ExclusiveStartKey: string | null; + }; }; -export default class OrderedDataStore extends GenericDataStore { - constructor (manager: DataStoreManager, placeId: number, name: string, scope?: string, legacy?: boolean) { - super(manager, "OrderedDataStore", placeId, name, scope || null, legacy || false); - } - - public async getSortedAsync (options: GetSortedUrlOptions): Promise> { - this.performPreflightChecks({}); - const createdRequest = new DataStoreHttpRequest(this.manager, { - url: this.buildGetSortedUrl(options), - placeId: this.placeId, - data: "", - requestType: DataStoreRequestType.GET_SORTED_ASYNC_PAGE - }); +export default class OrderedDataStore< + DataType +> extends GenericDataStore { + constructor ( + manager: DataStoreManager, + placeId: number, + name: string, + scope?: string, + legacy?: boolean + ) { + super( + manager, + "OrderedDataStore", + placeId, + name, + scope || null, + legacy || false + ); + } - const response = await createdRequest.send(); + public async getSortedAsync ( + options: GetSortedUrlOptions + ): Promise> { + this.performPreflightChecks({}); + const createdRequest = new DataStoreHttpRequest(this.manager, { + url: this.buildGetSortedUrl(options), + placeId: this.placeId, + data: "", + requestType: DataStoreRequestType.GET_SORTED_ASYNC_PAGE + }); - const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData(response.body); + const response = await createdRequest.send(); - if (!parsedResponseSuccess) { - throw new Error(`Failed to parse response!`); - } + const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData( + response.body + ); - return new OrderedDataStorePage(this, { - options, - result: parsedResponse - }); + if (!parsedResponseSuccess) { + throw new Error(`Failed to parse response!`); } - private buildGetSortedUrl (options: GetSortedUrlOptions) { - const encodedQueryString = this.createQueryString({ - key: this.safeEncodeValue(this.name), - pageSize: options.pageSize || DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, - ascending: options.ascending ? "True" : "False", - inclusiveMinValue: options.minValue, - inclusiveMaxValue: options.maxValue, - exclusiveStartKey: options.startKey - }); + return new OrderedDataStorePage(this, { + options, + result: parsedResponse + }); + } - return `${this.baseAPIUrl}getSortedValues?${encodedQueryString}`; - } + private buildGetSortedUrl (options: GetSortedUrlOptions) { + const encodedQueryString = this.createQueryString({ + key: this.safeEncodeValue(this.name), + pageSize: + options.pageSize || + DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, + ascending: options.ascending ? "True" : "False", + inclusiveMinValue: options.minValue, + inclusiveMaxValue: options.maxValue, + exclusiveStartKey: options.startKey + }); + + return `${this.baseAPIUrl}getSortedValues?${encodedQueryString}`; + } } diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts index 87d20b95e..aa6c8475a 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts @@ -1,30 +1,35 @@ -import OrderedDataStore, { GetSortedUrlOptions, OrderedDataStoreResultType } from "./OrderedDataStore"; - +import OrderedDataStore, { + GetSortedUrlOptions, + OrderedDataStoreResultType +} from "./OrderedDataStore"; export default class OrderedDataStorePage { - public orderedDataStore: OrderedDataStore; - public options: GetSortedUrlOptions; - public data: { key: string; value: number }[]; - public startKey: string | null; - - constructor (orderedDataStore: OrderedDataStore, data: { options: GetSortedUrlOptions; result: OrderedDataStoreResultType }) { - this.orderedDataStore = orderedDataStore; - this.options = data.options; - this.data = data.result.data.Entries.map(x => ({ - key: x.Target, - value: x.Value - })); - this.startKey = data.result.data.ExclusiveStartKey; - } + public orderedDataStore: OrderedDataStore; + public options: GetSortedUrlOptions; + public data: { key: string; value: number }[]; + public startKey: string | null; - fetchNextPage (): Promise> { - if (!this.startKey) { - throw new Error(`There is no next page!`); - } + constructor ( + orderedDataStore: OrderedDataStore, + data: { options: GetSortedUrlOptions; result: OrderedDataStoreResultType } + ) { + this.orderedDataStore = orderedDataStore; + this.options = data.options; + this.data = data.result.data.Entries.map(x => ({ + key: x.Target, + value: x.Value + })); + this.startKey = data.result.data.ExclusiveStartKey; + } - return this.orderedDataStore.getSortedAsync({ - ...this.options, - startKey: this.startKey - }); + fetchNextPage (): Promise> { + if (!this.startKey) { + throw new Error(`There is no next page!`); } + + return this.orderedDataStore.getSortedAsync({ + ...this.options, + startKey: this.startKey + }); + } } diff --git a/src/client/lib/DataStoreManager/util/checks.ts b/src/client/lib/DataStoreManager/util/checks.ts index e3bea1124..5c4fd3ae3 100644 --- a/src/client/lib/DataStoreManager/util/checks.ts +++ b/src/client/lib/DataStoreManager/util/checks.ts @@ -1,42 +1,61 @@ import DataStoreManagerConstants from "./constants"; - export function checkKey (key: string): boolean { - if (key.length === 0 || key.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit) { - throw new Error(`Key cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!`); - } - - return true; + if ( + key.length === 0 || + key.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + ) { + throw new Error( + `Key cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` + ); + } + + return true; } export function checkPlaceId (placeId: number): boolean { - if (placeId < 1) { - throw new Error(`Place ID must be greater than 1`); - } + if (placeId < 1) { + throw new Error(`Place ID must be greater than 1`); + } - return true; + return true; } export function checkName (name: string): boolean { - if (name.length === 0 || name.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit) { - throw new Error(`DataStore name cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!`); - } - - return true; + if ( + name.length === 0 || + name.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + ) { + throw new Error( + `DataStore name cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` + ); + } + + return true; } export function checkScope (scope: string): boolean { - if (scope.length === 0 || scope.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit) { - throw new Error(`DataStore scope cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!`); - } - - return true; + if ( + scope.length === 0 || + scope.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + ) { + throw new Error( + `DataStore scope cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` + ); + } + + return true; } export function checkValue (value: string): boolean { - if (value.length === 0 || value.length > DataStoreManagerConstants.DFInt.DataStoreMaxValueSize) { - throw new Error(`DataStore values cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreMaxValueSize} characters!`); - } - - return true; + if ( + value.length === 0 || + value.length > DataStoreManagerConstants.DFInt.DataStoreMaxValueSize + ) { + throw new Error( + `DataStore values cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreMaxValueSize} characters!` + ); + } + + return true; } diff --git a/src/client/lib/DataStoreManager/util/constants.ts b/src/client/lib/DataStoreManager/util/constants.ts index 7a9b72ed5..0ce749f1a 100644 --- a/src/client/lib/DataStoreManager/util/constants.ts +++ b/src/client/lib/DataStoreManager/util/constants.ts @@ -1,23 +1,22 @@ export enum DataStoreRequestType { - GET_ASYNC = 5, - UPDATE_ASYNC = 6, - SET_ASYNC = 7, - INCREMENT_ASYNC = 8, - GET_SORTED_ASYNC_PAGE = 9 + GET_ASYNC = 5, + UPDATE_ASYNC = 6, + SET_ASYNC = 7, + INCREMENT_ASYNC = 8, + GET_SORTED_ASYNC_PAGE = 9 } - const DataStoreManagerConstants = { - DFFlag: { - UseNewDataStoreRequestSetTimestampBehaviour: false, - GetGlobalDataStorePcallFix: false, - UseUnstableDevGetAsyncUrl: false - }, - DFInt: { - DataStoreMaxValueSize: 64 * 1024, - DataStoreMaxPageSize: 100, - DataStoreKeyLengthLimit: 50 - } + DFFlag: { + UseNewDataStoreRequestSetTimestampBehaviour: false, + GetGlobalDataStorePcallFix: false, + UseUnstableDevGetAsyncUrl: false + }, + DFInt: { + DataStoreMaxValueSize: 64 * 1024, + DataStoreMaxPageSize: 100, + DataStoreKeyLengthLimit: 50 + } }; export default DataStoreManagerConstants; diff --git a/src/controllers/index.ts b/src/controllers/index.ts index c7a7cefcc..f0adbf8e2 100644 --- a/src/controllers/index.ts +++ b/src/controllers/index.ts @@ -1,8 +1,7 @@ import rest from "./rest"; - const controllers = { - rest + rest }; export default controllers; diff --git a/src/controllers/rest/RESTController.ts b/src/controllers/rest/RESTController.ts index 7f08cabde..5feb9d3d5 100644 --- a/src/controllers/rest/RESTController.ts +++ b/src/controllers/rest/RESTController.ts @@ -1,15 +1,15 @@ import Client from "../../client/Client"; import { Cookie, CookieJar } from "tough-cookie"; import { - DefaultCreateCookieOptions, - DefaultRESTControllerOptions, - RESTControllerOptions, - RESTCreateCookieOptions, - RESTRequester, - RESTRequestHandler, - RESTRequestOptions, - RESTResponseDataType, - RESTResponseHandler + DefaultCreateCookieOptions, + DefaultRESTControllerOptions, + RESTControllerOptions, + RESTCreateCookieOptions, + RESTRequester, + RESTRequestHandler, + RESTRequestOptions, + RESTResponseDataType, + RESTResponseHandler } from "../../interfaces/RESTInterfaces"; import updateXCSRFToken from "./lib/updateXCSRFToken"; import RESTRequest from "./request"; @@ -17,218 +17,226 @@ import responseHandlers from "./response/handlers"; import getRequester from "./lib/getRequester"; import { utilMergeDeep } from "../../util/utilFunctions"; - class RESTController { - public client: Client; - public options: RESTControllerOptions; - public requester: RESTRequester; - public cookieJar: CookieJar; - public responseHandlers: RESTResponseHandler[]; - public requestHandlers: RESTRequestHandler[]; - - - constructor (client: Client, options?: RESTControllerOptions) { - /** - * The client - */ - this.client = client; - /** - * The options for this RESTController - */ - this.options = this.setOptions(options || this.client.options.rest); - /** - * The cookie jar - */ - this.cookieJar = new CookieJar(); - /** - * Functions to go through to validate / modify the response - */ - this.responseHandlers = [ - ...responseHandlers - ]; - /** - * Functions to go through to modify the request - */ - this.requestHandlers = []; - /** - * The function that's being used to perform the requests, can be modified - */ - this.requester = getRequester(this, this.options.requester || undefined) as RESTRequester; - } - - /** - * Sends a request - * @param {RequestOptions} options The options - * @returns {Promise} - */ - request (options: RESTRequestOptions): Promise { - const request = new RESTRequest(this, options); - - return request.send(); - } - - /** - * Fetches a new XCSRF token - */ - - fetchXCSRFToken (): Promise { - return updateXCSRFToken(this) - .then(xcsrfToken => { - this.setXCSRFToken(xcsrfToken); - return xcsrfToken; - }); - } - - /** - * Sets the XCSRF token - * @param {string} token The xcsrf token to use in future requets - */ - setXCSRFToken (token: string): void { - this.options.xcsrf = token; - this.options.xcsrfSet = Date.now(); - } - - /** - * Gets the existing XCSRF token if it's not older than set refresh interval, - * otherwise, fetch a new one - */ - async getXCSRFToken (): Promise { - if (!this.options.xcsrf || (Date.now() - (this.options.xcsrfSet || 0)) >= (this.options.xcsrfRefreshInterval || DefaultRESTControllerOptions.xcsrfRefreshInterval)) { - // Refresh token - await this.fetchXCSRFToken() - .then(token => { - this.setXCSRFToken(token); - }); - } - - return this.options.xcsrf; - } - - /** - * Creates a new cookie and returns it, no side effects - * @param {RESTCreateCookieOptions} cookieOptions The options to use - * @returns {Cookie} - */ - createCookie (cookieOptions: RESTCreateCookieOptions): Cookie { - return new Cookie({ - ...DefaultCreateCookieOptions, - ...cookieOptions - }); - } - - /** - * Adds a cookie to the cookie jar - * @param {Cookie} cookie The cookie to add - * @param {?string} domain The domain to add it for - * @param {Object} setCookieOptions Options for setting the cookie - * @returns {Cookie} - */ - addCookie (cookie: Cookie, domain?: string, setCookieOptions?: any): Cookie { - return this.cookieJar.setCookieSync(cookie, domain || "https://roblox.com", setCookieOptions || {}); - } - - /** - * Gets the cookies for a given domain stored in the jar - * @param {string} domain The domain to retrieve the cookies for - * @returns {Cookie[]} - */ - getCookies (domain: string): Cookie[] { - return this.cookieJar.getCookiesSync(domain); - } - - /** - * Adds a response handler - * @param {Function} handler The response handler - */ - addResponseHandler (handler: RESTResponseHandler): void { - this.responseHandlers.push(handler); - } - - /** - * Adds a request handler - * @param {Function} handler The request handler - */ - addRequestHandler (handler: RESTRequestHandler): void { - this.requestHandlers.push(handler); - } - - /** - * Sets the proxy for the requests - * @param {string} proxyURL The proxy URL - */ - setProxy (proxyURL: string): void { - this.options.proxy = proxyURL; - } - - /** - * Gets the proxy used - * @returns {string | undefined} - */ - getProxy (): string | undefined { - return this.options.proxy; - } - - /** - * Sets the user agents for future requests - * @param {string} userAgent The user agent to use - */ - setUserAgent (userAgent: string): void { - this.options.userAgent = userAgent; - } - - /** - * Gets the user agent - * @returns {string | undefined} - */ - getUserAgent (): string | undefined { - return this.options.userAgent; - } - - /** - * Sets the XCSRF token refresh interval - * @param {number} xcsrfRefreshInterval The time in ms to use - */ - setXCSRFTokenRefreshInterval (xcsrfRefreshInterval: number): void { - this.options.xcsrfRefreshInterval = xcsrfRefreshInterval; - } - - /** - * Gets the XCSRF token refresh interval - * @returns {number | undefined} - */ - getXCSRFTokenRefreshInterval (): number | undefined { - return this.options.xcsrfRefreshInterval; - } - - /** - * Sets the amount of retries to be made to refresh XCSRF - * tokens on Token Validation errors - * @param {number} xcsrfRefreshMaxRetries Number of retries - */ - setXCSRFTokenRefreshMaxRetries (xcsrfRefreshMaxRetries: number): void { - this.options.xcsrfRefreshMaxRetries = xcsrfRefreshMaxRetries; - } - - /** - * Gets the amount of retries to be made to refresh XCSRF - * tokens on Token Validation errors - * @returns {number | undefined} - */ - getXCSRFTokenRefreshMaxRetries (): number | undefined { - return this.options.xcsrfRefreshMaxRetries; - } - - /** - * Sets the options for the RESTController - * @param {RESTControllerOptions} options The options to use - * @returns {RESTControllerOptions} - */ - setOptions (options?: RESTControllerOptions): RESTControllerOptions { - this.options = utilMergeDeep(DefaultRESTControllerOptions, options || {}) as RESTControllerOptions; - - return this.options; - } + public client: Client; + public options: RESTControllerOptions; + public requester: RESTRequester; + public cookieJar: CookieJar; + public responseHandlers: RESTResponseHandler[]; + public requestHandlers: RESTRequestHandler[]; + + constructor (client: Client, options?: RESTControllerOptions) { + /** + * The client + */ + this.client = client; + /** + * The options for this RESTController + */ + this.options = this.setOptions(options || this.client.options.rest); + /** + * The cookie jar + */ + this.cookieJar = new CookieJar(); + /** + * Functions to go through to validate / modify the response + */ + this.responseHandlers = [...responseHandlers]; + /** + * Functions to go through to modify the request + */ + this.requestHandlers = []; + /** + * The function that's being used to perform the requests, can be modified + */ + this.requester = getRequester( + this, + this.options.requester || undefined + ) as RESTRequester; + } + + /** + * Sends a request + * @param {RequestOptions} options The options + * @returns {Promise} + */ + request (options: RESTRequestOptions): Promise { + const request = new RESTRequest(this, options); + + return request.send(); + } + + /** + * Fetches a new XCSRF token + */ + + fetchXCSRFToken (): Promise { + return updateXCSRFToken(this).then(xcsrfToken => { + this.setXCSRFToken(xcsrfToken); + return xcsrfToken; + }); + } + + /** + * Sets the XCSRF token + * @param {string} token The xcsrf token to use in future requets + */ + setXCSRFToken (token: string): void { + this.options.xcsrf = token; + this.options.xcsrfSet = Date.now(); + } + + /** + * Gets the existing XCSRF token if it's not older than set refresh interval, + * otherwise, fetch a new one + */ + async getXCSRFToken (): Promise { + if ( + !this.options.xcsrf || + Date.now() - (this.options.xcsrfSet || 0) >= + (this.options.xcsrfRefreshInterval || + DefaultRESTControllerOptions.xcsrfRefreshInterval) + ) { + // Refresh token + await this.fetchXCSRFToken().then(token => { + this.setXCSRFToken(token); + }); + } + + return this.options.xcsrf; + } + + /** + * Creates a new cookie and returns it, no side effects + * @param {RESTCreateCookieOptions} cookieOptions The options to use + * @returns {Cookie} + */ + createCookie (cookieOptions: RESTCreateCookieOptions): Cookie { + return new Cookie({ + ...DefaultCreateCookieOptions, + ...cookieOptions + }); + } + + /** + * Adds a cookie to the cookie jar + * @param {Cookie} cookie The cookie to add + * @param {?string} domain The domain to add it for + * @param {Object} setCookieOptions Options for setting the cookie + * @returns {Cookie} + */ + addCookie (cookie: Cookie, domain?: string, setCookieOptions?: any): Cookie { + return this.cookieJar.setCookieSync( + cookie, + domain || "https://roblox.com", + setCookieOptions || {} + ); + } + + /** + * Gets the cookies for a given domain stored in the jar + * @param {string} domain The domain to retrieve the cookies for + * @returns {Cookie[]} + */ + getCookies (domain: string): Cookie[] { + return this.cookieJar.getCookiesSync(domain); + } + + /** + * Adds a response handler + * @param {Function} handler The response handler + */ + addResponseHandler (handler: RESTResponseHandler): void { + this.responseHandlers.push(handler); + } + + /** + * Adds a request handler + * @param {Function} handler The request handler + */ + addRequestHandler (handler: RESTRequestHandler): void { + this.requestHandlers.push(handler); + } + + /** + * Sets the proxy for the requests + * @param {string} proxyURL The proxy URL + */ + setProxy (proxyURL: string): void { + this.options.proxy = proxyURL; + } + + /** + * Gets the proxy used + * @returns {string | undefined} + */ + getProxy (): string | undefined { + return this.options.proxy; + } + + /** + * Sets the user agents for future requests + * @param {string} userAgent The user agent to use + */ + setUserAgent (userAgent: string): void { + this.options.userAgent = userAgent; + } + + /** + * Gets the user agent + * @returns {string | undefined} + */ + getUserAgent (): string | undefined { + return this.options.userAgent; + } + + /** + * Sets the XCSRF token refresh interval + * @param {number} xcsrfRefreshInterval The time in ms to use + */ + setXCSRFTokenRefreshInterval (xcsrfRefreshInterval: number): void { + this.options.xcsrfRefreshInterval = xcsrfRefreshInterval; + } + + /** + * Gets the XCSRF token refresh interval + * @returns {number | undefined} + */ + getXCSRFTokenRefreshInterval (): number | undefined { + return this.options.xcsrfRefreshInterval; + } + + /** + * Sets the amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + * @param {number} xcsrfRefreshMaxRetries Number of retries + */ + setXCSRFTokenRefreshMaxRetries (xcsrfRefreshMaxRetries: number): void { + this.options.xcsrfRefreshMaxRetries = xcsrfRefreshMaxRetries; + } + + /** + * Gets the amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + * @returns {number | undefined} + */ + getXCSRFTokenRefreshMaxRetries (): number | undefined { + return this.options.xcsrfRefreshMaxRetries; + } + + /** + * Sets the options for the RESTController + * @param {RESTControllerOptions} options The options to use + * @returns {RESTControllerOptions} + */ + setOptions (options?: RESTControllerOptions): RESTControllerOptions { + this.options = utilMergeDeep( + DefaultRESTControllerOptions, + options || {} + ) as RESTControllerOptions; + + return this.options; + } } - export default RESTController; diff --git a/src/controllers/rest/lib/getRequester.ts b/src/controllers/rest/lib/getRequester.ts index 67fa3aca3..38594eb35 100644 --- a/src/controllers/rest/lib/getRequester.ts +++ b/src/controllers/rest/lib/getRequester.ts @@ -1,20 +1,29 @@ import RESTController from "../RESTController"; import got from "got"; -export default function getRequester (controller: RESTController, customRequester?: RESTController["requester"]) { - if (!controller.requester && !controller.client.options.rest!.requester && customRequester === undefined) { - let requester: null | any; +export default function getRequester ( + controller: RESTController, + customRequester?: RESTController["requester"] +) { + if ( + !controller.requester && + !controller.client.options.rest!.requester && + customRequester === undefined + ) { + let requester: null | any; - try { - requester = got; - } catch (e) { - throw new Error(`Failed to retrieve module "got" and no custom requester provided!`); - } - - controller.requester = requester; - } else { - controller.requester = customRequester!; + try { + requester = got; + } catch (e) { + throw new Error( + `Failed to retrieve module "got" and no custom requester provided!` + ); } - return controller.requester; + controller.requester = requester; + } else { + controller.requester = customRequester!; + } + + return controller.requester; } diff --git a/src/controllers/rest/lib/updateXCSRFToken.ts b/src/controllers/rest/lib/updateXCSRFToken.ts index 1ad0aadcc..bf11a5849 100644 --- a/src/controllers/rest/lib/updateXCSRFToken.ts +++ b/src/controllers/rest/lib/updateXCSRFToken.ts @@ -1,25 +1,29 @@ import RESTController from "../RESTController"; - -export default function updateXCSRFToken (restController: RESTController): Promise { - return restController.request({ - url: "https://auth.roblox.com/v2/login", - method: "POST", - xcsrf: false, - checks: { - xcsrf: false - }, - responseOptions: { - allowedStatusCodes: [403] - } +export default function updateXCSRFToken ( + restController: RESTController +): Promise { + return restController + .request({ + url: "https://auth.roblox.com/v2/login", + method: "POST", + xcsrf: false, + checks: { + xcsrf: false + }, + responseOptions: { + allowedStatusCodes: [403] + } }) - .then(response => { - const foundXcsrfToken = response.headers["x-csrf-token"]; + .then(response => { + const foundXcsrfToken = response.headers["x-csrf-token"]; - if (!foundXcsrfToken) { - throw new Error(`x-csrf-token was not returned by Roblox. Unable to fetch the token!`); - } else { - return foundXcsrfToken; - } - }); + if (!foundXcsrfToken) { + throw new Error( + `x-csrf-token was not returned by Roblox. Unable to fetch the token!` + ); + } else { + return foundXcsrfToken; + } + }); } diff --git a/src/controllers/rest/request/RESTRequest.ts b/src/controllers/rest/request/RESTRequest.ts index 30d12565d..219011fe0 100644 --- a/src/controllers/rest/request/RESTRequest.ts +++ b/src/controllers/rest/request/RESTRequest.ts @@ -1,50 +1,53 @@ import { - DefaultRESTRequestOptions, - RESTRequestOptions, - RESTResponseDataType + DefaultRESTRequestOptions, + RESTRequestOptions, + RESTResponseDataType } from "../../../interfaces/RESTInterfaces"; import RESTController from "../RESTController"; import prepare from "./prepare"; import RESTResponse from "../response"; import { utilMergeDeep } from "../../../util/utilFunctions"; - class RESTRequest { - public controller: RESTController; - /** - * The options that will be used for sending the request - */ - public requestOptions: RESTRequestOptions; - - /** - * The amount of times this request has been executed - */ - public attempts: number; - - constructor (controller: RESTController, options: RESTRequestOptions) { - this.controller = controller; - this.requestOptions = options; - this.attempts = 0; - } - - setOptions (options: RESTRequestOptions): RESTRequestOptions { - // As lodash overwrites all entries that are provided with each other, it also mutates the default - // This way, it creates a clone of the default each time, so there's "new" default data each time - this.requestOptions = utilMergeDeep(JSON.parse(JSON.stringify(DefaultRESTRequestOptions)), options || {}) as RESTRequestOptions; - return this.requestOptions; - } - - async send (options?: RESTRequestOptions): Promise { - await prepare(this, options || this.requestOptions); - await Promise.all(this.controller.requestHandlers.map(handler => handler(this))); - - const responseData = await this.controller.requester(this.requestOptions); - this.attempts++; - - const response = new RESTResponse(this.controller, this, responseData); - return response.process(); - } + public controller: RESTController; + /** + * The options that will be used for sending the request + */ + public requestOptions: RESTRequestOptions; + + /** + * The amount of times this request has been executed + */ + public attempts: number; + + constructor (controller: RESTController, options: RESTRequestOptions) { + this.controller = controller; + this.requestOptions = options; + this.attempts = 0; + } + + setOptions (options: RESTRequestOptions): RESTRequestOptions { + // As lodash overwrites all entries that are provided with each other, it also mutates the default + // This way, it creates a clone of the default each time, so there's "new" default data each time + this.requestOptions = utilMergeDeep( + JSON.parse(JSON.stringify(DefaultRESTRequestOptions)), + options || {} + ) as RESTRequestOptions; + return this.requestOptions; + } + + async send (options?: RESTRequestOptions): Promise { + await prepare(this, options || this.requestOptions); + await Promise.all( + this.controller.requestHandlers.map(handler => handler(this)) + ); + + const responseData = await this.controller.requester(this.requestOptions); + this.attempts++; + + const response = new RESTResponse(this.controller, this, responseData); + return response.process(); + } } - export default RESTRequest; diff --git a/src/controllers/rest/request/prepare.ts b/src/controllers/rest/request/prepare.ts index ab3969f52..70dfd3a8a 100644 --- a/src/controllers/rest/request/prepare.ts +++ b/src/controllers/rest/request/prepare.ts @@ -2,54 +2,72 @@ import { RESTRequestOptions } from "../../../interfaces/RESTInterfaces"; import RESTRequest from "./"; import querystring from "querystring"; +export default async function prepare ( + request: RESTRequest, + options: RESTRequestOptions +): Promise { + request.setOptions(options); -export default async function prepare (request: RESTRequest, options: RESTRequestOptions): Promise { - request.setOptions(options); - - if (!request.requestOptions.url) { - throw new Error("No url was provided when executing rest.request.prepare"); - } - if (!request.requestOptions.headers) { - request.requestOptions.headers = {}; - } - if (request.requestOptions.followAllRedirects !== false) { - request.requestOptions.followAllRedirects = true; - } - if (!request.requestOptions.method) { - request.requestOptions.method = "GET"; - } - if (request.requestOptions.qs) { - if (!request.requestOptions.url.includes("?")) { - request.requestOptions.url += `?${querystring.stringify(request.requestOptions.qs as Record)}`; - } else { - request.requestOptions.url += `&${querystring.stringify(request.requestOptions.qs as Record)}`; - } - } - if ((request.requestOptions.xcsrf !== false && request.requestOptions.method.toLowerCase() !== "get") || request.requestOptions.xcsrf === true) { - request.requestOptions.headers = { - ...request.requestOptions.headers, - "X-CSRF-TOKEN": await request.controller.getXCSRFToken() - }; - if (!request.requestOptions.responseOptions) { - request.requestOptions.responseOptions = {}; - } - if (!request.requestOptions.responseOptions.disallowedStatusMessages) { - request.requestOptions.responseOptions.disallowedStatusMessages = []; - } - request.requestOptions.responseOptions.disallowedStatusMessages.push("Token Validation Failed"); + if (!request.requestOptions.url) { + throw new Error("No url was provided when executing rest.request.prepare"); + } + if (!request.requestOptions.headers) { + request.requestOptions.headers = {}; + } + if (request.requestOptions.followAllRedirects !== false) { + request.requestOptions.followAllRedirects = true; + } + if (!request.requestOptions.method) { + request.requestOptions.method = "GET"; + } + if (request.requestOptions.qs) { + if (!request.requestOptions.url.includes("?")) { + request.requestOptions.url += `?${querystring.stringify( + request.requestOptions.qs as Record + )}`; + } else { + request.requestOptions.url += `&${querystring.stringify( + request.requestOptions.qs as Record + )}`; } - if (request.requestOptions.json) { - request.requestOptions.body = typeof request.requestOptions.json === "string" ? request.requestOptions.json : JSON.stringify(request.requestOptions.json); - request.requestOptions.headers["content-type"] = "application/json"; - delete request.requestOptions.json; + } + if ( + (request.requestOptions.xcsrf !== false && + request.requestOptions.method.toLowerCase() !== "get") || + request.requestOptions.xcsrf === true + ) { + request.requestOptions.headers = { + ...request.requestOptions.headers, + "X-CSRF-TOKEN": await request.controller.getXCSRFToken() + }; + if (!request.requestOptions.responseOptions) { + request.requestOptions.responseOptions = {}; } - if (!request.requestOptions.excludeCookies) { - request.requestOptions.headers.Cookie = request.controller.cookieJar.getCookieStringSync(request.requestOptions.url); + if (!request.requestOptions.responseOptions.disallowedStatusMessages) { + request.requestOptions.responseOptions.disallowedStatusMessages = []; } + request.requestOptions.responseOptions.disallowedStatusMessages.push( + "Token Validation Failed" + ); + } + if (request.requestOptions.json) { + request.requestOptions.body = + typeof request.requestOptions.json === "string" ? + request.requestOptions.json : + JSON.stringify(request.requestOptions.json); + request.requestOptions.headers["content-type"] = "application/json"; + delete request.requestOptions.json; + } + if (!request.requestOptions.excludeCookies) { + request.requestOptions.headers.Cookie = + request.controller.cookieJar.getCookieStringSync( + request.requestOptions.url + ); + } - // -- Utilities + // -- Utilities - // Making sure the library does not throw errors if the request fails for some reason - // We want to handle any issues ourselves - request.requestOptions.throwHttpErrors = false; + // Making sure the library does not throw errors if the request fails for some reason + // We want to handle any issues ourselves + request.requestOptions.throwHttpErrors = false; } diff --git a/src/controllers/rest/response/RESTResponse.ts b/src/controllers/rest/response/RESTResponse.ts index effd7b215..8132cae25 100644 --- a/src/controllers/rest/response/RESTResponse.ts +++ b/src/controllers/rest/response/RESTResponse.ts @@ -3,41 +3,53 @@ import RESTRequest from "../request"; import { BloxyHttpError } from "../../../util/errors/errors"; import { RESTResponseDataType } from "../../../interfaces/RESTInterfaces"; - export default class RESTResponse { - public controller: RESTController; - public request: RESTRequest; - public responseData: RESTResponseDataType; - - // Public options: RESTResponseOptions; - - constructor (controller: RESTController, request: RESTRequest, responseData: RESTResponseDataType) { - this.controller = controller; - this.request = request; - this.responseData = responseData; - } - - // eslint-disable-next-line require-await - async process (): Promise { - const allProcessed = this.controller.responseHandlers.map(handler => handler(this)); - - if (allProcessed.every(processed => processed === true)) { - return this.responseData; + public controller: RESTController; + public request: RESTRequest; + public responseData: RESTResponseDataType; + + // Public options: RESTResponseOptions; + + constructor ( + controller: RESTController, + request: RESTRequest, + responseData: RESTResponseDataType + ) { + this.controller = controller; + this.request = request; + this.responseData = responseData; + } + + // eslint-disable-next-line require-await + async process (): Promise { + const allProcessed = this.controller.responseHandlers.map(handler => + handler(this) + ); + + if (allProcessed.every(processed => processed === true)) { + return this.responseData; + } else { + const error = allProcessed.find( + err => + err instanceof BloxyHttpError && + err.name === "BloxyInvalidStatusMessageError" && + err.statusMessage.includes("Token Validation Failed") + ); + + if (error) { + // 1 attempt = 0 retries + if ( + this.request.attempts - 1 === + this.controller.getXCSRFTokenRefreshMaxRetries() + ) { + throw error; } else { - const error = allProcessed.find(err => err instanceof BloxyHttpError && err.name === - "BloxyInvalidStatusMessageError" && err.statusMessage.includes("Token Validation Failed")); - - if (error) { - // 1 attempt = 0 retries - if (this.request.attempts - 1 === this.controller.getXCSRFTokenRefreshMaxRetries()) { - throw error; - } else { - this.controller.options.xcsrf = undefined; - return this.request.send(); - } - } - - throw allProcessed.find(err => err instanceof Error); + this.controller.options.xcsrf = undefined; + return this.request.send(); } + } + + throw allProcessed.find(err => err instanceof Error); } + } } diff --git a/src/controllers/rest/response/handlers/index.ts b/src/controllers/rest/response/handlers/index.ts index 0d9575a26..088e8a6b5 100644 --- a/src/controllers/rest/response/handlers/index.ts +++ b/src/controllers/rest/response/handlers/index.ts @@ -3,12 +3,11 @@ import validStatusMessage from "./validStatusMessage"; import validStatusCode from "./validStatusCode"; import updateHeaders from "./updateHeaders"; - const responseHandlers = [ - updateHeaders, - validStatusCode, - validStatusMessage, - validBody + updateHeaders, + validStatusCode, + validStatusMessage, + validBody ]; export default responseHandlers; diff --git a/src/controllers/rest/response/handlers/updateHeaders.ts b/src/controllers/rest/response/handlers/updateHeaders.ts index 7ca1f01dc..b78b99ba1 100644 --- a/src/controllers/rest/response/handlers/updateHeaders.ts +++ b/src/controllers/rest/response/handlers/updateHeaders.ts @@ -1,27 +1,26 @@ import RESTResponse from "../RESTResponse"; import { Cookie } from "tough-cookie"; - export default function updateHeaders (response: RESTResponse): boolean { - if (response.responseData.headers["set-cookie"]) { - const setCookieHeader = response.responseData.headers["set-cookie"]; - - if (Array.isArray(setCookieHeader)) { - setCookieHeader.forEach(toSetCookie => { - const parsedCookie = Cookie.parse(toSetCookie); + if (response.responseData.headers["set-cookie"]) { + const setCookieHeader = response.responseData.headers["set-cookie"]; - if (parsedCookie) { - response.controller.addCookie(parsedCookie); - } - }); - } else { - const parsedCookie = Cookie.parse(setCookieHeader); + if (Array.isArray(setCookieHeader)) { + setCookieHeader.forEach(toSetCookie => { + const parsedCookie = Cookie.parse(toSetCookie); - if (parsedCookie) { - response.controller.addCookie(parsedCookie); - } + if (parsedCookie) { + response.controller.addCookie(parsedCookie); } + }); + } else { + const parsedCookie = Cookie.parse(setCookieHeader); + + if (parsedCookie) { + response.controller.addCookie(parsedCookie); + } } + } - return true; + return true; } diff --git a/src/controllers/rest/response/handlers/validBody.ts b/src/controllers/rest/response/handlers/validBody.ts index 85d775f4a..5e0b1088e 100644 --- a/src/controllers/rest/response/handlers/validBody.ts +++ b/src/controllers/rest/response/handlers/validBody.ts @@ -1,3 +1,3 @@ export default function validBody (): boolean { - return true; + return true; } diff --git a/src/controllers/rest/response/handlers/validStatusCode.ts b/src/controllers/rest/response/handlers/validStatusCode.ts index 47107a1f8..14f986002 100644 --- a/src/controllers/rest/response/handlers/validStatusCode.ts +++ b/src/controllers/rest/response/handlers/validStatusCode.ts @@ -1,39 +1,59 @@ import RESTResponse from "../RESTResponse"; import { BloxyHttpError } from "../../../../util/errors/errors"; +export default function validStatusCode ( + response: RESTResponse +): boolean | Error { + const { request, responseData } = response; + let isValid = true; + const responseOptions = request.requestOptions.responseOptions || {}; -export default function validStatusCode (response: RESTResponse): boolean | Error { - const { request, responseData } = response; - let isValid = true; - const responseOptions = request.requestOptions.responseOptions || {}; + if ( + request.requestOptions.responseOptions && + request.requestOptions.checks?.statusCode + ) { + const allowedStatusCodes = responseOptions.allowedStatusCodes || []; + const disallowedStatusCodes = responseOptions.disallowedStatusCodes || []; - if (request.requestOptions.responseOptions && request.requestOptions.checks?.statusCode) { - const allowedStatusCodes = responseOptions.allowedStatusCodes || []; - const disallowedStatusCodes = responseOptions.disallowedStatusCodes || []; + const isAllowed = allowedStatusCodes.some( + statusCode => responseData.statusCode === statusCode + ); + const isDisallowed = disallowedStatusCodes.some( + statusCode => responseData.statusCode === statusCode + ); - const isAllowed = allowedStatusCodes.some(statusCode => responseData.statusCode === statusCode); - const isDisallowed = disallowedStatusCodes.some(statusCode => responseData.statusCode === statusCode); - - if (allowedStatusCodes.length > 0) { - // Only these are allowed - if (!isAllowed) { - isValid = false; - } - } else if (allowedStatusCodes.length === 0 && disallowedStatusCodes.length > 0) { - // Only these are disallowed - if (isDisallowed) { - isValid = false; - } - } else if (allowedStatusCodes.length === 0 && disallowedStatusCodes.length === 0) { - // All status are allowed - } + if (allowedStatusCodes.length > 0) { + // Only these are allowed + if (!isAllowed) { + isValid = false; + } + } else if ( + allowedStatusCodes.length === 0 && + disallowedStatusCodes.length > 0 + ) { + // Only these are disallowed + if (isDisallowed) { + isValid = false; + } + } else if ( + allowedStatusCodes.length === 0 && + disallowedStatusCodes.length === 0 + ) { + // All status are allowed } + } - return isValid ? true : new BloxyHttpError({ - statusMessage: responseData.statusMessage, - statusCode: responseData.statusCode, - message: `Invalid status code in response. Body: ${responseData.body instanceof Object ? JSON.stringify(responseData.body) : responseData.body}`, - name: "BloxyHttpInvalidStatusCodeError", - possibleReasons: [] + return isValid ? + true : + new BloxyHttpError({ + statusMessage: responseData.statusMessage, + statusCode: responseData.statusCode, + message: `Invalid status code in response. Body: ${ + responseData.body instanceof Object ? + JSON.stringify(responseData.body) : + responseData.body + }`, + name: "BloxyHttpInvalidStatusCodeError", + possibleReasons: [] }); } diff --git a/src/controllers/rest/response/handlers/validStatusMessage.ts b/src/controllers/rest/response/handlers/validStatusMessage.ts index ceb496252..25c90b5af 100644 --- a/src/controllers/rest/response/handlers/validStatusMessage.ts +++ b/src/controllers/rest/response/handlers/validStatusMessage.ts @@ -1,42 +1,56 @@ import RESTResponse from "../RESTResponse"; import { BloxyHttpError } from "../../../../util/errors/errors"; +export default function validStatusMessage ( + response: RESTResponse +): boolean | Error { + const { request, responseData } = response; + const responseOptions = request.requestOptions.responseOptions || {}; + let isValid = true; -export default function validStatusMessage (response: RESTResponse): boolean | Error { - const { request, responseData } = response; - const responseOptions = request.requestOptions.responseOptions || {}; - let isValid = true; + if ( + request.requestOptions.responseOptions && + request.requestOptions.checks?.statusMessage + ) { + const allowedStatusMessages = responseOptions.allowedStatusMessages || []; + const disallowedStatusMessages = + responseOptions.disallowedStatusMessages || []; - if (request.requestOptions.responseOptions && request.requestOptions.checks?.statusMessage) { - const allowedStatusMessages = responseOptions.allowedStatusMessages || []; - const disallowedStatusMessages = responseOptions.disallowedStatusMessages || []; + const isAllowed = allowedStatusMessages.some(statusMessage => + responseData.statusMessage.toLowerCase().includes(statusMessage) + ); + const isDisallowed = disallowedStatusMessages.some(statusMessage => + responseData.statusMessage.toLowerCase().includes(statusMessage) + ); - const isAllowed = allowedStatusMessages.some(statusMessage => responseData.statusMessage.toLowerCase() - .includes(statusMessage)); - const isDisallowed = disallowedStatusMessages.some(statusMessage => responseData.statusMessage - .toLowerCase().includes(statusMessage)); - - if (allowedStatusMessages.length > 0) { - // Only these are allowed - if (!isAllowed) { - isValid = false; - } - } else if (allowedStatusMessages.length === 0 && disallowedStatusMessages.length > 0) { - // Only these are disallowed - if (isDisallowed) { - isValid = false; - } - } else if (allowedStatusMessages.length === 0 && disallowedStatusMessages.length === 0) { - // All status are allowed - } + if (allowedStatusMessages.length > 0) { + // Only these are allowed + if (!isAllowed) { + isValid = false; + } + } else if ( + allowedStatusMessages.length === 0 && + disallowedStatusMessages.length > 0 + ) { + // Only these are disallowed + if (isDisallowed) { + isValid = false; + } + } else if ( + allowedStatusMessages.length === 0 && + disallowedStatusMessages.length === 0 + ) { + // All status are allowed } + } - return isValid ? true : new BloxyHttpError({ - statusCode: responseData.statusCode, - statusMessage: responseData.statusMessage, - message: `Invalid status message detected in response.`, - name: "BloxyHttpInvalidStatusMessageError", - possibleReasons: [] + return isValid ? + true : + new BloxyHttpError({ + statusCode: responseData.statusCode, + statusMessage: responseData.statusMessage, + message: `Invalid status message detected in response.`, + name: "BloxyHttpInvalidStatusMessageError", + possibleReasons: [] }); } - diff --git a/src/index.ts b/src/index.ts index fca589611..829f99f66 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,1024 +1,1024 @@ export { default as Client } from "./client"; export type { - AddStarCodeAffiliate, - AddStarCodeAffiliateOptions, - DeletePhone, - DeletePhoneOptions, - GetConsecutiveXboxLoginDays, - GetMetaData as AccountInformationAPIGetMetaData, - GetSelfPromotionChannels, - GetStarCodeAffiliate, - GetUserBirthdate, - GetUserDescription, - GetUserGender, - GetUserPromotionChannels, - GetUserPromotionChannelsOptions, - GetVerifiedPhoneNumber, - RemoveStarCodeAffiliate, - ResendPhoneCode, - ResendPhoneCodeOptions, - SetPhoneNumber, - SetPhoneNumberOptions, - UpdateUserBirthdate, - UpdateUserBirthdateOptions, - UpdateUserDescription, - UpdateUserDescriptionOptions, - UpdateUserGender, - UpdateUserGenderOptions, - UpdateUserPromotionChannelsOptions, - VerifyPhone, - VerifyPhoneOptions + AddStarCodeAffiliate, + AddStarCodeAffiliateOptions, + DeletePhone, + DeletePhoneOptions, + GetConsecutiveXboxLoginDays, + GetMetaData as AccountInformationAPIGetMetaData, + GetSelfPromotionChannels, + GetStarCodeAffiliate, + GetUserBirthdate, + GetUserDescription, + GetUserGender, + GetUserPromotionChannels, + GetUserPromotionChannelsOptions, + GetVerifiedPhoneNumber, + RemoveStarCodeAffiliate, + ResendPhoneCode, + ResendPhoneCodeOptions, + SetPhoneNumber, + SetPhoneNumberOptions, + UpdateUserBirthdate, + UpdateUserBirthdateOptions, + UpdateUserDescription, + UpdateUserDescriptionOptions, + UpdateUserGender, + UpdateUserGenderOptions, + UpdateUserPromotionChannelsOptions, + VerifyPhone, + VerifyPhoneOptions } from "./client/apis/AccountInformationAPI"; export type { - GetAppChatPrivacy, - GetContactUpsell, - GetGameChatPrivacy, - GetInventoryPrivacy, - GetIsXboxUsernameValid, - GetIsXboxUsernameValidOptions, - GetSettingsGroups, - GetUserEmailStatus, - GetUserPrivacy, - GetUserPrivacySettingsInfo, - GetUserPrivateMessagePrivacy, - GetUserTradePrivacy, - GetUserTradeQualityFilter, - GetWebsiteTheme, - GetWebsiteThemes, - SendEmailVerification, - UpdateAppChatPrivacy, - UpdateAppChatPrivacyOptions, - UpdateContactUpsellSuppression, - UpdateContactUpsellSuppressionOptions, - UpdateGameChatPrivacy, - UpdateGameChatPrivacyOptions, - UpdateInventoryPrivacy, - UpdateInventoryPrivacyOptions, - UpdateTwoStepStatus, - UpdateTwoStepStatusOptions, - UpdateUserEmail, - UpdateUserEmailOptions, - UpdateUserPrivacy, - UpdateUserPrivacyOptions, - UpdateUserPrivateMessagePrivacy, - UpdateUserPrivateMessagePrivacyOptions, - UpdateUserPromotionChannels, - UpdateUserTradePrivacy, - UpdateUserTradePrivacyOptions, - UpdateUserTradeQualityFilter, - UpdateUserTradeQualityFilterOptions, - UpdateWebsiteTheme, - UpdateWebsiteThemeOptions + GetAppChatPrivacy, + GetContactUpsell, + GetGameChatPrivacy, + GetInventoryPrivacy, + GetIsXboxUsernameValid, + GetIsXboxUsernameValidOptions, + GetSettingsGroups, + GetUserEmailStatus, + GetUserPrivacy, + GetUserPrivacySettingsInfo, + GetUserPrivateMessagePrivacy, + GetUserTradePrivacy, + GetUserTradeQualityFilter, + GetWebsiteTheme, + GetWebsiteThemes, + SendEmailVerification, + UpdateAppChatPrivacy, + UpdateAppChatPrivacyOptions, + UpdateContactUpsellSuppression, + UpdateContactUpsellSuppressionOptions, + UpdateGameChatPrivacy, + UpdateGameChatPrivacyOptions, + UpdateInventoryPrivacy, + UpdateInventoryPrivacyOptions, + UpdateTwoStepStatus, + UpdateTwoStepStatusOptions, + UpdateUserEmail, + UpdateUserEmailOptions, + UpdateUserPrivacy, + UpdateUserPrivacyOptions, + UpdateUserPrivateMessagePrivacy, + UpdateUserPrivateMessagePrivacyOptions, + UpdateUserPromotionChannels, + UpdateUserTradePrivacy, + UpdateUserTradePrivacyOptions, + UpdateUserTradeQualityFilter, + UpdateUserTradeQualityFilterOptions, + UpdateWebsiteTheme, + UpdateWebsiteThemeOptions } from "./client/apis/AccountSettingsAPI"; export type { - CreateAd, - CreateAdOptions, - GetCreateAdMetaData, - GetSponsoredGames, - GetSponsoredGamesOptions, - RunAd, - RunAdOptions, - StopAd, - StopAdOptions + CreateAd, + CreateAdOptions, + GetCreateAdMetaData, + GetSponsoredGames, + GetSponsoredGamesOptions, + RunAd, + RunAdOptions, + StopAd, + StopAdOptions } from "./client/apis/AdConfigurationAPI"; export type { - CreateAssetAd, - CreateAssetAdOptions, - CreateGamePassAd, - CreateGamePassAdOptions, - CreateGroupAd, - CreateGroupAdOptions + CreateAssetAd, + CreateAssetAdOptions, + CreateGamePassAd, + CreateGamePassAdOptions, + CreateGroupAd, + CreateGroupAdOptions } from "./client/apis/AdsAPI"; export type { - BaseAsset, - BaseAssetDeliveryOptions, - BaseAssetRaw, - GetAssetByAlias, - GetAssetByAliasOptions, - GetAssetByAssetId, - GetAssetByAssetIdOptions, - GetAssetByAssetVersionId, - GetAssetByAssetVersionIdOptions, - GetAssetByHash, - GetAssetByHashOptions, - GetAssetById, - GetAssetByIdOptions, - GetAssetByMarAssetHash, - GetAssetByMarAssetHashOptions, - GetAssetByUserAssetId, - GetAssetByUserAssetIdOptions, - GetAssetVersionByAssetId, - GetAssetVersionByAssetIdOptions, - GetBatchAssets, - GetBatchAssetsOptions + BaseAsset, + BaseAssetDeliveryOptions, + BaseAssetRaw, + GetAssetByAlias, + GetAssetByAliasOptions, + GetAssetByAssetId, + GetAssetByAssetIdOptions, + GetAssetByAssetVersionId, + GetAssetByAssetVersionIdOptions, + GetAssetByHash, + GetAssetByHashOptions, + GetAssetById, + GetAssetByIdOptions, + GetAssetByMarAssetHash, + GetAssetByMarAssetHashOptions, + GetAssetByUserAssetId, + GetAssetByUserAssetIdOptions, + GetAssetVersionByAssetId, + GetAssetVersionByAssetIdOptions, + GetBatchAssets, + GetBatchAssetsOptions } from "./client/apis/AssetDeliveryAPI"; export type { - ChangeUserPassword, - ChangeUserPasswordOptions, - ChangeUsername, - ChangeUsernameOptions, - GetAuthMetaData, - GetAuthTicket, - GetCredentialsVerificationStatus, - GetCredentialsVerificationStatusOptions, - GetCurrentPasswordStatus, - GetExistingUsernames, - GetExistingUsernamesOptions, - GetMetaData as GetAuthAPIMetaData, - GetPasswordResetMetaData, - GetPasswordResetMetaDataOptions, - GetRecoveryMetaData, - GetSAMLMetaData, - GetTwoStepVerificationMetaData as GetAuthTwoStepVerificationMetaData, - Login, - LoginOptions, - Logout, - RecoverUsernames, - RecoverUsernamesOptions, - RequestTwoStepVerification, - ResendTwoStepVerification, - ResendTwoStepVerificationOptions, - ResetPassword, - ResetPasswordOptions, - RevertAccount, - RevertAccountInfo, - RevertAccountInfoOptions, - RevertAccountOptions, - SAMLRequest, - SendCredentialsVerificationMessage, - SendCredentialsVerificationMessageOptions, - SendPasswordReset, - SendPasswordResetOptions, - SignUp, - SignUpOptions, - ValidatePassword, - ValidatePasswordOptions, - ValidateUsername, - ValidateUsernameOptions, - VerifyPasswordReset, - VerifyPasswordResetOptions, - VerifyTwoStepVerification, - VerifyTwoStepVerificationOptions + ChangeUserPassword, + ChangeUserPasswordOptions, + ChangeUsername, + ChangeUsernameOptions, + GetAuthMetaData, + GetAuthTicket, + GetCredentialsVerificationStatus, + GetCredentialsVerificationStatusOptions, + GetCurrentPasswordStatus, + GetExistingUsernames, + GetExistingUsernamesOptions, + GetMetaData as GetAuthAPIMetaData, + GetPasswordResetMetaData, + GetPasswordResetMetaDataOptions, + GetRecoveryMetaData, + GetSAMLMetaData, + GetTwoStepVerificationMetaData as GetAuthTwoStepVerificationMetaData, + Login, + LoginOptions, + Logout, + RecoverUsernames, + RecoverUsernamesOptions, + RequestTwoStepVerification, + ResendTwoStepVerification, + ResendTwoStepVerificationOptions, + ResetPassword, + ResetPasswordOptions, + RevertAccount, + RevertAccountInfo, + RevertAccountInfoOptions, + RevertAccountOptions, + SAMLRequest, + SendCredentialsVerificationMessage, + SendCredentialsVerificationMessageOptions, + SendPasswordReset, + SendPasswordResetOptions, + SignUp, + SignUpOptions, + ValidatePassword, + ValidatePasswordOptions, + ValidateUsername, + ValidateUsernameOptions, + VerifyPasswordReset, + VerifyPasswordResetOptions, + VerifyTwoStepVerification, + VerifyTwoStepVerificationOptions } from "./client/apis/AuthAPI"; export type { - BodyColors, - BodyScales, - ColorPalette, - CreateOutfit, - CreateOutfitOptions, - DeleteOutfit, - DeleteOutfitOptions, - GetAvatarMetadata, - GetAvatarRules, - GetOutfit, - GetOutfitOptions, - GetRecentItems, - GetRecentItemsOptions, - GetUserAvatar, - GetUserAvatarOptions, - GetUserCurrentlyWearing, - GetUserCurrentlyWearingOptions, - GetUserOutfits, - GetUserOutfitsOptions, - RedrawThumbnail, - RemoveAssetFromAvatar, - RemoveAssetFromAvatarOptions, - Scale, - SetBodyColors, - SetBodyColorsOptions, - SetPlayerAvatarScales, - SetPlayerAvatarScalesOptions, - SetPlayerAvatarType, - SetPlayerAvatarTypeOptions, - SetPlayerAvatarWearingAssets, - SetPlayerAvatarWearingAssetsOptions, - UpdateOutfit, - UpdateOutfitOptions, - UserAvatar, - WearAssetOnAvatar, - WearAssetOnAvatarOptions, - WearOutfit, - WearOutfitOptions + BodyColors, + BodyScales, + ColorPalette, + CreateOutfit, + CreateOutfitOptions, + DeleteOutfit, + DeleteOutfitOptions, + GetAvatarMetadata, + GetAvatarRules, + GetOutfit, + GetOutfitOptions, + GetRecentItems, + GetRecentItemsOptions, + GetUserAvatar, + GetUserAvatarOptions, + GetUserCurrentlyWearing, + GetUserCurrentlyWearingOptions, + GetUserOutfits, + GetUserOutfitsOptions, + RedrawThumbnail, + RemoveAssetFromAvatar, + RemoveAssetFromAvatarOptions, + Scale, + SetBodyColors, + SetBodyColorsOptions, + SetPlayerAvatarScales, + SetPlayerAvatarScalesOptions, + SetPlayerAvatarType, + SetPlayerAvatarTypeOptions, + SetPlayerAvatarWearingAssets, + SetPlayerAvatarWearingAssetsOptions, + UpdateOutfit, + UpdateOutfitOptions, + UserAvatar, + WearAssetOnAvatar, + WearAssetOnAvatarOptions, + WearOutfit, + WearOutfitOptions } from "./client/apis/AvatarAPI"; export type { - DeleteBadgeFromSelf, - DeleteBadgeFromSelfOptions, - DeleteBadgeFromUser, - DeleteBadgeFromUserOptions, - GetBadge, - GetBadgeOptions, - GetUniverseBadges, - GetUniverseBadgesOptions, - GetUserBadges, - GetUserBadgesAwardedDates, - GetUserBadgesAwardedDatesOptions, - GetUserBadgesOptions, - UpdateBadge, - UpdateBadgeOptions + DeleteBadgeFromSelf, + DeleteBadgeFromSelfOptions, + DeleteBadgeFromUser, + DeleteBadgeFromUserOptions, + GetBadge, + GetBadgeOptions, + GetUniverseBadges, + GetUniverseBadgesOptions, + GetUserBadges, + GetUserBadgesAwardedDates, + GetUserBadgesAwardedDatesOptions, + GetUserBadgesOptions, + UpdateBadge, + UpdateBadgeOptions } from "./client/apis/BadgesAPI"; export type { BaseAPIRequestOptions } from "./client/apis/BaseAPI"; export type { - GetDeveloperExchangeRate, - GetLatestLuobuDeveloperExchangeStatus, - GetLuobuDeveloperExchangeBalance, - GetLuobuDeveloperExchangeEligibility, - GetUserPayments, - GetUserPaymentsOptions, - GetXsollaIFrameToken, - GetXsollaIFrameTokenOptions, - IncrementCounterByAgent, - IncrementCounterByAgentOptions, - PurchaseAmazonProduct, - PurchaseAmazonProductOptions, - PurchaseAppleProduct, - PurchaseAppleProductOptions, - PurchaseGoogleProduct, - PurchaseGoogleProductOptions, - RedeemDigitalCode, - RedeemDigitalCodeOptions, - RedeemGameCard, - RedeemGameCardOptions, - RedeemPromoCode, - RedeemPromoCodeOptions, - ReverseGameCard, - ReverseGameCardOptions, - SendXsollaWebhook, - SendXsollaWebhookOptions, - SubmitLuobuDeveloperExchange, - SubmitLuobuDeveloperExchangeOptions, - ValidateAmazonProduct, - ValidateAmazonProductOptions, - ValidateAppleProduct, - ValidateAppleProductOptions, - ValidateGoogleProduct, - ValidateGoogleProductOptions + GetDeveloperExchangeRate, + GetLatestLuobuDeveloperExchangeStatus, + GetLuobuDeveloperExchangeBalance, + GetLuobuDeveloperExchangeEligibility, + GetUserPayments, + GetUserPaymentsOptions, + GetXsollaIFrameToken, + GetXsollaIFrameTokenOptions, + IncrementCounterByAgent, + IncrementCounterByAgentOptions, + PurchaseAmazonProduct, + PurchaseAmazonProductOptions, + PurchaseAppleProduct, + PurchaseAppleProductOptions, + PurchaseGoogleProduct, + PurchaseGoogleProductOptions, + RedeemDigitalCode, + RedeemDigitalCodeOptions, + RedeemGameCard, + RedeemGameCardOptions, + RedeemPromoCode, + RedeemPromoCodeOptions, + ReverseGameCard, + ReverseGameCardOptions, + SendXsollaWebhook, + SendXsollaWebhookOptions, + SubmitLuobuDeveloperExchange, + SubmitLuobuDeveloperExchangeOptions, + ValidateAmazonProduct, + ValidateAmazonProductOptions, + ValidateAppleProduct, + ValidateAppleProductOptions, + ValidateGoogleProduct, + ValidateGoogleProductOptions } from "./client/apis/BillingAPI"; export type { - FavoriteAsset, - FavoriteAssetOptions, - FavoriteBundle, - FavoriteBundleOptions, - GetAppStoreExclusiveBundles, - GetAppStoreExclusiveBundlesOptions, - GetAssetBundles, - GetAssetBundlesOptions, - GetAssetFavoriteCount, - GetAssetFavoriteCountOptions, - GetAssetToCategory, - GetAssetToSubCategory, - GetBundleDetails, - GetBundleDetailsOptions, - GetBundleFavoriteCount, - GetBundleFavoriteCountOptions, - GetBundleRecommendationsByBundleId, - GetBundleRecommendationsByBundleIdOptions, - GetCategories, - GetMultiBundleDetails, - GetMultiBundleDetailsOptions, - GetSelfFavoriteBundle, - GetSelfFavoriteBundleOptions, - GetSubCategories, - GetUserBundles, - GetUserBundlesByType, - GetUserBundlesByTypeOptions, - GetUserBundlesOptions, - GetUserFavoriteAsset, - GetUserFavoriteAssetOptions, - ProductDetails, - RemoveFavoriteBundle, - RemoveFavoriteBundleOptions, - RemoveSelfAssetFavorite, - RemoveSelfAssetFavoriteOptions, - UnpackBundle, - UnpackBundleOptions + FavoriteAsset, + FavoriteAssetOptions, + FavoriteBundle, + FavoriteBundleOptions, + GetAppStoreExclusiveBundles, + GetAppStoreExclusiveBundlesOptions, + GetAssetBundles, + GetAssetBundlesOptions, + GetAssetFavoriteCount, + GetAssetFavoriteCountOptions, + GetAssetToCategory, + GetAssetToSubCategory, + GetBundleDetails, + GetBundleDetailsOptions, + GetBundleFavoriteCount, + GetBundleFavoriteCountOptions, + GetBundleRecommendationsByBundleId, + GetBundleRecommendationsByBundleIdOptions, + GetCategories, + GetMultiBundleDetails, + GetMultiBundleDetailsOptions, + GetSelfFavoriteBundle, + GetSelfFavoriteBundleOptions, + GetSubCategories, + GetUserBundles, + GetUserBundlesByType, + GetUserBundlesByTypeOptions, + GetUserBundlesOptions, + GetUserFavoriteAsset, + GetUserFavoriteAssetOptions, + ProductDetails, + RemoveFavoriteBundle, + RemoveFavoriteBundleOptions, + RemoveSelfAssetFavorite, + RemoveSelfAssetFavoriteOptions, + UnpackBundle, + UnpackBundleOptions } from "./client/apis/CatalogAPI"; export type { - AddUsersToConversation, - AddUsersToConversationOptions, - GetChatSettings, - GetConversationMessages, - GetConversationMessagesOptions, - GetConversations, - GetConversationsOptions, - GetMetaData as GetChatAPIMetaData, - GetMultiLatestConversationMessages, - GetMultiLatestConversationMessagesOptions, - GetRolloutSettings, - GetRolloutSettingsOptions, - GetUnreadConversationCount, - GetUnreadMessagesInConversations, - GetUnreadMessagesInConversationsOptions, - GetUserConversations, - GetUserConversationsOptions, - MarkConversationsAsSeen, - MarkConversationsAsSeenOptions, - MarkMessageInConversationAsRead, - MarkMessageInConversationAsReadOptions, - RemoveUserFromConversation, - RemoveUserFromConversationOptions, - RenameGroupConversation, - RenameGroupConversationOptions, - ResetConversationUniverse, - ResetConversationUniverseOptions, - SendGameLinkMessage, - SendGameLinkMessageOptions, - SendMessage as SendChatMessage, - SendMessageOptions as SendChatMessageOptions, - SetConversationUniverse, - SetConversationUniverseOptions, - StartCloudEditConversation, - StartCloudEditConversationOptions, - StartGroupConversation, - StartGroupConversationOptions, - StartOneToOneConversation, - StartOneToOneConversationOptions, - UpdateUserTypingStatus, - UpdateUserTypingStatusOptions + AddUsersToConversation, + AddUsersToConversationOptions, + GetChatSettings, + GetConversationMessages, + GetConversationMessagesOptions, + GetConversations, + GetConversationsOptions, + GetMetaData as GetChatAPIMetaData, + GetMultiLatestConversationMessages, + GetMultiLatestConversationMessagesOptions, + GetRolloutSettings, + GetRolloutSettingsOptions, + GetUnreadConversationCount, + GetUnreadMessagesInConversations, + GetUnreadMessagesInConversationsOptions, + GetUserConversations, + GetUserConversationsOptions, + MarkConversationsAsSeen, + MarkConversationsAsSeenOptions, + MarkMessageInConversationAsRead, + MarkMessageInConversationAsReadOptions, + RemoveUserFromConversation, + RemoveUserFromConversationOptions, + RenameGroupConversation, + RenameGroupConversationOptions, + ResetConversationUniverse, + ResetConversationUniverseOptions, + SendGameLinkMessage, + SendGameLinkMessageOptions, + SendMessage as SendChatMessage, + SendMessageOptions as SendChatMessageOptions, + SetConversationUniverse, + SetConversationUniverseOptions, + StartCloudEditConversation, + StartCloudEditConversationOptions, + StartGroupConversation, + StartGroupConversationOptions, + StartOneToOneConversation, + StartOneToOneConversationOptions, + UpdateUserTypingStatus, + UpdateUserTypingStatusOptions } from "./client/apis/ChatAPI"; export type { - GetContactsMetaData, - GetUsersTags, - GetUsersTagsOptions, - SetPendingUserTag, - SetPendingUserTagOptions, - SetUserTag, - SetUserTagOptions + GetContactsMetaData, + GetUsersTags, + GetUsersTagsOptions, + SetPendingUserTag, + SetPendingUserTagOptions, + SetUserTag, + SetUserTagOptions } from "./client/apis/ContactsAPI"; export type { - UploadDataOptions, - UploadDataResult + UploadDataOptions, + UploadDataResult } from "./client/apis/DataAPI"; export type { - ActivateUniverse, - ActivateUniverseOptions, - CreateDeveloperProduct, - CreateDeveloperProductOptions, - CreateUniverseAlias, - CreateUniverseAliasOptions, - DeactivateUniverse, - DeactivateUniverseOptions, - DeleteUniverseAlias, - DeleteUniverseAliasOptions, - DownloadUniverseStatisticsReportByTime, - DownloadUniverseStatisticsReportByTimeOptions, - FilterPublishGameNotification, - FilterPublishGameNotificationOptions, - GenerateUniverseStatisticReportsByTime, - GenerateUniverseStatisticReportsByTimeOptions, - GetAssetsVoteInformation, - GetAssetsVoteInformationOptions, - GetGameTemplates, - GetGameUpdatesHistory, - GetGameUpdatesHistoryOptions, - GetGroupUniverses, - GetGroupUniversesOptions, - GetNotificationsStatisticReports, - GetPlaceCompatibilities, - GetPlaceCompatibilitiesOptions, - GetPlaceStatisticsByType, - GetPlaceStatisticsByTypeOptions, - GetPluginsById, - GetPluginsByIdOptions, - GetSelfGroupsAccess, - GetSelfTeamCreateUniversesAccess, - GetSelfTeamCreateUniversesAccessOptions, - GetSelfUniverses, - GetSelfUniversesOptions, - GetStudioData, - GetStudioDataOptions, - GetUniverse, - GetUniverseConfiguration, - GetUniverseConfigurationOptions, - GetUniverseOptions, - GetUniversePermissions, - GetUniversePermissionsOptions, - GetUniversePlaces, - GetUniversePlacesOptions, - GetUniverseStatisticsReportByTime, - GetUniverseStatisticsReports, - GetUniverseStatisticsReportsByTimeOptions, - GetUniverseStatisticsReportsOptions, - GetUniverseTeamCreateSettings, - GetUniverseTeamCreateSettingsOptions, - GetUniverseVIPServersConfiguration, - GetUniverseVIPServersConfigurationOptions, - GetUsersInUniverseTeamCreate, - GetUsersInUniverseTeamCreateOptions, - MultiGetUniverses, - MultiGetUniversesOptions, - MultiGetUniversesPermissions, - MultiGetUniversesPermissionsOptions, - PublishGameNotification, - PublishGameNotificationOptions, - RemoveUserFromUniverseTeamCreate, - RemoveUserFromUniverseTeamCreateOptions, - SearchToolbox, - SearchToolboxOptions, - SearchUniverseData, - SearchUniverses, - SearchUniversesOptions, - SetStudioData, - SetStudioDataOptions, - UpdateDeveloperProduct, - UpdateDeveloperProductOptions, - UpdatePlaceConfiguration, - UpdatePlaceConfigurationOptions, - UpdatePlugin, - UpdatePluginOptions, - UpdateUniverseAlias, - UpdateUniverseAliasOptions, - UpdateUniverseConfiguration, - UpdateUniverseConfigurationOptions, - UpdateUniverseTeamCreateSettings, - UpdateUniverseTeamCreateSettingsOptions + ActivateUniverse, + ActivateUniverseOptions, + CreateDeveloperProduct, + CreateDeveloperProductOptions, + CreateUniverseAlias, + CreateUniverseAliasOptions, + DeactivateUniverse, + DeactivateUniverseOptions, + DeleteUniverseAlias, + DeleteUniverseAliasOptions, + DownloadUniverseStatisticsReportByTime, + DownloadUniverseStatisticsReportByTimeOptions, + FilterPublishGameNotification, + FilterPublishGameNotificationOptions, + GenerateUniverseStatisticReportsByTime, + GenerateUniverseStatisticReportsByTimeOptions, + GetAssetsVoteInformation, + GetAssetsVoteInformationOptions, + GetGameTemplates, + GetGameUpdatesHistory, + GetGameUpdatesHistoryOptions, + GetGroupUniverses, + GetGroupUniversesOptions, + GetNotificationsStatisticReports, + GetPlaceCompatibilities, + GetPlaceCompatibilitiesOptions, + GetPlaceStatisticsByType, + GetPlaceStatisticsByTypeOptions, + GetPluginsById, + GetPluginsByIdOptions, + GetSelfGroupsAccess, + GetSelfTeamCreateUniversesAccess, + GetSelfTeamCreateUniversesAccessOptions, + GetSelfUniverses, + GetSelfUniversesOptions, + GetStudioData, + GetStudioDataOptions, + GetUniverse, + GetUniverseConfiguration, + GetUniverseConfigurationOptions, + GetUniverseOptions, + GetUniversePermissions, + GetUniversePermissionsOptions, + GetUniversePlaces, + GetUniversePlacesOptions, + GetUniverseStatisticsReportByTime, + GetUniverseStatisticsReports, + GetUniverseStatisticsReportsByTimeOptions, + GetUniverseStatisticsReportsOptions, + GetUniverseTeamCreateSettings, + GetUniverseTeamCreateSettingsOptions, + GetUniverseVIPServersConfiguration, + GetUniverseVIPServersConfigurationOptions, + GetUsersInUniverseTeamCreate, + GetUsersInUniverseTeamCreateOptions, + MultiGetUniverses, + MultiGetUniversesOptions, + MultiGetUniversesPermissions, + MultiGetUniversesPermissionsOptions, + PublishGameNotification, + PublishGameNotificationOptions, + RemoveUserFromUniverseTeamCreate, + RemoveUserFromUniverseTeamCreateOptions, + SearchToolbox, + SearchToolboxOptions, + SearchUniverseData, + SearchUniverses, + SearchUniversesOptions, + SetStudioData, + SetStudioDataOptions, + UpdateDeveloperProduct, + UpdateDeveloperProductOptions, + UpdatePlaceConfiguration, + UpdatePlaceConfigurationOptions, + UpdatePlugin, + UpdatePluginOptions, + UpdateUniverseAlias, + UpdateUniverseAliasOptions, + UpdateUniverseConfiguration, + UpdateUniverseConfigurationOptions, + UpdateUniverseTeamCreateSettings, + UpdateUniverseTeamCreateSettingsOptions } from "./client/apis/DevelopAPI"; export type { - GetAssetResaleData, - GetAssetResaleDataOptions, - GetAssetResellers, - GetAssetResellersOptions, - GetDeveloperExchangeAbility, - GetDeveloperExchangeHelp, - GetDeveloperExchangeInfo, - GetDeveloperExchangeInfoOptions, - GetGroupCurrency, - GetGroupCurrencyOptions, - GetGroupRevenueSummaryInTimeFrame, - GetGroupRevenueSummaryInTimeFrameOptions, - GetGroupTransactions, - GetGroupTransactionsOptions, - GetResaleTaxRate, - GetSelfCurrency, - GetSelfCurrencyOptions, - GetSelfRevenueSummaryInTimeFrame, - GetSelfRevenueSummaryInTimeFrameOptions, - GetSelfTransactions, - GetSelfTransactionsOptions, - GetUserResellableAssetCopies, - GetUserResellableAssetCopiesOptions, - SetAssetCopies, - SetAssetCopiesOptions, - SubmitDeveloperExchange, - SubmitDeveloperExchangeOptions + GetAssetResaleData, + GetAssetResaleDataOptions, + GetAssetResellers, + GetAssetResellersOptions, + GetDeveloperExchangeAbility, + GetDeveloperExchangeHelp, + GetDeveloperExchangeInfo, + GetDeveloperExchangeInfoOptions, + GetGroupCurrency, + GetGroupCurrencyOptions, + GetGroupRevenueSummaryInTimeFrame, + GetGroupRevenueSummaryInTimeFrameOptions, + GetGroupTransactions, + GetGroupTransactionsOptions, + GetResaleTaxRate, + GetSelfCurrency, + GetSelfCurrencyOptions, + GetSelfRevenueSummaryInTimeFrame, + GetSelfRevenueSummaryInTimeFrameOptions, + GetSelfTransactions, + GetSelfTransactionsOptions, + GetUserResellableAssetCopies, + GetUserResellableAssetCopiesOptions, + SetAssetCopies, + SetAssetCopiesOptions, + SubmitDeveloperExchange, + SubmitDeveloperExchangeOptions } from "./client/apis/EconomyAPI"; export type { - GetUniverseStats, - GetUniverseStatsOptions + GetUniverseStats, + GetUniverseStatsOptions } from "./client/apis/EconomyCreatorStatsAPI"; export type { - GetUniversePayoutHistory, - GetUniversePayoutHistoryOptions + GetUniversePayoutHistory, + GetUniversePayoutHistoryOptions } from "./client/apis/EngagementPayoutsAPI"; export type { - FollowUniverse, - FollowUniverseOptions, - GetUserFollowedUniverses, - GetUserFollowedUniversesOptions, - GetUserFollowingUniverseStatus, - GetUserFollowingUniverseStatusOptions, - UnFollowUniverse, - UnFollowUniverseOptions + FollowUniverse, + FollowUniverseOptions, + GetUserFollowedUniverses, + GetUserFollowedUniversesOptions, + GetUserFollowingUniverseStatus, + GetUserFollowingUniverseStatusOptions, + UnFollowUniverse, + UnFollowUniverseOptions } from "./client/apis/FollowingsAPI"; export type { - CheckSessionHealth, - DeclineAllFriendRequests, - DeleteQRCodeSession, - DeleteSession, - FindFriendByCode, - FindFriendByCodeOptions, - FollowUser as FriendsAPIFollowUser, - FollowUserOptions as FriendsAPIFollowUserOptions, - GetMetaData, - GetMetaDataOptions, - GetOrCreateNearbySession, - GetOrCreateQRCodeSession, - GetSelfFriendRequests, - GetSelfFriendRequestsCount, - GetSelfFriendRequestsOptions, - GetSelfFriendsCount, - GetSelfRecommendedUsers, - GetUserFollowers, - GetUserFollowersCount, - GetUserFollowersCountOptions, - GetUserFollowersOptions, - GetUserFollowing, - GetUserFollowingCount, - GetUserFollowingCountOptions, - GetUserFollowingOptions, - GetUserFriends as FriendsAPIGetUserFriends, - GetUserFriendsOptions as FriendsAPIGetUserFriendsOptions, - GetUserFriendsWithStatuses, - GetUserFriendsWithStatusesOptions, - GetUserOnlineFriends, - GetUserOnlineFriendsOptions, - RedeemNearbyFriendCode, - RedeemNearbyFriendCodeOptions, - RedeemQRCode, - RedeemQRCodeOptions, - SendFriendRequest as FriendsAPISendFriendRequest, - SendFriendRequestOptions as FriendsAPISendFriendRequestOptions, - UnFollowUser, - UnFollowUserOptions, - UnfriendUser as FriendsAPIUnfriendUser, - UnfriendUserOptions as FriendsAPIUnfriendUserOptions + CheckSessionHealth, + DeclineAllFriendRequests, + DeleteQRCodeSession, + DeleteSession, + FindFriendByCode, + FindFriendByCodeOptions, + FollowUser as FriendsAPIFollowUser, + FollowUserOptions as FriendsAPIFollowUserOptions, + GetMetaData, + GetMetaDataOptions, + GetOrCreateNearbySession, + GetOrCreateQRCodeSession, + GetSelfFriendRequests, + GetSelfFriendRequestsCount, + GetSelfFriendRequestsOptions, + GetSelfFriendsCount, + GetSelfRecommendedUsers, + GetUserFollowers, + GetUserFollowersCount, + GetUserFollowersCountOptions, + GetUserFollowersOptions, + GetUserFollowing, + GetUserFollowingCount, + GetUserFollowingCountOptions, + GetUserFollowingOptions, + GetUserFriends as FriendsAPIGetUserFriends, + GetUserFriendsOptions as FriendsAPIGetUserFriendsOptions, + GetUserFriendsWithStatuses, + GetUserFriendsWithStatusesOptions, + GetUserOnlineFriends, + GetUserOnlineFriendsOptions, + RedeemNearbyFriendCode, + RedeemNearbyFriendCodeOptions, + RedeemQRCode, + RedeemQRCodeOptions, + SendFriendRequest as FriendsAPISendFriendRequest, + SendFriendRequestOptions as FriendsAPISendFriendRequestOptions, + UnFollowUser, + UnFollowUserOptions, + UnfriendUser as FriendsAPIUnfriendUser, + UnfriendUserOptions as FriendsAPIUnfriendUserOptions } from "./client/apis/FriendsAPI"; export type { - GetGameAutomaticTranslationResults, - GetGameAutomaticTranslationResultsOptions, - GetGameInfo, - GetGameInfoHistory, - GetGameInfoHistoryOptions, - GetGameInfoOptions, - GetGameSourceLanguage, - GetGameSourceLanguageOptions, - GetGameSupportedLanguages, - GetGameSupportedLanguagesOptions, - GetNameDescriptionMetaData, - GetSupportedLanguagesMetaData, - ModifyGameSupportedLanguages, - ModifyGameSupportedLanguagesOptions, - ToggleAutomaticGameTranslation, - ToggleAutomaticGameTranslationOptions, - UpdateGameInfo, - UpdateGameInfoOptions, - UpdateGameSourceLanguage, - UpdateGameSourceLanguageOptions + GetGameAutomaticTranslationResults, + GetGameAutomaticTranslationResultsOptions, + GetGameInfo, + GetGameInfoHistory, + GetGameInfoHistoryOptions, + GetGameInfoOptions, + GetGameSourceLanguage, + GetGameSourceLanguageOptions, + GetGameSupportedLanguages, + GetGameSupportedLanguagesOptions, + GetNameDescriptionMetaData, + GetSupportedLanguagesMetaData, + ModifyGameSupportedLanguages, + ModifyGameSupportedLanguagesOptions, + ToggleAutomaticGameTranslation, + ToggleAutomaticGameTranslationOptions, + UpdateGameInfo, + UpdateGameInfoOptions, + UpdateGameSourceLanguage, + UpdateGameSourceLanguageOptions } from "./client/apis/GameInternationalizationAPI"; export type { - CanSelfInviteUserToVIPServer, - CanSelfInviteUserToVIPServerOptions, - CreateVIPServer, - CreateVIPServerOptions, - GameGamesProductInfo, - GameServer, - GetGameFavoriteCount, - GetGameFavoriteCountOptions, - GetGameGamePasses, - GetGameGamePassesOptions, - GetGameRecommendationsByAlgorithm, - GetGameRecommendationsByAlgorithmOptions, - GetGameRecommendationsByGame, - GetGameRecommendationsByGameOptions, - GetGameServersByType, - GetGameServersByTypeOptions, - GetGameSorts, - GetGameSortsOptions, - GetGameUniverses, - GetGameUniversesOptions, - GetGamesProductInfoOptions, - GetGamesVotes, - GetGamesVotesOptions, - GetSelfUniverseVoteStatus, - GetSelfUniverseVoteStatusOptions, - GetVIPServer, - GetVIPServerOptions, - IsGameFavorited, - IsGameFavoritedOptions, - ListGames, - ListGamesOptions, - MultiGetGameUniversesPlayability, - MultiGetGameUniversesPlayabilityOptions, - MultiGetPlaces, - MultiGetPlacesOptions, - SetSelfGameVote, - SetSelfGameVoteOptions, - ToggleGameFavorite, - ToggleGameFavoriteOptions, - UpdateVIPServer, - UpdateVIPServerOptions, - UpdateVIPServerPermissions, - UpdateVIPServerPermissionsOptions, - UpdateVIPServerSubscription, - UpdateVIPServerSubscriptionOptions + CanSelfInviteUserToVIPServer, + CanSelfInviteUserToVIPServerOptions, + CreateVIPServer, + CreateVIPServerOptions, + GameGamesProductInfo, + GameServer, + GetGameFavoriteCount, + GetGameFavoriteCountOptions, + GetGameGamePasses, + GetGameGamePassesOptions, + GetGameRecommendationsByAlgorithm, + GetGameRecommendationsByAlgorithmOptions, + GetGameRecommendationsByGame, + GetGameRecommendationsByGameOptions, + GetGameServersByType, + GetGameServersByTypeOptions, + GetGameSorts, + GetGameSortsOptions, + GetGameUniverses, + GetGameUniversesOptions, + GetGamesProductInfoOptions, + GetGamesVotes, + GetGamesVotesOptions, + GetSelfUniverseVoteStatus, + GetSelfUniverseVoteStatusOptions, + GetVIPServer, + GetVIPServerOptions, + IsGameFavorited, + IsGameFavoritedOptions, + ListGames, + ListGamesOptions, + MultiGetGameUniversesPlayability, + MultiGetGameUniversesPlayabilityOptions, + MultiGetPlaces, + MultiGetPlacesOptions, + SetSelfGameVote, + SetSelfGameVoteOptions, + ToggleGameFavorite, + ToggleGameFavoriteOptions, + UpdateVIPServer, + UpdateVIPServerOptions, + UpdateVIPServerPermissions, + UpdateVIPServerPermissionsOptions, + UpdateVIPServerSubscription, + UpdateVIPServerSubscriptionOptions } from "./client/apis/GamesAPI"; export type { - AcceptFriendRequest, - AcceptFriendRequestOptions, - AwardBadge, - AwardBadgeOptions, - BlockUser, - BlockUserOptions, - DeclineFriendRequest, - DeclineFriendRequestOptions, - FollowUser, - FollowUserOptions, - GetAssetVersionOptions, - GetAssetVersions, - GetBalance, - GetDeviceInfo, - GetGamePassProductInfo, - GetGamePassProductInfoOptions, - GetGroup as GeneralAPIGetGroup, - GetGroupAllies, - GetGroupAlliesOptions, - GetGroupEnemies, - GetGroupEnemiesOptions, - GetGroupOptions as GeneralAPIGetGroupOptions, - GetIncomingItems, - GetProductInfo, - GetProductInfoOptions, - GetUserById as GeneralAPIGetUserById, - GetUserByIdOptions as GeneralAPIGetUserByIdOptions, - GetUserByUsername, - GetUserByUsernameOptions, - GetUserFriends, - GetUserFriendsCount, - GetUserFriendsCountOptions, - GetUserFriendsOptions, - GetUserGroups as GeneralAPIGetUserGroups, - GetUserGroupsOptions as GeneralAPIGetUserGroupsOptions, - IsUserFollowing, - IsUserFollowingOptions, - SendFriendRequest, - SendFriendRequestOptions, - UnblockUser, - UnblockUserOptions, - UnfollowUser, - UnfollowUserOptions, - UnfriendUser, - UnfriendUserOptions, - UserCanManageAsset, - UserCanManageAssetOptions, - UserOwnsAsset, - UserOwnsAssetOptions + AcceptFriendRequest, + AcceptFriendRequestOptions, + AwardBadge, + AwardBadgeOptions, + BlockUser, + BlockUserOptions, + DeclineFriendRequest, + DeclineFriendRequestOptions, + FollowUser, + FollowUserOptions, + GetAssetVersionOptions, + GetAssetVersions, + GetBalance, + GetDeviceInfo, + GetGamePassProductInfo, + GetGamePassProductInfoOptions, + GetGroup as GeneralAPIGetGroup, + GetGroupAllies, + GetGroupAlliesOptions, + GetGroupEnemies, + GetGroupEnemiesOptions, + GetGroupOptions as GeneralAPIGetGroupOptions, + GetIncomingItems, + GetProductInfo, + GetProductInfoOptions, + GetUserById as GeneralAPIGetUserById, + GetUserByIdOptions as GeneralAPIGetUserByIdOptions, + GetUserByUsername, + GetUserByUsernameOptions, + GetUserFriends, + GetUserFriendsCount, + GetUserFriendsCountOptions, + GetUserFriendsOptions, + GetUserGroups as GeneralAPIGetUserGroups, + GetUserGroupsOptions as GeneralAPIGetUserGroupsOptions, + IsUserFollowing, + IsUserFollowingOptions, + SendFriendRequest, + SendFriendRequestOptions, + UnblockUser, + UnblockUserOptions, + UnfollowUser, + UnfollowUserOptions, + UnfriendUser, + UnfriendUserOptions, + UserCanManageAsset, + UserCanManageAssetOptions, + UserOwnsAsset, + UserOwnsAssetOptions } from "./client/apis/GeneralAPI"; export type { - AcceptJoinRequest, - AcceptJoinRequestOptions, - AcceptJoinRequests, - AcceptJoinRequestsOptions, - AcceptRelationshipRequest, - AcceptRelationshipRequestOptions, - AcceptRelationshipRequests, - AcceptRelationshipRequestsOptions, - ChangeOwner, - ChangeOwnerOptions, - ClaimGroup, - ClaimGroupOptions, - CreateGroup, - CreateGroupOptions, - CreateRelationship, - CreateRelationshipOptions, - CreateRole, - CreateRoleOptions, - CreateWallPost, - CreateWallPostOptions, - DeclineJoinRequest, - DeclineJoinRequestOptions, - DeclineJoinRequests, - DeclineJoinRequestsOptions, - DeclineRelationshipRequest, - DeclineRelationshipRequestOptions, - DeclineRelationshipRequests, - DeclineRelationshipRequestsOptions, - DeleteRelationship, - DeleteRelationshipOptions, - DeleteRole, - DeleteRoleOptions, - DeleteSocialLink, - DeleteSocialLinkOptions, - DeleteWallPost, - DeleteWallPostOptions, - DeleteWallPostsByUser, - DeleteWallPostsByUserOptions, - GetAllRolesPermissions, - GetAllRolesPermissionsOptions, - GetGroup, - GetGroupAuditLogs, - GetGroupAuditLogsOptions, - GetGroupConfigurationMetaData, - GetGroupOptions, - GetGroupPayouts, - GetGroupPayoutsOptions, - GetGroupRelationships, - GetGroupRelationshipsOptions, - GetGroupRoles, - GetGroupRolesOptions, - GetGroupSearchMetaData, - GetGroupSettings, - GetGroupSettingsOptions, - GetGroupsMetaData, - GetGuestPermissions, - GetGuestPermissionsOptions, - GetJoinRequest, - GetJoinRequestOptions, - GetJoinRequests, - GetJoinRequestsOptions, - GetMembers, - GetMembersOptions, - GetMembersWithRole, - GetMembersWithRoleOptions, - GetMultiGroups, - GetMultiGroupsOptions, - GetRelationshipRequests, - GetRelationshipRequestsOptions, - GetRolePermissions, - GetRolePermissionsOptions, - GetRolesByIds, - GetRolesByIdsOptions, - GetSelfGroupMembership, - GetSelfGroupMembershipOptions, - GetSelfPendingGroupJoins, - GetSocialLinks, - GetSocialLinksOptions, - GetUserGroups, - GetUserGroupsOptions, - GetUserPrimaryGroup, - GetUserPrimaryGroupOptions, - GetWallPosts, - GetWallPostsOptions, - JoinGroup, - JoinGroupOptions, - KickMember, - KickMemberOptions, - PayoutMembers, - PayoutMembersOptions, - PostSocialLink, - PostSocialLinkOptions, - RemovePrimaryGroup, - SearchGroups, - SearchGroupsByKeyword, - SearchGroupsByKeywordOptions, - SearchGroupsOptions, - SetPrimaryGroup, - SetPrimaryGroupOptions, - UpdateGroupDescription, - UpdateGroupDescriptionOptions, - UpdateGroupIcon, - UpdateGroupIconOptions, - UpdateGroupSettings, - UpdateGroupSettingsOptions, - UpdateGroupStatus, - UpdateGroupStatusOptions, - UpdateMember, - UpdateMemberOptions, - UpdateRecurringPayouts, - UpdateRecurringPayoutsOptions, - UpdateRole, - UpdateRoleOptions, - UpdateRolePermissions, - UpdateRolePermissionsOptions, - UpdateSocialLink, - UpdateSocialLinkOptions + AcceptJoinRequest, + AcceptJoinRequestOptions, + AcceptJoinRequests, + AcceptJoinRequestsOptions, + AcceptRelationshipRequest, + AcceptRelationshipRequestOptions, + AcceptRelationshipRequests, + AcceptRelationshipRequestsOptions, + ChangeOwner, + ChangeOwnerOptions, + ClaimGroup, + ClaimGroupOptions, + CreateGroup, + CreateGroupOptions, + CreateRelationship, + CreateRelationshipOptions, + CreateRole, + CreateRoleOptions, + CreateWallPost, + CreateWallPostOptions, + DeclineJoinRequest, + DeclineJoinRequestOptions, + DeclineJoinRequests, + DeclineJoinRequestsOptions, + DeclineRelationshipRequest, + DeclineRelationshipRequestOptions, + DeclineRelationshipRequests, + DeclineRelationshipRequestsOptions, + DeleteRelationship, + DeleteRelationshipOptions, + DeleteRole, + DeleteRoleOptions, + DeleteSocialLink, + DeleteSocialLinkOptions, + DeleteWallPost, + DeleteWallPostOptions, + DeleteWallPostsByUser, + DeleteWallPostsByUserOptions, + GetAllRolesPermissions, + GetAllRolesPermissionsOptions, + GetGroup, + GetGroupAuditLogs, + GetGroupAuditLogsOptions, + GetGroupConfigurationMetaData, + GetGroupOptions, + GetGroupPayouts, + GetGroupPayoutsOptions, + GetGroupRelationships, + GetGroupRelationshipsOptions, + GetGroupRoles, + GetGroupRolesOptions, + GetGroupSearchMetaData, + GetGroupSettings, + GetGroupSettingsOptions, + GetGroupsMetaData, + GetGuestPermissions, + GetGuestPermissionsOptions, + GetJoinRequest, + GetJoinRequestOptions, + GetJoinRequests, + GetJoinRequestsOptions, + GetMembers, + GetMembersOptions, + GetMembersWithRole, + GetMembersWithRoleOptions, + GetMultiGroups, + GetMultiGroupsOptions, + GetRelationshipRequests, + GetRelationshipRequestsOptions, + GetRolePermissions, + GetRolePermissionsOptions, + GetRolesByIds, + GetRolesByIdsOptions, + GetSelfGroupMembership, + GetSelfGroupMembershipOptions, + GetSelfPendingGroupJoins, + GetSocialLinks, + GetSocialLinksOptions, + GetUserGroups, + GetUserGroupsOptions, + GetUserPrimaryGroup, + GetUserPrimaryGroupOptions, + GetWallPosts, + GetWallPostsOptions, + JoinGroup, + JoinGroupOptions, + KickMember, + KickMemberOptions, + PayoutMembers, + PayoutMembersOptions, + PostSocialLink, + PostSocialLinkOptions, + RemovePrimaryGroup, + SearchGroups, + SearchGroupsByKeyword, + SearchGroupsByKeywordOptions, + SearchGroupsOptions, + SetPrimaryGroup, + SetPrimaryGroupOptions, + UpdateGroupDescription, + UpdateGroupDescriptionOptions, + UpdateGroupIcon, + UpdateGroupIconOptions, + UpdateGroupSettings, + UpdateGroupSettingsOptions, + UpdateGroupStatus, + UpdateGroupStatusOptions, + UpdateMember, + UpdateMemberOptions, + UpdateRecurringPayouts, + UpdateRecurringPayoutsOptions, + UpdateRole, + UpdateRoleOptions, + UpdateRolePermissions, + UpdateRolePermissionsOptions, + UpdateSocialLink, + UpdateSocialLinkOptions } from "./client/apis/GroupsAPI"; export type { - GetAssetOwners, - GetAssetOwnersOptions, - GetPackageAssets, - GetPackageAssetsOptions, - GetUserCollectibles, - GetUserCollectiblesOptions, - GetUserInventory, - GetUserInventoryByAssetTypeId, - GetUserInventoryByAssetTypeIdOptions, - GetUserInventoryOptions, - GetUserItemsByTypeAndTargetId, - GetUserItemsByTypeAndTargetIdOptions + GetAssetOwners, + GetAssetOwnersOptions, + GetPackageAssets, + GetPackageAssetsOptions, + GetUserCollectibles, + GetUserCollectiblesOptions, + GetUserInventory, + GetUserInventoryByAssetTypeId, + GetUserInventoryByAssetTypeIdOptions, + GetUserInventoryOptions, + GetUserItemsByTypeAndTargetId, + GetUserItemsByTypeAndTargetIdOptions } from "./client/apis/InventoryAPI"; export type { - CreateItemTag, - CreateItemTagOptions, - DeleteItemTag, - DeleteItemTagOptions, - GetCreatedAssets, - GetCreatedAssetsOptions, - GetItemTagsByItemIds, - GetItemTagsByItemIdsOptions, - GetItemTagsMetaData, - GetMultiCreatedAssetDetails, - GetMultiCreatedAssetDetailsOptions, - GetTagsByTagIds, - GetTagsByTagIdsOptions, - SearchTags, - SearchTagsOptions + CreateItemTag, + CreateItemTagOptions, + DeleteItemTag, + DeleteItemTagOptions, + GetCreatedAssets, + GetCreatedAssetsOptions, + GetItemTagsByItemIds, + GetItemTagsByItemIdsOptions, + GetItemTagsMetaData, + GetMultiCreatedAssetDetails, + GetMultiCreatedAssetDetailsOptions, + GetTagsByTagIds, + GetTagsByTagIdsOptions, + SearchTags, + SearchTagsOptions } from "./client/apis/ItemConfigurationAPI"; export type { - GetCountryRegions, - GetCountryRegionsOptions, - GetLocales, - GetLocalesOptions, - GetLocusSupportedLocales, - GetSupportedLocales, - GetUserLocale, - SetUserLocale, - SetUserLocaleOptions + GetCountryRegions, + GetCountryRegionsOptions, + GetLocales, + GetLocalesOptions, + GetLocusSupportedLocales, + GetSupportedLocales, + GetUserLocale, + SetUserLocale, + SetUserLocaleOptions } from "./client/apis/LocaleAPI"; export type { - GetThumbnailsMetaData, - RecordBundleLoad, - RecordBundleLoadOptions, - RecordThumbnailLoad, - RecordThumbnailLoadOptions + GetThumbnailsMetaData, + RecordBundleLoad, + RecordBundleLoadOptions, + RecordThumbnailLoad, + RecordThumbnailLoadOptions } from "./client/apis/MetricsAPI"; export type { - AllowNotificationSource, - AllowNotificationSourceOptions, - AllowNotificationsDestination, - AllowNotificationsDestinationOptions, - ClearUnreadStreamNotifications, - DeregisterAllDevices, - DeregisterCurrentDevice, - DisallowNotificationSource, - DisallowNotificationSourceOptions, - DisallowNotificationsDestination, - DisallowNotificationsDestinationOptions, - GetChromeNotificationsManifest, - GetCurrentNotificationDeviceDestination, - GetLatestUniverseUpdates, - GetLatestUniversesUpdatesOptions, - GetNotificationDestinations, - GetNotificationIds, - GetNotificationIdsOptions, - GetNotificationsMetaData, - GetNotificationsMetaDataOptions, - GetNotificationsSettings, - GetRealtimeNotificationsSettings, - GetRecentStreamNotifications, - GetRecentStreamNotificationsOptions, - GetStreamNotificationsMetaData, - GetStreamNotificationsPromptSettings, - GetStreamNotificationsUnreadCount, - MarkNotificationCategoryRead, - MarkNotificationCategoryReadOptions, - MarkNotificationInteraction, - MarkNotificationInteractionOptions, - MarkNotificationRead, - MarkNotificationReadOptions, - MarkStreamNotificationInteracted, - MarkStreamNotificationInteractedOptions, - RegisterAmazonAndroid, - RegisterAmazonAndroidOptions, - RegisterAndroidNative, - RegisterAndroidNativeOptions, - RegisterAndroidTencentService, - RegisterAndroidTencentServiceOptions, - RegisterChrome, - RegisterChromeOptions, - RegisterFirefox, - RegisterFirefoxOptions, - RegisterIOSNative, - RegisterIOSNativeOptions, - SendGameUpdateNotificationInteracted, - SendGameUpdateNotificationInteractedOptions, - SendGameUpdateNotificationRead, - SendGameUpdateNotificationReadOptions, - SuppressStreamNotificationsPrompt, - UpdateNotificationDestinationSettings, - UpdateNotificationDestinationSettingsOptions, - UpdateNotificationSettings, - UpdateNotificationSettingsOptions + AllowNotificationSource, + AllowNotificationSourceOptions, + AllowNotificationsDestination, + AllowNotificationsDestinationOptions, + ClearUnreadStreamNotifications, + DeregisterAllDevices, + DeregisterCurrentDevice, + DisallowNotificationSource, + DisallowNotificationSourceOptions, + DisallowNotificationsDestination, + DisallowNotificationsDestinationOptions, + GetChromeNotificationsManifest, + GetCurrentNotificationDeviceDestination, + GetLatestUniverseUpdates, + GetLatestUniversesUpdatesOptions, + GetNotificationDestinations, + GetNotificationIds, + GetNotificationIdsOptions, + GetNotificationsMetaData, + GetNotificationsMetaDataOptions, + GetNotificationsSettings, + GetRealtimeNotificationsSettings, + GetRecentStreamNotifications, + GetRecentStreamNotificationsOptions, + GetStreamNotificationsMetaData, + GetStreamNotificationsPromptSettings, + GetStreamNotificationsUnreadCount, + MarkNotificationCategoryRead, + MarkNotificationCategoryReadOptions, + MarkNotificationInteraction, + MarkNotificationInteractionOptions, + MarkNotificationRead, + MarkNotificationReadOptions, + MarkStreamNotificationInteracted, + MarkStreamNotificationInteractedOptions, + RegisterAmazonAndroid, + RegisterAmazonAndroidOptions, + RegisterAndroidNative, + RegisterAndroidNativeOptions, + RegisterAndroidTencentService, + RegisterAndroidTencentServiceOptions, + RegisterChrome, + RegisterChromeOptions, + RegisterFirefox, + RegisterFirefoxOptions, + RegisterIOSNative, + RegisterIOSNativeOptions, + SendGameUpdateNotificationInteracted, + SendGameUpdateNotificationInteractedOptions, + SendGameUpdateNotificationRead, + SendGameUpdateNotificationReadOptions, + SuppressStreamNotificationsPrompt, + UpdateNotificationDestinationSettings, + UpdateNotificationDestinationSettingsOptions, + UpdateNotificationSettings, + UpdateNotificationSettingsOptions } from "./client/apis/NotificationsAPI"; export type { - GetUserProfileHeader, - GetUserProfileHeaderOptions + GetUserProfileHeader, + GetUserProfileHeaderOptions } from "./client/apis/OtherAPI"; export type { - PremiumUpsellCheck, - PremiumUpsellCheckOptions, - ValidateUserMembership, - ValidateUserMembershipOptions + PremiumUpsellCheck, + PremiumUpsellCheckOptions, + ValidateUserMembership, + ValidateUserMembershipOptions } from "./client/apis/PremiumFeaturesAPI"; export type { - GetUsersPresences, - GetUsersPresencesOptions, - RegisterAppPresence, - RegisterAppPresenceOptions + GetUsersPresences, + GetUsersPresencesOptions, + RegisterAppPresence, + RegisterAppPresenceOptions } from "./client/apis/PresenceAPI"; export type { - ArchiveMessages, - ArchiveMessagesOptions, - GetAnnouncements, - GetAnnouncementsMetaData, - GetMessage, - GetMessageOptions, - GetMessages, - GetMessagesOptions, - GetUnreadMessagesCount, - MarkMessagesRead, - MarkMessagesReadOptions, - MarkMessagesUnread, - MarkMessagesUnreadOptions, - SendMessage, - SendMessageOptions, - UnArchiveMessages, - UnArchiveMessagesOptions + ArchiveMessages, + ArchiveMessagesOptions, + GetAnnouncements, + GetAnnouncementsMetaData, + GetMessage, + GetMessageOptions, + GetMessages, + GetMessagesOptions, + GetUnreadMessagesCount, + MarkMessagesRead, + MarkMessagesReadOptions, + MarkMessagesUnread, + MarkMessagesUnreadOptions, + SendMessage, + SendMessageOptions, + UnArchiveMessages, + UnArchiveMessagesOptions } from "./client/apis/PrivateMessagesAPI"; export type { - PublishAudio, - PublishAudioOptions, - PublishBadgeIcon, - PublishBadgeIconOptions, - PublishGamePassIcon, - PublishGamePassIconOptions, - UploadAssets, - UploadAssetsOptions, - UploadGameThumbnail, - UploadGameThumbnailOptions, - UploadPluginIcon, - UploadPluginIconOptions, - VerifyAudio, - VerifyAudioOptions + PublishAudio, + PublishAudioOptions, + PublishBadgeIcon, + PublishBadgeIconOptions, + PublishGamePassIcon, + PublishGamePassIconOptions, + UploadAssets, + UploadAssetsOptions, + UploadGameThumbnail, + UploadGameThumbnailOptions, + UploadPluginIcon, + UploadPluginIconOptions, + VerifyAudio, + VerifyAudioOptions } from "./client/apis/PublishAPI"; export type { - GetAssetsThumbnails, - GetAssetsThumbnailsOptions, - GetBadgesIcons, - GetBadgesIconsOptions, - GetBatchImages, - GetBatchImagesOptions, - GetBundlesThumbnails, - GetBundlesThumbnailsOptions, - GetDeveloperProductsIcons, - GetDeveloperProductsIconsOptions, - GetGamePassesIcons, - GetGamePassesIconsOptions, - GetGroupsIcons, - GetGroupsIconsOptions, - GetUniverseThumbnails, - GetUniverseThumbnailsOptions, - GetUniversesRootPlaceThumbnails, - GetUniversesRootPlaceThumbnailsOptions, - GetUniversesThumbnails, - GetUniversesThumbnailsOptions, - GetUsersAvatarBustImages, - GetUsersAvatarBustImagesOptions, - GetUsersAvatarHeadShotsImages, - GetUsersAvatarHeadShotsImagesOptions, - GetUsersFullBodyAvatarImages, - GetUsersFullBodyAvatarImagesOptions, - GetUsersOutfitsImages, - GetUsersOutfitsImagesOptions + GetAssetsThumbnails, + GetAssetsThumbnailsOptions, + GetBadgesIcons, + GetBadgesIconsOptions, + GetBatchImages, + GetBatchImagesOptions, + GetBundlesThumbnails, + GetBundlesThumbnailsOptions, + GetDeveloperProductsIcons, + GetDeveloperProductsIconsOptions, + GetGamePassesIcons, + GetGamePassesIconsOptions, + GetGroupsIcons, + GetGroupsIconsOptions, + GetUniverseThumbnails, + GetUniverseThumbnailsOptions, + GetUniversesRootPlaceThumbnails, + GetUniversesRootPlaceThumbnailsOptions, + GetUniversesThumbnails, + GetUniversesThumbnailsOptions, + GetUsersAvatarBustImages, + GetUsersAvatarBustImagesOptions, + GetUsersAvatarHeadShotsImages, + GetUsersAvatarHeadShotsImagesOptions, + GetUsersFullBodyAvatarImages, + GetUsersFullBodyAvatarImagesOptions, + GetUsersOutfitsImages, + GetUsersOutfitsImagesOptions } from "./client/apis/ThumbnailsAPI"; export type { - AcceptTrade, - AcceptTradeOptions, - CanSelfTradeWithUser, - CanSelfTradeWithUserOptions, - CounterTrade, - CounterTradeOptions, - DeclineTrade, - DeclineTradeOptions, - GetTrade, - GetTradeOptions, - GetTradesByStatusType, - GetTradesByStatusTypeOptions, - GetTradesCountByStatusType, - GetTradesCountByStatusTypeOptions, - GetTradesMetaData, - SendTrade, - SendTradeOptions + AcceptTrade, + AcceptTradeOptions, + CanSelfTradeWithUser, + CanSelfTradeWithUserOptions, + CounterTrade, + CounterTradeOptions, + DeclineTrade, + DeclineTradeOptions, + GetTrade, + GetTradeOptions, + GetTradesByStatusType, + GetTradesByStatusTypeOptions, + GetTradesCountByStatusType, + GetTradesCountByStatusTypeOptions, + GetTradesMetaData, + SendTrade, + SendTradeOptions } from "./client/apis/TradesAPI"; export type { - GetGameRoleAssignees, - GetGameRoleAssigneesOptions, - GetSelfGameRoles, - GetSelfGameRolesOptions, - GetSelfGamesAccessByRole, - GetSelfGamesAccessByRoleOptions, - UpdateUser, - UpdateUserAccess + GetGameRoleAssignees, + GetGameRoleAssigneesOptions, + GetSelfGameRoles, + GetSelfGameRolesOptions, + GetSelfGamesAccessByRole, + GetSelfGamesAccessByRoleOptions, + UpdateUser, + UpdateUserAccess } from "./client/apis/TranslationRolesAPI"; export type { - AuthenticatorDisable, - AuthenticatorDisableOptions, - AuthenticatorEnable, - AuthenticatorEnableOptions, - AuthenticatorVerify, - AuthenticatorVerifyOptions, - AuthenticatorVerifySetup, - AuthenticatorVerifySetupOptions, - EmailDisable, - EmailDisableOptions, - EmailEnable, - EmailEnableOptions, - EmailSendCode, - EmailSendCodeOptions, - EmailVerify, - EmailVerifyOptions, - GetTwoStepConfiguration, - GetTwoStepConfigurationOptions, - GetTwoStepVerificationMetaData, - GetTwoStepVerificationMetaDataOptions + AuthenticatorDisable, + AuthenticatorDisableOptions, + AuthenticatorEnable, + AuthenticatorEnableOptions, + AuthenticatorVerify, + AuthenticatorVerifyOptions, + AuthenticatorVerifySetup, + AuthenticatorVerifySetupOptions, + EmailDisable, + EmailDisableOptions, + EmailEnable, + EmailEnableOptions, + EmailSendCode, + EmailSendCodeOptions, + EmailVerify, + EmailVerifyOptions, + GetTwoStepConfiguration, + GetTwoStepConfigurationOptions, + GetTwoStepVerificationMetaData, + GetTwoStepVerificationMetaDataOptions } from "./client/apis/TwoStepVerificationAPI"; export type { - GetSelfAuthenticatedUserInformation, - GetUserById, - GetUserByIdOptions, - GetUserStatus, - GetUserStatusOptions, - GetUsersByUserIds, - GetUsersByUserIdsOptions, - GetUsersByUsernames, - GetUsersByUsernamesOptions, - SearchUsers, - SearchUsersOptions, - SetSelfDisplayName, - SetSelfDisplayNameOptions, - UpdateSelfStatus, - UpdateSelfStatusOptions, - ValidateDisplayNameExistingUser, - ValidateDisplayNameExistingUserOptions, - ValidateDisplayNameNewUser, - ValidateDisplayNameNewUserOptions + GetSelfAuthenticatedUserInformation, + GetUserById, + GetUserByIdOptions, + GetUserStatus, + GetUserStatusOptions, + GetUsersByUserIds, + GetUsersByUserIdsOptions, + GetUsersByUsernames, + GetUsersByUsernamesOptions, + SearchUsers, + SearchUsersOptions, + SetSelfDisplayName, + SetSelfDisplayNameOptions, + UpdateSelfStatus, + UpdateSelfStatusOptions, + ValidateDisplayNameExistingUser, + ValidateDisplayNameExistingUserOptions, + ValidateDisplayNameNewUser, + ValidateDisplayNameNewUserOptions } from "./client/apis/UsersAPI"; diff --git a/src/interfaces/APIInterfaces.ts b/src/interfaces/APIInterfaces.ts index b549bcd74..c3af89d35 100644 --- a/src/interfaces/APIInterfaces.ts +++ b/src/interfaces/APIInterfaces.ts @@ -1,7 +1,6 @@ import { Client } from "../index"; - export declare type BaseAPIOptions = { - baseUrl: string; - client: Client; + baseUrl: string; + client: Client; }; diff --git a/src/interfaces/GeneralInterfaces.ts b/src/interfaces/GeneralInterfaces.ts index cc9f46b1a..49d32d329 100644 --- a/src/interfaces/GeneralInterfaces.ts +++ b/src/interfaces/GeneralInterfaces.ts @@ -1,21 +1,20 @@ import ClientUser from "../structures/ClientUser"; - export declare type AnyIdentifier = string | number; export declare type UserIdentifier = ClientUser | AnyIdentifier; export enum EnumUserPresence { - "Offline", - "Online", - "In Game", - "In Studio" + "Offline", + "Online", + "In Game", + "In Studio" } export interface UserPresence { - UserPresenceType: "InGame" | "InStudio" | "Online" | "Offline"; - UserLocationType: "Game"; - lastLocation?: string; - placeId?: number; - rootPlaceId?: number; - gameInstanceId?: string; - universeId?: number; - lastOnline?: string; + UserPresenceType: "InGame" | "InStudio" | "Online" | "Offline"; + UserLocationType: "Game"; + lastLocation?: string; + placeId?: number; + rootPlaceId?: number; + gameInstanceId?: string; + universeId?: number; + lastOnline?: string; } diff --git a/src/interfaces/RESTInterfaces.ts b/src/interfaces/RESTInterfaces.ts index 3e306e390..504979a7f 100644 --- a/src/interfaces/RESTInterfaces.ts +++ b/src/interfaces/RESTInterfaces.ts @@ -1,166 +1,174 @@ import RESTRequest from "../controllers/rest/request"; import RESTResponse from "../controllers/rest/response"; - -export declare type RESTRequester = (requestOptions: RESTRequestOptions) => Promise; -export declare type RESTRequestHandler = (request: RESTRequest) => boolean | Error; -export declare type RESTResponseHandler = (response: RESTResponse) => boolean | Error; +export declare type RESTRequester = ( + requestOptions: RESTRequestOptions +) => Promise; +export declare type RESTRequestHandler = ( + request: RESTRequest +) => boolean | Error; +export declare type RESTResponseHandler = ( + response: RESTResponse +) => boolean | Error; export declare type RESTControllerOptions = { - requester: (requestOptions: RESTRequestOptions) => Promise; - /** - * If specified, the user agent that will be used for the requests - */ - userAgent?: string; - /** - * If specified, the url which the request will be proxied through - */ - proxy?: string; - /** - * The current XCSRF token - */ - xcsrf?: string; - /** - * The time in ms when the xcsrf was last set - */ - xcsrfSet?: number; - /** - * Refresh interval in ms for XCSRF token updating - */ - xcsrfRefreshInterval?: number; - /** - * The amount of retries to be made to refresh XCSRF - * tokens on Token Validation errors - */ - xcsrfRefreshMaxRetries?: number; + requester?: ( + requestOptions: RESTRequestOptions + ) => Promise; + /** + * If specified, the user agent that will be used for the requests + */ + userAgent?: string; + /** + * If specified, the url which the request will be proxied through + */ + proxy?: string; + /** + * The current XCSRF token + */ + xcsrf?: string; + /** + * The time in ms when the xcsrf was last set + */ + xcsrfSet?: number; + /** + * Refresh interval in ms for XCSRF token updating + */ + xcsrfRefreshInterval?: number; + /** + * The amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + */ + xcsrfRefreshMaxRetries?: number; }; export declare type RESTCreateCookieOptions = { - key: string; - value: string; - domain: string; - hostOnly: boolean; - httpOnly: boolean; + key: string; + value: string; + domain: string; + hostOnly: boolean; + httpOnly: boolean; }; export declare type RESTRequestOptions = { - /** - * The URL to send the request to - */ - url: string; - /** - * The request method to use - */ - method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | string; - /** - * The proxy to use - */ - proxy?: string; - /** - * If the request should follow all redirects - */ - followAllRedirects?: boolean; - /** - * Roblox's "old" verification system with general verification tokens - */ - verification?: string; - /** - * An "overriding" user agent for the request - */ - userAgent?: string; - /** - * Add some custom headers that will override / merge with the "base" headers - */ - headers?: { [key: string]: unknown }; - /** - * The JSON body - */ - json?: unknown[] | { [key: string]: unknown } | string; - body?: unknown; - /** - * The form body - */ - form?: { [key: string]: unknown }; - /** - * The form data body - */ - formData?: { [key: string]: unknown }; - /** - * Any query params? - */ - qs?: { [key: string]: unknown }; - /** - * Sets the state of any checks - */ - checks?: RESTResponseOptions["checks"]; - /** - * If you want to use a "custom" xcsrf token - */ - xcsrf?: string | boolean; - /** - * The optional response options - */ - responseOptions?: RESTResponseOptions; - /** - * If it should throw http errors if the statuscode is != 200 - */ - throwHttpErrors?: boolean; - /** - * If it should exclude the cookies from being included in the requests - */ - excludeCookies?: boolean; + /** + * The URL to send the request to + */ + url: string; + /** + * The request method to use + */ + method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | string; + /** + * The proxy to use + */ + proxy?: string; + /** + * If the request should follow all redirects + */ + followAllRedirects?: boolean; + /** + * Roblox's "old" verification system with general verification tokens + */ + verification?: string; + /** + * An "overriding" user agent for the request + */ + userAgent?: string; + /** + * Add some custom headers that will override / merge with the "base" headers + */ + headers?: { [key: string]: unknown }; + /** + * The JSON body + */ + json?: unknown[] | { [key: string]: unknown } | string; + body?: unknown; + /** + * The form body + */ + form?: { [key: string]: unknown }; + /** + * The form data body + */ + formData?: { [key: string]: unknown }; + /** + * Any query params? + */ + qs?: { [key: string]: unknown }; + /** + * Sets the state of any checks + */ + checks?: RESTResponseOptions["checks"]; + /** + * If you want to use a "custom" xcsrf token + */ + xcsrf?: string | boolean; + /** + * The optional response options + */ + responseOptions?: RESTResponseOptions; + /** + * If it should throw http errors if the statuscode is != 200 + */ + throwHttpErrors?: boolean; + /** + * If it should exclude the cookies from being included in the requests + */ + excludeCookies?: boolean; }; export declare type RESTResponseOptions = { - allowedStatusCodes?: number[]; - disallowedStatusCodes?: number[]; - allowedStatusMessages?: string[]; - disallowedStatusMessages?: string[]; - onlyJSON?: boolean; - checks?: { - xcsrf?: boolean; - statusMessage?: boolean; - statusCode?: boolean; - body?: boolean; - captcha?: boolean; - }; + allowedStatusCodes?: number[]; + disallowedStatusCodes?: number[]; + allowedStatusMessages?: string[]; + disallowedStatusMessages?: string[]; + onlyJSON?: boolean; + checks?: { + xcsrf?: boolean; + statusMessage?: boolean; + statusCode?: boolean; + body?: boolean; + captcha?: boolean; + }; }; export declare type RESTResponseDataType = { - body: any; - statusMessage: string; - statusCode: number; - headers: Record; + body: any; + statusMessage: string; + statusCode: number; + headers: Record; }; export const DefaultRESTResponseOptions = { - allowedStatusCodes: [200] + allowedStatusCodes: [200] }; export const DefaultRESTRequestOptions = { - checks: { - xcsrf: true, - statusMessage: true, - statusCode: true, - body: true, - captcha: true - }, - headers: {}, - method: "GET", - responseOptions: DefaultRESTResponseOptions + checks: { + xcsrf: true, + statusMessage: true, + statusCode: true, + body: true, + captcha: true + }, + headers: {}, + method: "GET", + responseOptions: DefaultRESTResponseOptions }; export const DefaultCreateCookieOptions = { - domain: ".roblox.com", - hostOnly: false, - httpOnly: false + domain: ".roblox.com", + hostOnly: false, + httpOnly: false }; export const DefaultRESTControllerOptions = { - userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", - proxy: undefined, - xcsrf: undefined, - xcsrfSet: undefined, - xcsrfRefreshInterval: 5 * 60 * 1000, - xcsrfRefreshMaxRetries: 4 + userAgent: + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", + proxy: undefined, + xcsrf: undefined, + xcsrfSet: undefined, + xcsrfRefreshInterval: 5 * 60 * 1000, + xcsrfRefreshMaxRetries: 4 }; diff --git a/src/structures/Asset.ts b/src/structures/Asset.ts index d633be788..f7f7d943a 100644 --- a/src/structures/Asset.ts +++ b/src/structures/Asset.ts @@ -5,386 +5,414 @@ import { PartialUser, PartialUserOptions } from "./User"; import { ProductDetails } from "../client/apis/CatalogAPI"; import { PartialGroup, PartialGroupOptions } from "./Group"; - export interface Structures { - PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; - PartialGameUniverse: new (data: PartialGameUniverseOptions, client: Client) => PartialGameUniverse; - PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; + PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; + PartialGameUniverse: new ( + data: PartialGameUniverseOptions, + client: Client + ) => PartialGameUniverse; + PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; } - const retrieveStructures = (): Structures => ({ - PartialUser: require("./User").PartialUser, - PartialGameUniverse: require("./Game").PartialGameUniverse, - PartialGroup: require("./Group").PartialGroup + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup }); - export interface AssetVersionOptions { - Id: number; - AssetId: number; - VersionNumber: number; - ParentAssetVersionId: number; - CreatorType: unknown; - CreatingUniverseId: number | null; - Created: string; - Updated: string; + Id: number; + AssetId: number; + VersionNumber: number; + ParentAssetVersionId: number; + CreatorType: unknown; + CreatingUniverseId: number | null; + Created: string; + Updated: string; } - export class AssetVersion { - public client: Client; - public id: number; - public assetId: number; - public versionNumber: number; - public parentAssetVersionId: number | null; - public creatorType: CreatorType; - public createdForUniverse: PartialGameUniverse | null; - public creator: PartialUser; - public created: Date; - public updated: Date; - - constructor (data: any, client: Client) { - const structures = retrieveStructures(); - - - this.client = client; - this.id = data.Id; - this.assetId = data.AssetId; - this.versionNumber = data.VersionNumber; - this.parentAssetVersionId = data.ParentAssetVersionId; - this.creatorType = data.CreatorType; - this.creator = new structures.PartialUser({ - id: data.CreatorTargetId - }, this.client); - this.createdForUniverse = data.CreatingUniverseId ? new structures.PartialGameUniverse({ - id: data.CreatingUniverseId - }, client) : null; - this.created = new Date(data.Created); - this.updated = new Date(data.Updated); - } + public client: Client; + public id: number; + public assetId: number; + public versionNumber: number; + public parentAssetVersionId: number | null; + public creatorType: CreatorType; + public createdForUniverse: PartialGameUniverse | null; + public creator: PartialUser; + public created: Date; + public updated: Date; + + constructor (data: any, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.Id; + this.assetId = data.AssetId; + this.versionNumber = data.VersionNumber; + this.parentAssetVersionId = data.ParentAssetVersionId; + this.creatorType = data.CreatorType; + this.creator = new structures.PartialUser( + { + id: data.CreatorTargetId + }, + this.client + ); + this.createdForUniverse = data.CreatingUniverseId ? + new structures.PartialGameUniverse( + { + id: data.CreatingUniverseId + }, + client + ) : + null; + this.created = new Date(data.Created); + this.updated = new Date(data.Updated); + } } - export interface BundleOptions { + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; id: number; name: string; - description: string; - bundleType: string; - items: { - owned: boolean; - id: number; - name: string; - type: string; - }[]; - creator: { - id: number; - name: string; - type: string; - }; - product: ProductDetails; + type: string; + }[]; + creator: { + id: number; + name: string; + type: string; + }; + product: ProductDetails; } - export class Bundle { - public client: Client; - public id: number; - public name: string; - public description: string; - public bundleType: string; - public items: { - owned: boolean; - id: number; - name: string; - type: string; - }[]; - public creatorType: CreatorType; - public creator: PartialUser | PartialGroup; - public product: { - id: number; - type: string; - publicDomain: boolean; - forSale: boolean; - price: number; - premiumPricing: { - discount: number; - price: number; - }; + public client: Client; + public id: number; + public name: string; + public description: string; + public bundleType: string; + public items: { + owned: boolean; + id: number; + name: string; + type: string; + }[]; + public creatorType: CreatorType; + public creator: PartialUser | PartialGroup; + public product: { + id: number; + type: string; + publicDomain: boolean; + forSale: boolean; + price: number; + premiumPricing: { + discount: number; + price: number; }; - - constructor (data: BundleOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.name = data.name; - this.description = data.description; - this.bundleType = data.bundleType; - this.items = data.items.map(itemData => ({ - owned: itemData.owned, - id: itemData.id, - name: itemData.name, - type: itemData.type - })); - this.creatorType = data.creator.type.toLowerCase() === "group" ? CreatorType.GROUP : CreatorType.USER; - this.creator = this.creatorType === CreatorType.USER ? new structures.PartialUser({ + }; + + constructor (data: BundleOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.name = data.name; + this.description = data.description; + this.bundleType = data.bundleType; + this.items = data.items.map(itemData => ({ + owned: itemData.owned, + id: itemData.id, + name: itemData.name, + type: itemData.type + })); + this.creatorType = + data.creator.type.toLowerCase() === "group" ? + CreatorType.GROUP : + CreatorType.USER; + this.creator = + this.creatorType === CreatorType.USER ? + new structures.PartialUser( + { id: data.creator.id, name: data.creator.name - }, client) : new structures.PartialGroup({ + }, + client + ) : + new structures.PartialGroup( + { id: data.creator.id, name: data.creator.name - }, client); - this.product = { - id: data.product.id, - type: data.product.type, - publicDomain: data.product.isPublicDomain, - forSale: data.product.isForSale, - price: data.product.priceInRobux, - premiumPricing: { - discount: data.product.premiumPricing.premiumDiscountPercentage, - price: data.product.premiumPricing.premiumPriceInRobux - } - }; - } + }, + client + ); + this.product = { + id: data.product.id, + type: data.product.type, + publicDomain: data.product.isPublicDomain, + forSale: data.product.isForSale, + price: data.product.priceInRobux, + premiumPricing: { + discount: data.product.premiumPricing.premiumDiscountPercentage, + price: data.product.premiumPricing.premiumPriceInRobux + } + }; + } } - export interface CollectibleAssetOptions { - userAssetId: number; - serialNumber: number | null; - assetId: number; - name: string; - recentAveragePrice: number | null; - originalPrice: number | null; - assetStock: number | null; - buildersClubMembershipType: number; + userAssetId: number; + serialNumber: number | null; + assetId: number; + name: string; + recentAveragePrice: number | null; + originalPrice: number | null; + assetStock: number | null; + buildersClubMembershipType: number; } - export class CollectibleAsset { - public client: Client; - public assetId: number; - public userAssetId: number; - public name: string; - public recentAveragePrice: number | null; - public originalPrice: number | null; - public assetStock: number | null; - public buildersClubMembershipType: number; - - constructor (data: CollectibleAssetOptions, client: Client) { - this.client = client; - this.assetId = data.assetId; - this.userAssetId = data.userAssetId; - this.name = data.name; - this.recentAveragePrice = data.recentAveragePrice; - this.originalPrice = data.originalPrice; - this.assetStock = data.assetStock; - this.buildersClubMembershipType = data.buildersClubMembershipType; - } + public client: Client; + public assetId: number; + public userAssetId: number; + public name: string; + public recentAveragePrice: number | null; + public originalPrice: number | null; + public assetStock: number | null; + public buildersClubMembershipType: number; + + constructor (data: CollectibleAssetOptions, client: Client) { + this.client = client; + this.assetId = data.assetId; + this.userAssetId = data.userAssetId; + this.name = data.name; + this.recentAveragePrice = data.recentAveragePrice; + this.originalPrice = data.originalPrice; + this.assetStock = data.assetStock; + this.buildersClubMembershipType = data.buildersClubMembershipType; + } } - export type CursorPageOptions = { - limit?: 10 | 25 | 50 | 100; - cursor?: string; - sortOrder?: "Asc" | "Desc"; -} + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; type CursorPageResponse = { - data: unknown; - previousPageCursor: string | null; - nextPageCursor: string | null; -} - + data: unknown; + previousPageCursor: string | null; + nextPageCursor: string | null; +}; export class CursorPage { - public client: Client; - public options: CursorPageOptions; - public cursors: { - current: string | null; - next: string | null; - previous: string | null; + public client: Client; + public options: CursorPageOptions; + public cursors: { + current: string | null; + next: string | null; + previous: string | null; + }; + public data: T[]; + public method: any; + + constructor ( + client: Client, + options: CursorPageOptions, + response: CursorPageResponse, + method: any + ) { + this.client = client; + this.options = options; + this.cursors = { + current: options.cursor || null, + next: response.nextPageCursor || null, + previous: response.previousPageCursor || null }; - public data: T[]; - public method: any; - - constructor (client: Client, options: CursorPageOptions, response: CursorPageResponse, method: any) { - this.client = client; - this.options = options; - this.cursors = { - current: options.cursor || null, - next: response.nextPageCursor || null, - previous: response.previousPageCursor || null - }; - this.data = response.data as T[]; - this.method = method; + this.data = response.data as T[]; + this.method = method; + } + + getNext (newOptions?: CursorPageOptions): Promise> { + if (!this.cursors.next) { + throw new Error( + "Attempted to iterate to next page, but no cursor was presented for the next page" + ); } - getNext (newOptions?: CursorPageOptions): Promise> { - if (!this.cursors.next) { - throw new Error("Attempted to iterate to next page, but no cursor was presented for the next page"); - } + const options = { + ...this.options, + cursor: this.cursors.next, + ...newOptions + }; - const options = { - ...this.options, - cursor: this.cursors.next, - ...newOptions - }; + return this.method(options); + } - return this.method(options); + getPrevious (newOptions?: CursorPageOptions): Promise> { + if (!this.cursors.previous) { + throw new Error( + "Attempted to iterate to previous page, but no cursor was presented for the previous page" + ); } - getPrevious (newOptions?: CursorPageOptions): Promise> { - if (!this.cursors.previous) { - throw new Error("Attempted to iterate to previous page, but no cursor was presented for the previous page"); - } - - const options = { - ...this.options, - cursor: this.cursors.previous, - ...newOptions - }; + const options = { + ...this.options, + cursor: this.cursors.previous, + ...newOptions + }; - return this.method(options); - } + return this.method(options); + } } - export interface ProductOptions { - TargetId: number; - ProductType: string; - AssetId: number; - ProductId: number; + TargetId: number; + ProductType: string; + AssetId: number; + ProductId: number; + Name: string; + Description: string; + AssetTypeId: number; + Creator: { + Id: number; Name: string; - Description: string; - AssetTypeId: number; - Creator: { - Id: number; - Name: string; - }; - IconImageAssetId: number; - Created: string; - Updated: string; - PriceInRobux: number; - PriceInTickets: null; - Sales: number; - IsNew: boolean; - IsForSale: boolean; - IsPublicDomain: boolean; - IsLimited: boolean; - IsLimitedUnique: boolean; - Remaining: number | null; - MinimumMembershipLevel: number; + }; + IconImageAssetId: number; + Created: string; + Updated: string; + PriceInRobux: number; + PriceInTickets: null; + Sales: number; + IsNew: boolean; + IsForSale: boolean; + IsPublicDomain: boolean; + IsLimited: boolean; + IsLimitedUnique: boolean; + Remaining: number | null; + MinimumMembershipLevel: number; } - export class Product { - public client: Client; - public id: number; - public type: string; - public assetId: number; - public productId: number; - public name: string; - public description: string; - public assetTypeId: number; - public creator: PartialUser; - public iconImageAssetId: number; - public created: Date; - public updated: Date; - public price: number; - public sales: number; - public isNew: boolean; - public forSale: boolean; - public publicDomain: boolean; - public limited: boolean; - public limitedUnique: boolean; - public remaining: number | null; - public minimumMembershipLevel: number; - - constructor (data: ProductOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.TargetId; - this.type = data.ProductType; - this.assetId = data.AssetId; - this.productId = data.ProductId; - this.name = data.Name; - this.description = data.Description; - this.assetTypeId = data.AssetTypeId; - this.creator = new structures.PartialUser({ - id: data.Creator.Id, - name: data.Creator.Name - }, client); - this.iconImageAssetId = data.IconImageAssetId; - this.created = new Date(data.Created); - this.updated = new Date(data.Updated); - this.price = data.PriceInRobux; - this.sales = data.Sales; - this.isNew = data.IsNew; - this.forSale = data.IsForSale; - this.publicDomain = data.IsPublicDomain; - this.limited = data.IsLimited; - this.limitedUnique = data.IsLimitedUnique; - this.remaining = data.Remaining || null; - this.minimumMembershipLevel = data.MinimumMembershipLevel; - } + public client: Client; + public id: number; + public type: string; + public assetId: number; + public productId: number; + public name: string; + public description: string; + public assetTypeId: number; + public creator: PartialUser; + public iconImageAssetId: number; + public created: Date; + public updated: Date; + public price: number; + public sales: number; + public isNew: boolean; + public forSale: boolean; + public publicDomain: boolean; + public limited: boolean; + public limitedUnique: boolean; + public remaining: number | null; + public minimumMembershipLevel: number; + + constructor (data: ProductOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.TargetId; + this.type = data.ProductType; + this.assetId = data.AssetId; + this.productId = data.ProductId; + this.name = data.Name; + this.description = data.Description; + this.assetTypeId = data.AssetTypeId; + this.creator = new structures.PartialUser( + { + id: data.Creator.Id, + name: data.Creator.Name + }, + client + ); + this.iconImageAssetId = data.IconImageAssetId; + this.created = new Date(data.Created); + this.updated = new Date(data.Updated); + this.price = data.PriceInRobux; + this.sales = data.Sales; + this.isNew = data.IsNew; + this.forSale = data.IsForSale; + this.publicDomain = data.IsPublicDomain; + this.limited = data.IsLimited; + this.limitedUnique = data.IsLimitedUnique; + this.remaining = data.Remaining || null; + this.minimumMembershipLevel = data.MinimumMembershipLevel; + } } - export interface TradeOptions { - id: number; - offers: { - user: { - id: number; - name: string; - displayName: string; - }; - userAssets: CollectibleAssetOptions[]; - robux: number; - }[]; + id: number; + offers: { user: { - id: number; - name: string; - displayName: string; + id: number; + name: string; + displayName: string; }; - created: string; - isActive: boolean; - status: "Completed" | string; + userAssets: CollectibleAssetOptions[]; + robux: number; + }[]; + user: { + id: number; + name: string; + displayName: string; + }; + created: string; + isActive: boolean; + status: "Completed" | string; } - export class Trade { - public client: Client; - public id: number; - public offers: { - user: PartialUser; - assets: CollectibleAsset[]; - robux: number; - }[]; - public sender: PartialUser; - public created: Date; - public active: boolean; - public status: string; - - constructor (data: TradeOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.sender = new structures.PartialUser({ - id: data.user.id, - name: data.user.name - }, client); - this.created = new Date(data.created); - this.active = data.isActive; - this.status = data.status; - this.offers = data.offers.map(offerData => ({ - robux: offerData.robux, - user: new structures.PartialUser({ - id: offerData.user.id, - name: offerData.user.name - }, client), - assets: offerData.userAssets.map(assetData => new CollectibleAsset(assetData, client)) - })); - } + public client: Client; + public id: number; + public offers: { + user: PartialUser; + assets: CollectibleAsset[]; + robux: number; + }[]; + public sender: PartialUser; + public created: Date; + public active: boolean; + public status: string; + + constructor (data: TradeOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.sender = new structures.PartialUser( + { + id: data.user.id, + name: data.user.name + }, + client + ); + this.created = new Date(data.created); + this.active = data.isActive; + this.status = data.status; + this.offers = data.offers.map(offerData => ({ + robux: offerData.robux, + user: new structures.PartialUser( + { + id: offerData.user.id, + name: offerData.user.name + }, + client + ), + assets: offerData.userAssets.map( + assetData => new CollectibleAsset(assetData, client) + ) + })); + } } diff --git a/src/structures/Chat.ts b/src/structures/Chat.ts index b3891718b..c7abfe7e4 100644 --- a/src/structures/Chat.ts +++ b/src/structures/Chat.ts @@ -1,270 +1,259 @@ import Client from "../client"; import { PartialUser, PartialUserOptions } from "./User"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; -import { SendGameLinkMessageOptions, SendMessageOptions } from "../client/apis/ChatAPI"; +import { + SendGameLinkMessageOptions, + SendMessageOptions +} from "../client/apis/ChatAPI"; import { PartialGroup, PartialGroupOptions } from "./Group"; - interface Structures { - PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; - PartialGameUniverse: new (data: PartialGameUniverseOptions, client: Client) => PartialGameUniverse; - PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; + PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; + PartialGameUniverse: new ( + data: PartialGameUniverseOptions, + client: Client + ) => PartialGameUniverse; + PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; } - const retrieveStructures = (): Structures => ({ - PartialUser: require("./User").PartialUser, - PartialGameUniverse: require("./Game").PartialGameUniverse, - PartialGroup: require("./Group").PartialGroup + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup }); - export interface ChatConversationOptions { - id: number; - title: string; - initiator: { - type: "User" | string; - targetId: number; - name: string | null; - displayName: string | null; - }; - hasUnreadMessages: boolean; - participants: { - type: "User" | string; - targetId: number; - name: string; - displayName: string; - }[]; - conversationType: "OneToOneConversation" | string; - conversationTitle: { - titleForViewer: string; - isDefaultTitle: boolean; - }; - lastUpdated: string; - conversationUniverse: number | null; + id: number; + title: string; + initiator: { + type: "User" | string; + targetId: number; + name: string | null; + displayName: string | null; + }; + hasUnreadMessages: boolean; + participants: { + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + conversationType: "OneToOneConversation" | string; + conversationTitle: { + titleForViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: string; + conversationUniverse: number | null; } - export class ChatConversation { - public client: Client; - public id: number; - public title: string; - public initiator: PartialUser; - public hasUnreadMessages: boolean; - public members: PartialUser[]; - public type: string; - public conversationTitle: { - forViewer: string; - isDefaultTitle: boolean; - }; - public lastUpdated: Date; - public universe: PartialGameUniverse | null; - - constructor (data: ChatConversationOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.title = data.title; - this.initiator = new structures.PartialUser({ - id: data.initiator.targetId, - name: data.initiator.name || undefined - }, client); - this.hasUnreadMessages = data.hasUnreadMessages; - this.members = data.participants.map(participantData => new structures.PartialUser({ + public client: Client; + public id: number; + public title: string; + public initiator: PartialUser; + public hasUnreadMessages: boolean; + public members: PartialUser[]; + public type: string; + public conversationTitle: { + forViewer: string; + isDefaultTitle: boolean; + }; + public lastUpdated: Date; + public universe: PartialGameUniverse | null; + + constructor (data: ChatConversationOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.title = data.title; + this.initiator = new structures.PartialUser( + { + id: data.initiator.targetId, + name: data.initiator.name || undefined + }, + client + ); + this.hasUnreadMessages = data.hasUnreadMessages; + this.members = data.participants.map( + participantData => + new structures.PartialUser( + { id: participantData.targetId, name: participantData.name - }, client)); - this.type = data.conversationType; - this.lastUpdated = new Date(data.lastUpdated); - this.universe = data.conversationUniverse ? new structures.PartialGameUniverse({ - id: data.conversationUniverse - }, client) : null; - this.conversationTitle = { - forViewer: data.conversationTitle.titleForViewer, - isDefaultTitle: data.conversationTitle.isDefaultTitle - }; - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getMessages (amount = 100, startId?: string) { - return this.client.chat.getConversationMessages( - this.id, - amount, - startId - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - addUsers (users: number[]) { - return this.client.chat.addUsersToConversation( - this.id, - users - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - removeUser (userId: number) { - return this.client.chat.removeUserFromConversation( - this.id, - userId - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - markMessageRead (id: string) { - return this.client.chat.markMessageRead( - this.id, - id - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - markRead () { - return this.client.chat.markConversationsRead([ - this.id - ]); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - rename (name: string) { - return this.client.chat.renameGroupConversation( - this.id, - name - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getUnreadMessages (amount = 100) { - return this.client.chat.getUnreadMessagesInConversations( - [this.id], - amount - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getLatestMessages (amount = 100) { - return this.client.chat.getLatestMessagesInConversations( - [this.id], - amount - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - resetUniverse () { - return this.client.chat.resetConversationUniverse(this.id); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - sendGameLinkMessage (options: SendGameLinkMessageOptions) { - return this.client.chat.sendGameLinkMessage(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - sendMessage (options: SendMessageOptions) { - return this.client.chat.sendMessage(options); - } + }, + client + ) + ); + this.type = data.conversationType; + this.lastUpdated = new Date(data.lastUpdated); + this.universe = data.conversationUniverse ? + new structures.PartialGameUniverse( + { + id: data.conversationUniverse + }, + client + ) : + null; + this.conversationTitle = { + forViewer: data.conversationTitle.titleForViewer, + isDefaultTitle: data.conversationTitle.isDefaultTitle + }; + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getMessages (amount = 100, startId?: string) { + return this.client.chat.getConversationMessages(this.id, amount, startId); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + addUsers (users: number[]) { + return this.client.chat.addUsersToConversation(this.id, users); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + removeUser (userId: number) { + return this.client.chat.removeUserFromConversation(this.id, userId); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + markMessageRead (id: string) { + return this.client.chat.markMessageRead(this.id, id); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + markRead () { + return this.client.chat.markConversationsRead([this.id]); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + rename (name: string) { + return this.client.chat.renameGroupConversation(this.id, name); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getUnreadMessages (amount = 100) { + return this.client.chat.getUnreadMessagesInConversations([this.id], amount); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getLatestMessages (amount = 100) { + return this.client.chat.getLatestMessagesInConversations([this.id], amount); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + resetUniverse () { + return this.client.chat.resetConversationUniverse(this.id); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendGameLinkMessage (options: SendGameLinkMessageOptions) { + return this.client.chat.sendGameLinkMessage(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendMessage (options: SendMessageOptions) { + return this.client.chat.sendMessage(options); + } } - export interface PartialChatConversationOptions { - id: number; - title?: string; + id: number; + title?: string; } - export class PartialChatConversation { - public client: Client; - public id: number; - public title: string | null; - - constructor (data: PartialChatConversationOptions, client: Client) { - this.client = client; - this.id = data.id; - this.title = data.title || null; - } + public client: Client; + public id: number; + public title: string | null; + + constructor (data: PartialChatConversationOptions, client: Client) { + this.client = client; + this.id = data.id; + this.title = data.title || null; + } } - export interface ChatMessageOptions { - id: string; - senderType: string; - sent: string; - read: boolean; - messageType: "PlainText" | string; - decorators: string[]; - senderTargetId: number; - content: string; - link?: { - type: "Game"; - game: { - universeId: number; - }; + id: string; + senderType: string; + sent: string; + read: boolean; + messageType: "PlainText" | string; + decorators: string[]; + senderTargetId: number; + content: string; + link?: { + type: "Game"; + game: { + universeId: number; }; - eventBased?: { - type: "SetConversationUniverse"; - setConversationUniverse: { - actorUserId: number; - universeId: number; - }; + }; + eventBased?: { + type: "SetConversationUniverse"; + setConversationUniverse: { + actorUserId: number; + universeId: number; }; + }; } - export class ChatMessage { - public client: Client; - public id: string; - public sender: PartialUser; - public sentAt: Date; - public type: "PlainText" | string; - public decorators: string[]; - public content: string; - - constructor (data: ChatMessageOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.sender = new structures.PartialUser({ - id: data.senderTargetId - }, client); - this.sentAt = new Date(data.sent); - this.type = data.messageType; - this.decorators = data.decorators; - this.content = data.content; - } + public client: Client; + public id: string; + public sender: PartialUser; + public sentAt: Date; + public type: "PlainText" | string; + public decorators: string[]; + public content: string; + + constructor (data: ChatMessageOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.sender = new structures.PartialUser( + { + id: data.senderTargetId + }, + client + ); + this.sentAt = new Date(data.sent); + this.type = data.messageType; + this.decorators = data.decorators; + this.content = data.content; + } } - export interface ChatMessageSentOptions { - content: string; - filteredForReceivers: boolean; - messageId: string; - sent: string; - messageType: "PlainText" | string; - resultType: "Success" | string; - statusMessage: string; + content: string; + filteredForReceivers: boolean; + messageId: string; + sent: string; + messageType: "PlainText" | string; + resultType: "Success" | string; + statusMessage: string; } - export class ChatMessageSent { - public client: Client; - public content: string; - public filtered: boolean; - public id: string; - public sentAt: Date; - public type: "PlainText" | string; - public result: "Success" | string; - public status: string; - - constructor (data: ChatMessageSentOptions, client: Client) { - this.client = client; - this.id = data.messageId; - this.content = data.content; - this.filtered = data.filteredForReceivers; - this.sentAt = new Date(data.sent); - this.result = data.resultType; - this.status = data.statusMessage; - this.type = data.messageType; - } + public client: Client; + public content: string; + public filtered: boolean; + public id: string; + public sentAt: Date; + public type: "PlainText" | string; + public result: "Success" | string; + public status: string; + + constructor (data: ChatMessageSentOptions, client: Client) { + this.client = client; + this.id = data.messageId; + this.content = data.content; + this.filtered = data.filteredForReceivers; + this.sentAt = new Date(data.sent); + this.result = data.resultType; + this.status = data.statusMessage; + this.type = data.messageType; + } } diff --git a/src/structures/ClientUser.ts b/src/structures/ClientUser.ts index 9217ed5d6..b7ffccbc8 100644 --- a/src/structures/ClientUser.ts +++ b/src/structures/ClientUser.ts @@ -1,275 +1,279 @@ import Client from "../client"; import { PartialUser } from "./User"; import { - UpdateContactUpsellSuppressionOptions, - UpdateTwoStepStatusOptions, - UpdateUserPrivacyOptions, - UpdateUserPromotionChannelsOptions + UpdateContactUpsellSuppressionOptions, + UpdateTwoStepStatusOptions, + UpdateUserPrivacyOptions, + UpdateUserPromotionChannelsOptions } from "../client/apis/AccountSettingsAPI"; import { - DeletePhoneOptions, - ResendPhoneCodeOptions, - SetPhoneNumberOptions, - UpdateUserBirthdateOptions, - VerifyPhoneOptions + DeletePhoneOptions, + ResendPhoneCodeOptions, + SetPhoneNumberOptions, + UpdateUserBirthdateOptions, + VerifyPhoneOptions } from "../client/apis/AccountInformationAPI"; - export interface ClientUserOptions { - id: number; - name: string; + id: number; + name: string; } - export default class ClientUser extends PartialUser { - public client: Client; - - constructor (data: ClientUserOptions, client: Client) { - super(data, client); - this.client = client; - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getAppChatPrivacy () { - return this.client.apis.accountSettingsAPI.getAppChatPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateAppChatPrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateAppChatPrivacy({ - appChatPrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getGameChatPrivacy () { - return this.client.apis.accountSettingsAPI.getGameChatPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateGameChatPrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateGameChatPrivacy({ - gameChatPrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getInventoryPrivacy () { - return this.client.apis.accountSettingsAPI.getInventoryPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateInventoryPrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateInventoryPrivacy({ - inventoryPrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPrivacy () { - return this.client.apis.accountSettingsAPI.getUserPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updatePrivacy (options: UpdateUserPrivacyOptions) { - return this.client.apis.accountSettingsAPI.updateUserPrivacy(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPrivacySettingsInfo () { - return this.client.apis.accountSettingsAPI.getUserPrivacySettingsInfo(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPrivateMessagePrivacy () { - return this.client.apis.accountSettingsAPI.getUserPrivateMessagePrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updatePrivateMessagePrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateUserPrivateMessagePrivacy({ - privateMessagePrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getEmailStatus () { - return this.client.apis.accountSettingsAPI.getUserEmailStatus(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateEmail (email: string, password: string) { - return this.client.apis.accountSettingsAPI.updateUserEmail({ - emailAddress: email, - password - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - sendEmailVerification () { - return this.client.apis.accountSettingsAPI.sendEmailVerification(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getWebsiteTheme () { - return this.client.apis.accountSettingsAPI.getWebsiteTheme(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateWebsiteTheme (theme: string) { - return this.client.apis.accountSettingsAPI.updateWebsiteTheme({ - themeType: theme - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getTradePrivacy () { - return this.client.apis.accountSettingsAPI.getUserTradePrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateTradePrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateUserTradePrivacy({ - tradePrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getTradeQualityFilter () { - return this.client.apis.accountSettingsAPI.getUserTradeQualityFilter(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateTradeQualityFilter (quality: string) { - return this.client.apis.accountSettingsAPI.updateUserTradeQualityFilter({ - tradeValue: quality - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateTwoStepStatus (options: UpdateTwoStepStatusOptions) { - return this.client.apis.accountSettingsAPI.updateTwoStepStatus(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getContactUpsell () { - return this.client.apis.accountSettingsAPI.getContactUpsell(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateContactUpsellSuppression (options: UpdateContactUpsellSuppressionOptions) { - return this.client.apis.accountSettingsAPI.updateContactUpsellSuppression(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updatePromotionChannels (options: UpdateUserPromotionChannelsOptions) { - return this.client.apis.accountSettingsAPI.updateUserPromotionChannels(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getBirthdate () { - return this.client.apis.accountInformationAPI.getUserBirthdate(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateBirthdate (options: UpdateUserBirthdateOptions) { - return this.client.apis.accountInformationAPI.updateUserBirthdate(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getProfileDescription () { - return this.client.apis.accountInformationAPI.getUserDescription(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateProfileDescription (description: string) { - return this.client.apis.accountInformationAPI.updateUserDescription({ - description - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getGender () { - return this.client.apis.accountInformationAPI.getUserGender(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateGender (gender: number) { - return this.client.apis.accountInformationAPI.updateUserGender({ - gender - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getConsecutiveXboxLoginDays () { - return this.client.apis.accountInformationAPI.getConsecutiveXboxLoginDays(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getVerifiedPhoneNumber () { - return this.client.apis.accountInformationAPI.getVerifiedPhoneNumber(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - setPhoneNumber (options: SetPhoneNumberOptions) { - return this.client.apis.accountInformationAPI.setPhoneNumber(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - deletePhone (options: DeletePhoneOptions) { - return this.client.apis.accountInformationAPI.deletePhone(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - resendPhoneCode (options: ResendPhoneCodeOptions) { - return this.client.apis.accountInformationAPI.resendPhoneCode(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - verifyPhone (options: VerifyPhoneOptions) { - return this.client.apis.accountInformationAPI.verifyPhone(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPromotionChannels () { - return this.client.apis.accountInformationAPI.getSelfPromotionChannels(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - removeStarCodeAffiliate () { - return this.client.apis.accountInformationAPI.removeStarCodeAffiliate(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getStarCodeAffiliate () { - return this.client.apis.accountInformationAPI.getStarCodeAffiliate(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - addStarCodeAffiliate (code: string) { - return this.client.apis.accountInformationAPI.addStarCodeAffiliate({ - code - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPasswordStatus () { - return this.client.apis.authAPI.getCurrentUserPasswordStatus(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - changeUserPassword (newPassword: string, oldPassword: string) { - return this.client.apis.authAPI.changeUserPassword({ - currentPassword: oldPassword, - newPassword - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - changeUsername (newUsername: string, password: string) { - return this.client.apis.authAPI.changeUserUsername({ - password, - username: newUsername - }); - } + public client: Client; + + constructor (data: ClientUserOptions, client: Client) { + super(data, client); + this.client = client; + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getAppChatPrivacy () { + return this.client.apis.accountSettingsAPI.getAppChatPrivacy(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateAppChatPrivacy (privacy: string) { + return this.client.apis.accountSettingsAPI.updateAppChatPrivacy({ + appChatPrivacy: privacy + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getGameChatPrivacy () { + return this.client.apis.accountSettingsAPI.getGameChatPrivacy(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateGameChatPrivacy (privacy: string) { + return this.client.apis.accountSettingsAPI.updateGameChatPrivacy({ + gameChatPrivacy: privacy + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getInventoryPrivacy () { + return this.client.apis.accountSettingsAPI.getInventoryPrivacy(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateInventoryPrivacy (privacy: string) { + return this.client.apis.accountSettingsAPI.updateInventoryPrivacy({ + inventoryPrivacy: privacy + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getPrivacy () { + return this.client.apis.accountSettingsAPI.getUserPrivacy(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updatePrivacy (options: UpdateUserPrivacyOptions) { + return this.client.apis.accountSettingsAPI.updateUserPrivacy(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getPrivacySettingsInfo () { + return this.client.apis.accountSettingsAPI.getUserPrivacySettingsInfo(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getPrivateMessagePrivacy () { + return this.client.apis.accountSettingsAPI.getUserPrivateMessagePrivacy(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updatePrivateMessagePrivacy (privacy: string) { + return this.client.apis.accountSettingsAPI.updateUserPrivateMessagePrivacy({ + privateMessagePrivacy: privacy + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getEmailStatus () { + return this.client.apis.accountSettingsAPI.getUserEmailStatus(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateEmail (email: string, password: string) { + return this.client.apis.accountSettingsAPI.updateUserEmail({ + emailAddress: email, + password + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendEmailVerification () { + return this.client.apis.accountSettingsAPI.sendEmailVerification(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getWebsiteTheme () { + return this.client.apis.accountSettingsAPI.getWebsiteTheme(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateWebsiteTheme (theme: string) { + return this.client.apis.accountSettingsAPI.updateWebsiteTheme({ + themeType: theme + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getTradePrivacy () { + return this.client.apis.accountSettingsAPI.getUserTradePrivacy(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateTradePrivacy (privacy: string) { + return this.client.apis.accountSettingsAPI.updateUserTradePrivacy({ + tradePrivacy: privacy + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getTradeQualityFilter () { + return this.client.apis.accountSettingsAPI.getUserTradeQualityFilter(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateTradeQualityFilter (quality: string) { + return this.client.apis.accountSettingsAPI.updateUserTradeQualityFilter({ + tradeValue: quality + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateTwoStepStatus (options: UpdateTwoStepStatusOptions) { + return this.client.apis.accountSettingsAPI.updateTwoStepStatus(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getContactUpsell () { + return this.client.apis.accountSettingsAPI.getContactUpsell(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateContactUpsellSuppression ( + options: UpdateContactUpsellSuppressionOptions + ) { + return this.client.apis.accountSettingsAPI.updateContactUpsellSuppression( + options + ); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updatePromotionChannels (options: UpdateUserPromotionChannelsOptions) { + return this.client.apis.accountSettingsAPI.updateUserPromotionChannels( + options + ); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getBirthdate () { + return this.client.apis.accountInformationAPI.getUserBirthdate(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateBirthdate (options: UpdateUserBirthdateOptions) { + return this.client.apis.accountInformationAPI.updateUserBirthdate(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getProfileDescription () { + return this.client.apis.accountInformationAPI.getUserDescription(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateProfileDescription (description: string) { + return this.client.apis.accountInformationAPI.updateUserDescription({ + description + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getGender () { + return this.client.apis.accountInformationAPI.getUserGender(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + updateGender (gender: number) { + return this.client.apis.accountInformationAPI.updateUserGender({ + gender + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getConsecutiveXboxLoginDays () { + return this.client.apis.accountInformationAPI.getConsecutiveXboxLoginDays(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getVerifiedPhoneNumber () { + return this.client.apis.accountInformationAPI.getVerifiedPhoneNumber(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + setPhoneNumber (options: SetPhoneNumberOptions) { + return this.client.apis.accountInformationAPI.setPhoneNumber(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + deletePhone (options: DeletePhoneOptions) { + return this.client.apis.accountInformationAPI.deletePhone(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + resendPhoneCode (options: ResendPhoneCodeOptions) { + return this.client.apis.accountInformationAPI.resendPhoneCode(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + verifyPhone (options: VerifyPhoneOptions) { + return this.client.apis.accountInformationAPI.verifyPhone(options); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getPromotionChannels () { + return this.client.apis.accountInformationAPI.getSelfPromotionChannels(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + removeStarCodeAffiliate () { + return this.client.apis.accountInformationAPI.removeStarCodeAffiliate(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getStarCodeAffiliate () { + return this.client.apis.accountInformationAPI.getStarCodeAffiliate(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + addStarCodeAffiliate (code: string) { + return this.client.apis.accountInformationAPI.addStarCodeAffiliate({ + code + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getPasswordStatus () { + return this.client.apis.authAPI.getCurrentUserPasswordStatus(); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + changeUserPassword (newPassword: string, oldPassword: string) { + return this.client.apis.authAPI.changeUserPassword({ + currentPassword: oldPassword, + newPassword + }); + } + + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + changeUsername (newUsername: string, password: string) { + return this.client.apis.authAPI.changeUserUsername({ + password, + username: newUsername + }); + } } diff --git a/src/structures/Game.ts b/src/structures/Game.ts index fb7a35dda..c68ad4590 100644 --- a/src/structures/Game.ts +++ b/src/structures/Game.ts @@ -5,515 +5,534 @@ import { PartialUser, PartialUserOptions } from "./User"; import { GetPlaceStatisticsByTypeOptions } from "../client/apis/DevelopAPI"; import { GetGameServersByTypeOptions } from "../client/apis/GamesAPI"; - interface Structures { - PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; - PartialGameUniverse: new (data: PartialGameUniverseOptions, client: Client) => PartialGameUniverse; - PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; - PartialPlace: new (data: PartialPlaceOptions, client: Client) => PartialPlace; + PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; + PartialGameUniverse: new ( + data: PartialGameUniverseOptions, + client: Client + ) => PartialGameUniverse; + PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; + PartialPlace: new (data: PartialPlaceOptions, client: Client) => PartialPlace; } - const retrieveStructures = (): Structures => ({ - PartialUser: require("./User").PartialUser, - PartialGameUniverse: require("./Game").PartialGameUniverse, - PartialGroup: require("./Group").PartialGroup, - PartialPlace: require("./Game").PartialPlace + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup, + PartialPlace: require("./Game").PartialPlace }); - export interface GameBadgeBaseOptions { - id: number; - name?: string; + id: number; + name?: string; } - export class GameBadgeBase { - public client: Client; - public id: number; - public name: string | null; - - constructor (data: GameBadgeBaseOptions, client: Client) { - this.client = client; - this.id = data.id; - this.name = data.name || null; - } + public client: Client; + public id: number; + public name: string | null; + + constructor (data: GameBadgeBaseOptions, client: Client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + } } - export interface GameBadgeOptions { + id: number; + name: string; + description: string; + displayName: string; + displayDescription: string; + enabled: boolean; + iconImageId: number; + displayIconImageId: number; + created: string; + updated: string; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: { id: number; name: string; - description: string; - displayName: string; - displayDescription: string; - enabled: boolean; - iconImageId: number; - displayIconImageId: number; - created: string; - updated: string; - statistics: { - pastDayAwardedCount: number; - awardedCount: number; - winRatePercentage: number; - }; - awardingUniverse: { - id: number; - name: string; - rootPlaceId: number; - }; + rootPlaceId: number; + }; } - export class GameBadge { - public client: Client; - public id: number; - public name: string; - public description: string; - public displayedDescription: string; - public displayedName: string; - public enabled: boolean; - public iconId: number; - public displayedIconId: number; - public created: Date; - public updated: Date; - public statistics: { - pastDayAwardedCount: number; - awardedCount: number; - winRatePercentage: number; + public client: Client; + public id: number; + public name: string; + public description: string; + public displayedDescription: string; + public displayedName: string; + public enabled: boolean; + public iconId: number; + public displayedIconId: number; + public created: Date; + public updated: Date; + public statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: PartialGameUniverse; + + constructor (data: GameBadgeOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.name = data.name; + this.description = data.description; + this.displayedName = data.displayName; + this.displayedDescription = data.displayDescription; + this.enabled = data.enabled; + this.iconId = data.iconImageId; + this.displayedIconId = data.displayIconImageId; + this.created = new Date(data.created); + this.updated = new Date(data.updated); + this.statistics = { + pastDayAwardedCount: data.statistics.pastDayAwardedCount, + awardedCount: data.statistics.awardedCount, + winRatePercentage: data.statistics.winRatePercentage }; - awardingUniverse: PartialGameUniverse; - - constructor (data: GameBadgeOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.name = data.name; - this.description = data.description; - this.displayedName = data.displayName; - this.displayedDescription = data.displayDescription; - this.enabled = data.enabled; - this.iconId = data.iconImageId; - this.displayedIconId = data.displayIconImageId; - this.created = new Date(data.created); - this.updated = new Date(data.updated); - this.statistics = { - pastDayAwardedCount: data.statistics.pastDayAwardedCount, - awardedCount: data.statistics.awardedCount, - winRatePercentage: data.statistics.winRatePercentage - }; - this.awardingUniverse = new structures.PartialGameUniverse({ - id: data.awardingUniverse.id, - rootPlace: { - id: data.awardingUniverse.rootPlaceId - }, - name: data.awardingUniverse.name - }, client); - } + this.awardingUniverse = new structures.PartialGameUniverse( + { + id: data.awardingUniverse.id, + rootPlace: { + id: data.awardingUniverse.rootPlaceId + }, + name: data.awardingUniverse.name + }, + client + ); + } } - export type PartialGameBadgeOptions = GameBadgeBaseOptions; - export class PartialGameBadge extends GameBadgeBase { - // Shut up eslint, it's not useless - // eslint-disable-next-line no-useless-constructor - constructor (data: PartialGameBadgeOptions, client: Client) { - super(data, client); - } + // Shut up eslint, it's not useless + // eslint-disable-next-line no-useless-constructor + constructor (data: PartialGameBadgeOptions, client: Client) { + super(data, client); + } } - export interface GamePassOptions { - id: number; - name: string; - displayName: string; - productId: number; - price: number; + id: number; + name: string; + displayName: string; + productId: number; + price: number; } - export class GamePass { - public client: Client; - public id: number; - public name: string; - public displayName: string; - public productId: number; - public price: number; - - constructor (data: GamePassOptions, client: Client) { - this.client = client; - this.id = data.id; - this.name = data.name; - this.displayName = data.displayName; - this.productId = data.productId; - this.price = data.price; - } + public client: Client; + public id: number; + public name: string; + public displayName: string; + public productId: number; + public price: number; + + constructor (data: GamePassOptions, client: Client) { + this.client = client; + this.id = data.id; + this.name = data.name; + this.displayName = data.displayName; + this.productId = data.productId; + this.price = data.price; + } } - export interface BasePlaceOptions { - id: number; - name?: string; + id: number; + name?: string; } - export class BasePlace { - public client: Client; - public id: number; - public name: string | null; - - constructor (options: BasePlaceOptions, client: Client) { - this.client = client; - this.id = options.id; - this.name = options.name || null; - } - - getCompatibilities () { - return this.client.apis.developAPI.getPlaceCompatibilities({ - placeId: this.id - }); - } - - updatePlaceConfiguration (options: { name: string; description: string }) { - return this.client.apis.developAPI.updatePlaceConfiguration({ - placeId: this.id, - ...options - }); - } - - getStatistics (options: Omit) { - return this.client.apis.developAPI.getPlaceStatistics({ - placeId: this.id, - ...options - }); - } - - awardBadge (userId: number, badgeId: number) { - return this.client.apis.generalApi.awardBadge({ - placeId: this.id, - badgeId, - userId - }); - } - - getGameServers (options: Omit) { - return this.client.apis.gamesAPI.getGameServersByType({ - placeId: this.id, - ...options - }); - } + public client: Client; + public id: number; + public name: string | null; + + constructor (options: BasePlaceOptions, client: Client) { + this.client = client; + this.id = options.id; + this.name = options.name || null; + } + + getCompatibilities () { + return this.client.apis.developAPI.getPlaceCompatibilities({ + placeId: this.id + }); + } + + updatePlaceConfiguration (options: { name: string; description: string }) { + return this.client.apis.developAPI.updatePlaceConfiguration({ + placeId: this.id, + ...options + }); + } + + getStatistics (options: Omit) { + return this.client.apis.developAPI.getPlaceStatistics({ + placeId: this.id, + ...options + }); + } + + awardBadge (userId: number, badgeId: number) { + return this.client.apis.generalApi.awardBadge({ + placeId: this.id, + badgeId, + userId + }); + } + + getGameServers (options: Omit) { + return this.client.apis.gamesAPI.getGameServersByType({ + placeId: this.id, + ...options + }); + } } - export interface PlaceOptions { - placeId: number; - name: string; - url: string; - description: string; - builder: string; - builderId: number; - isPlayable: boolean; - reasonProhibited: string; - universeId: number; - universeRootPlaceId: number; - price: number; - imageToken: string; + placeId: number; + name: string; + url: string; + description: string; + builder: string; + builderId: number; + isPlayable: boolean; + reasonProhibited: string; + universeId: number; + universeRootPlaceId: number; + price: number; + imageToken: string; } - export class Place extends BasePlace { - public description: string; - public url: string; - public creatorName: string; - public creatorId: number; - public playable: boolean; - public prohibitedReason: string; - public prohibited: boolean; - public universe: PartialGameUniverse; - public price: number; - public imageToken: string; - - constructor (data: PlaceOptions, client: Client) { - const structures = retrieveStructures(); - - super({ - id: data.placeId, - name: data.name - }, client); - this.description = data.description; - this.url = data.url; - this.creatorName = data.builder; - this.creatorId = data.builderId; - this.playable = data.isPlayable; - this.prohibitedReason = data.reasonProhibited; - this.prohibited = this.prohibitedReason.toLowerCase() !== "none"; - this.universe = new structures.PartialGameUniverse({ - id: data.universeId, - rootPlace: { - id: data.universeRootPlaceId - } - }, client); - this.price = data.price; - this.imageToken = data.imageToken; - } + public description: string; + public url: string; + public creatorName: string; + public creatorId: number; + public playable: boolean; + public prohibitedReason: string; + public prohibited: boolean; + public universe: PartialGameUniverse; + public price: number; + public imageToken: string; + + constructor (data: PlaceOptions, client: Client) { + const structures = retrieveStructures(); + + super( + { + id: data.placeId, + name: data.name + }, + client + ); + this.description = data.description; + this.url = data.url; + this.creatorName = data.builder; + this.creatorId = data.builderId; + this.playable = data.isPlayable; + this.prohibitedReason = data.reasonProhibited; + this.prohibited = this.prohibitedReason.toLowerCase() !== "none"; + this.universe = new structures.PartialGameUniverse( + { + id: data.universeId, + rootPlace: { + id: data.universeRootPlaceId + } + }, + client + ); + this.price = data.price; + this.imageToken = data.imageToken; + } } - interface PartialPlaceOptions { - id: number; - name?: string | null; + id: number; + name?: string | null; } - export class PartialPlace extends BasePlace { - constructor (data: PartialPlaceOptions, client: Client) { - super({ - id: data.id, - name: data.name || undefined - }, client); - } + constructor (data: PartialPlaceOptions, client: Client) { + super( + { + id: data.id, + name: data.name || undefined + }, + client + ); + } } - export interface PartialGameUniverseOptions { + id: number; + name?: string; + rootPlace?: { id: number; - name?: string; - rootPlace?: { - id: number; - name?: string | null; - }; + name?: string | null; + }; } - export class PartialGameUniverse { - public client: Client; - public id: number; - public name: string | null; - public rootPlace: PartialPlace | null; - - constructor (data: PartialGameUniverseOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.name = data.name || null; - this.rootPlace = data.rootPlace ? new structures.PartialPlace({ - id: data.rootPlace.id, - name: data.rootPlace.name || null - }, client) : null; - } + public client: Client; + public id: number; + public name: string | null; + public rootPlace: PartialPlace | null; + + constructor (data: PartialGameUniverseOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.name = data.name || null; + this.rootPlace = data.rootPlace ? + new structures.PartialPlace( + { + id: data.rootPlace.id, + name: data.rootPlace.name || null + }, + client + ) : + null; + } } - export interface GameUniverseOptions { + id: number; + rootPlaceId: number; + name: string; + description: string; + creatorType: string; + creator: { id: number; - rootPlaceId: number; name: string; - description: string; - creatorType: string; - creator: { - id: number; - name: string; - }; - price: number; - allowedGearGenres: string[]; - allowedGearCategories: string[]; - playing: number; - visits: number; - maxPlayers: number; - created: string; - updated: string; - studioAccessToApisAllowed: boolean; - createVipServersAllowed: boolean; - universeAvatarType: string; - genre: string; + }; + price: number; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: string; + updated: string; + studioAccessToApisAllowed: boolean; + createVipServersAllowed: boolean; + universeAvatarType: string; + genre: string; } - export class GameUniverse { - public client: Client; - public id: number; - public rootPlace: PartialPlace | null; - public name: string; - public description: string; - public creatorType: CreatorType; - public creator: PartialGroup | PartialUser; - public price: number | null; - public allowedGearGenres: string[]; - public allowedGearCategories: string[]; - public playing: number; - public visits: number; - public maxPlayers: number; - public created: Date; - public updated: Date; - public studioAccessToAPIsEnabled: boolean; - public createVIPServersEnabled: boolean; - public avatarType: MorphAvatarType; - public genre: GameGenre; - - constructor (data: GameUniverseOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.rootPlace = data.rootPlaceId ? new structures.PartialPlace({ - id: data.rootPlaceId - }, client) : null; - this.name = data.name; - this.description = data.description; - this.creatorType = data.creatorType.toLowerCase() === "group" ? CreatorType.GROUP : CreatorType.USER; - this.creator = this.creatorType === CreatorType.GROUP ? new structures.PartialGroup({ + public client: Client; + public id: number; + public rootPlace: PartialPlace | null; + public name: string; + public description: string; + public creatorType: CreatorType; + public creator: PartialGroup | PartialUser; + public price: number | null; + public allowedGearGenres: string[]; + public allowedGearCategories: string[]; + public playing: number; + public visits: number; + public maxPlayers: number; + public created: Date; + public updated: Date; + public studioAccessToAPIsEnabled: boolean; + public createVIPServersEnabled: boolean; + public avatarType: MorphAvatarType; + public genre: GameGenre; + + constructor (data: GameUniverseOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.rootPlace = data.rootPlaceId ? + new structures.PartialPlace( + { + id: data.rootPlaceId + }, + client + ) : + null; + this.name = data.name; + this.description = data.description; + this.creatorType = + data.creatorType.toLowerCase() === "group" ? + CreatorType.GROUP : + CreatorType.USER; + this.creator = + this.creatorType === CreatorType.GROUP ? + new structures.PartialGroup( + { id: data.creator.id, name: data.creator.name - }, client) : new structures.PartialUser({ + }, + client + ) : + new structures.PartialUser( + { id: data.creator.id, name: data.creator.name - }, client); - this.price = data.price; - this.allowedGearGenres = data.allowedGearGenres; - this.allowedGearCategories = data.allowedGearCategories; - this.playing = data.playing; - this.visits = data.visits; - this.maxPlayers = data.maxPlayers; - this.created = new Date(data.created); - this.updated = new Date(data.updated); - this.studioAccessToAPIsEnabled = data.studioAccessToApisAllowed; - this.createVIPServersEnabled = data.createVipServersAllowed; - this.avatarType = data.universeAvatarType.toLowerCase() === "morphtor6" ? MorphAvatarType.R6 : MorphAvatarType.R15; - this.genre = data.genre as GameGenre; - } + }, + client + ); + this.price = data.price; + this.allowedGearGenres = data.allowedGearGenres; + this.allowedGearCategories = data.allowedGearCategories; + this.playing = data.playing; + this.visits = data.visits; + this.maxPlayers = data.maxPlayers; + this.created = new Date(data.created); + this.updated = new Date(data.updated); + this.studioAccessToAPIsEnabled = data.studioAccessToApisAllowed; + this.createVIPServersEnabled = data.createVipServersAllowed; + this.avatarType = + data.universeAvatarType.toLowerCase() === "morphtor6" ? + MorphAvatarType.R6 : + MorphAvatarType.R15; + this.genre = data.genre as GameGenre; + } } - export interface PartialVIPServerOptions { - id: number; + id: number; } - export class PartialVIPServer { - public client: Client; - public id: number; + public client: Client; + public id: number; - constructor (data: PartialVIPServerOptions, client: Client) { - this.client = client; - this.id = data.id; - } + constructor (data: PartialVIPServerOptions, client: Client) { + this.client = client; + this.id = data.id; + } } - export interface VIPServerOptions { + id: number; + name: string; + game: { id: number; name: string; - game: { - id: number; - name: string; - rootPlace: { - id: number; - name: string; - }; + rootPlace: { + id: number; + name: string; }; - joinCode: string; + }; + joinCode: string; + active: boolean; + subscription: { active: boolean; - subscription: { - active: boolean; - expired: boolean; - expirationDate: string; - price: number; - }; - permissions: { - clanAllowed: boolean; - enemyClanId: number | number; - friendsAllowed: boolean; - users: { - id: number; - name: string; - displayName: string; - }[]; - }; + expired: boolean; + expirationDate: string; + price: number; + }; + permissions: { + clanAllowed: boolean; + enemyClanId: number | number; + friendsAllowed: boolean; + users: { + id: number; + name: string; + displayName: string; + }[]; + }; } - export class VIPServer { - public client: Client; - public id: number; - public name: string; - public game: PartialGameUniverse; - public code: string; - public active: boolean; - public subscription: { - active: boolean; - expired: boolean; - expirationDate: Date; - price: number; + public client: Client; + public id: number; + public name: string; + public game: PartialGameUniverse; + public code: string; + public active: boolean; + public subscription: { + active: boolean; + expired: boolean; + expirationDate: Date; + price: number; + }; + public permissions: { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: PartialUser[]; + }; + + constructor (data: VIPServerOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id; + this.name = data.name; + this.game = new structures.PartialGameUniverse( + { + id: data.game.id, + name: data.game.name, + rootPlace: { + id: data.game.rootPlace.id, + name: data.game.rootPlace.name + } + }, + client + ); + this.active = data.active; + this.code = data.joinCode; + this.subscription = { + active: data.subscription.active, + expired: data.subscription.expired, + expirationDate: new Date(data.subscription.expirationDate), + price: data.subscription.price }; - public permissions: { - clanAllowed: boolean; - enemyClanId: number; - friendsAllowed: boolean; - users: PartialUser[]; + this.permissions = { + clanAllowed: data.permissions.clanAllowed, + enemyClanId: data.permissions.enemyClanId, + friendsAllowed: data.permissions.friendsAllowed, + users: data.permissions.users.map( + userData => new structures.PartialUser(userData, client) + ) }; - - constructor (data: VIPServerOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id; - this.name = data.name; - this.game = new structures.PartialGameUniverse({ - id: data.game.id, - name: data.game.name, - rootPlace: { - id: data.game.rootPlace.id, - name: data.game.rootPlace.name - } - }, client); - this.active = data.active; - this.code = data.joinCode; - this.subscription = { - active: data.subscription.active, - expired: data.subscription.expired, - expirationDate: new Date(data.subscription.expirationDate), - price: data.subscription.price - }; - this.permissions = { - clanAllowed: data.permissions.clanAllowed, - enemyClanId: data.permissions.enemyClanId, - friendsAllowed: data.permissions.friendsAllowed, - users: data.permissions.users.map(userData => new structures.PartialUser(userData, client)) - }; - } + } } - export interface GameMediaDataOptions { - assetTypeId: number; - assetType: "Video" | "Image" | string; - imageId: number | null; - videoHash: string | null; - videoTitle: string | null; - approved: boolean; + assetTypeId: number; + assetType: "Video" | "Image" | string; + imageId: number | null; + videoHash: string | null; + videoTitle: string | null; + approved: boolean; } - export class GameMediaData { - public client: Client; - public assetTypeId: number; - public assetType: "Video" | "Image" | string; - public imageId: number | null; - public videoHash: string | null; - public videoTitle: string | null; - public approved: boolean; - - constructor (data: GameMediaDataOptions, client: Client) { - this.client = client; - this.assetTypeId = data.assetTypeId; - this.assetType = data.assetType; - this.imageId = data.imageId; - this.videoHash = data.videoHash; - this.videoTitle = data.videoTitle; - this.approved = data.approved; - } + public client: Client; + public assetTypeId: number; + public assetType: "Video" | "Image" | string; + public imageId: number | null; + public videoHash: string | null; + public videoTitle: string | null; + public approved: boolean; + + constructor (data: GameMediaDataOptions, client: Client) { + this.client = client; + this.assetTypeId = data.assetTypeId; + this.assetType = data.assetType; + this.imageId = data.imageId; + this.videoHash = data.videoHash; + this.videoTitle = data.videoTitle; + this.approved = data.approved; + } } diff --git a/src/structures/Group.ts b/src/structures/Group.ts index 50c75a7a1..c7ae1e943 100644 --- a/src/structures/Group.ts +++ b/src/structures/Group.ts @@ -3,930 +3,1068 @@ import { GetGroupUniversesOptions } from "../client/apis/DevelopAPI"; import { CursorPage } from "./Asset"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; import { - GetGroupRevenueSummaryInTimeFrame, - GetGroupRevenueSummaryInTimeFrameOptions, - GetGroupTransactions, - GetGroupTransactionsOptions + GetGroupRevenueSummaryInTimeFrame, + GetGroupRevenueSummaryInTimeFrameOptions, + GetGroupTransactions, + GetGroupTransactionsOptions } from "../client/apis/EconomyAPI"; import { - AcceptJoinRequest, - AcceptJoinRequests, - AcceptJoinRequestsOptions, - AcceptRelationshipRequest, - AcceptRelationshipRequests, - AcceptRelationshipRequestsOptions, - ChangeOwner, - ClaimGroup, - CreateRelationship, - CreateRelationshipOptions, - CreateRole, - CreateRoleOptions, - CreateWallPost, - CreateWallPostOptions, - DeclineJoinRequest, - DeclineJoinRequests, - DeclineRelationshipRequest, - DeclineRelationshipRequests, - DeclineRelationshipRequestsOptions, - DeleteRelationship, - DeleteRelationshipOptions, - DeleteRole, - DeleteSocialLink, - DeleteWallPost, - GetAllRolesPermissions, - GetGroupPayouts, - GetGroupRelationships, - GetGroupRelationshipsOptions, - GetGroupSettings, - GetGuestPermissions, - GetJoinRequest, - GetJoinRequestsOptions, - GetMembersOptions, - GetMembersWithRoleOptions, - GetRelationshipRequests, - GetRelationshipRequestsOptions, - GetRolePermissions, - GetSelfGroupMembership, - GetSocialLinks, - GetWallPostsOptions, - JoinGroup, - JoinGroupOptions, - KickMember, - PayoutMembers, - PayoutMembersOptions, - PostSocialLink, - PostSocialLinkOptions, - RemovePrimaryGroup, - SetPrimaryGroup, - UpdateGroupDescription, - UpdateGroupIcon, - UpdateGroupSettings, - UpdateGroupSettingsOptions, - UpdateGroupStatus, - UpdateMember, - UpdateRecurringPayouts, - UpdateRecurringPayoutsOptions, - UpdateRole, - UpdateRoleOptions, - UpdateRolePermissions, - UpdateRolePermissionsOptions, - UpdateSocialLink, - UpdateSocialLinkOptions + AcceptJoinRequest, + AcceptJoinRequests, + AcceptJoinRequestsOptions, + AcceptRelationshipRequest, + AcceptRelationshipRequests, + AcceptRelationshipRequestsOptions, + ChangeOwner, + ClaimGroup, + CreateRelationship, + CreateRelationshipOptions, + CreateRole, + CreateRoleOptions, + CreateWallPost, + CreateWallPostOptions, + DeclineJoinRequest, + DeclineJoinRequests, + DeclineRelationshipRequest, + DeclineRelationshipRequests, + DeclineRelationshipRequestsOptions, + DeleteRelationship, + DeleteRelationshipOptions, + DeleteRole, + DeleteSocialLink, + DeleteWallPost, + GetAllRolesPermissions, + GetGroupPayouts, + GetGroupRelationships, + GetGroupRelationshipsOptions, + GetGroupSettings, + GetGuestPermissions, + GetJoinRequest, + GetJoinRequestsOptions, + GetMembersOptions, + GetMembersWithRoleOptions, + GetRelationshipRequests, + GetRelationshipRequestsOptions, + GetRolePermissions, + GetSelfGroupMembership, + GetSocialLinks, + GetWallPostsOptions, + JoinGroup, + JoinGroupOptions, + KickMember, + PayoutMembers, + PayoutMembersOptions, + PostSocialLink, + PostSocialLinkOptions, + RemovePrimaryGroup, + SetPrimaryGroup, + UpdateGroupDescription, + UpdateGroupIcon, + UpdateGroupSettings, + UpdateGroupSettingsOptions, + UpdateGroupStatus, + UpdateMember, + UpdateRecurringPayouts, + UpdateRecurringPayoutsOptions, + UpdateRole, + UpdateRoleOptions, + UpdateRolePermissions, + UpdateRolePermissionsOptions, + UpdateSocialLink, + UpdateSocialLinkOptions } from "../client/apis/GroupsAPI"; import { PartialUser, PartialUserOptions, UserBase } from "./User"; - interface Structures { - PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; - PartialGameUniverse: new (data: PartialGameUniverseOptions, client: Client) => PartialGameUniverse; + PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; + PartialGameUniverse: new ( + data: PartialGameUniverseOptions, + client: Client + ) => PartialGameUniverse; } - const retrieveStructures = (): Structures => ({ - PartialUser: require("./User").PartialUser, - PartialGameUniverse: require("./Game").PartialGameUniverse + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse }); -type GroupRelationships = Omit & { - groupId: number; - relationshipType: T; - totalGroupCount: number; - groups: Group[]; - nextRowIndex: number; -} - +type GroupRelationships = Omit< +GetGroupRelationships, +"relatedGroups" +> & { + groupId: number; + relationshipType: T; + totalGroupCount: number; + groups: Group[]; + nextRowIndex: number; +}; export interface GroupBaseOptions { - id: number; - name?: string; + id: number; + name?: string; } - export class GroupBase { - public client: Client; - public id: number; - public name: string | null; - - constructor (data: GroupBaseOptions, client: Client) { - this.client = client; - this.id = data.id; - this.name = data.name || null; - } - - getUniverses (options?: Omit): Promise> { - return this.client.apis.developAPI.getGroupUniverses({ - ...options, - groupId: this.id - }) - .then(response => { - const CursorPageClass = require("./Asset").CursorPage; - const structures = retrieveStructures(); - - return new CursorPageClass(this.client, options || {}, { - ...response, - data: response.data.map(universeData => new structures.PartialGameUniverse(({ - id: universeData.id, - name: universeData.name, - rootPlace: universeData.rootPlaceId ? { - id: universeData.rootPlaceId - } : undefined - }), this.client)) - }, this.getUniverses); - }); - } - - /** - * Returns whether the authenticated user can manage the group or not - * @returns {Promise} - */ - canSelfManage (): Promise { - return this.client.apis.developAPI.getSelfManageableGroups() - .then(response => !!response.data.find(data => data.id === this.id)); - } - - /** - * Gets the currently available funds in the group - * @returns {Promise} - */ - getFunds (): Promise { - return this.client.apis.economyAPI.getGroupCurrency({ - groupId: this.id - }) - .then(response => response.robux); - } - - getRevenueSummaryInTimeFrame (timeFrame: GetGroupRevenueSummaryInTimeFrameOptions["timeFrame"]): Promise { - return this.client.apis.economyAPI.getGroupRevenueByTime({ - groupId: this.id, - timeFrame - }); - } - - getTransactions (options: Omit): Promise { - return this.client.apis.economyAPI.getGroupTransactions({ - groupId: this.id, - ...options - }); - } - - getAllies (maxItems = 100, startItem?: number): Promise> { - return this.client.apis.groupsAPI.getGroupRelationships({ - relationshipType: "allies", - groupId: this.id, - maxRows: maxItems, - startRowIndex: startItem - }) - .then(response => ({ - ...response, - relationshipType: "allies", - groups: response.relatedGroups.map(groupData => new Group(groupData, this.client)) - })); - } - - getEnemies (maxItems = 100, startItem?: number): Promise> { - return this.client.apis.groupsAPI.getGroupRelationships({ - relationshipType: "enemies", - groupId: this.id, - maxRows: maxItems, - startRowIndex: startItem - }) - .then(response => ({ - ...response, - relationshipType: "enemies", - groups: response.relatedGroups.map(groupData => new Group(groupData, this.client)) - })); - } - - getGroup (): Promise { - return this.client.getGroup(this.id); - } - - getMember (userId: number): Promise { - return this.client.apis.groupsAPI.getUserGroups({ - userId - }) - .then(response => { - const foundGroup = response.data.find(groupData => groupData.group.id === this.id); - - if (foundGroup) { - // eslint-disable-next-line @typescript-eslint/no-use-before-define - return new GroupMember({ - id: userId, - role: foundGroup.role, - group: foundGroup.group - }, this.client); - } else { - return null; - } - }); - } - - getIsMember (userId: number): Promise { - console.warn(`group.getIsMember() is deprecated and may be removed in the future. Please switch to group.getMember`); - return this.getMember(userId); - } - - getSettings (): Promise { - return this.client.apis.groupsAPI.getGroupSettings({ - groupId: this.id - }); - } - - updateSettings (options: Omit): Promise { - return this.client.apis.groupsAPI.updateGroupSettings({ - groupId: this.id, - ...options - }); - } - - updateDescription (description: string): Promise { - return this.client.apis.groupsAPI.updateGroupDescription({ - description, - groupId: this.id - }); - } - - updateShout (shout: string): Promise { - return this.client.apis.groupsAPI.updateGroupStatus({ - groupId: this.id, - message: shout - }); - } - - updateIcon (file: unknown): Promise { - return this.client.apis.groupsAPI.updateGroupIcon({ - files: file, - groupId: this.id - }); - } - - declineJoinRequests (userIds: number[]): Promise { - return this.client.apis.groupsAPI.declineJoinRequests({ - groupId: this.id, - userIds - }); - } - - getJoinRequests (options: Omit): Promise> { + public client: Client; + public id: number; + public name: string | null; + + constructor (data: GroupBaseOptions, client: Client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + } + + getUniverses ( + options?: Omit + ): Promise> { + return this.client.apis.developAPI + .getGroupUniverses({ + ...options, + groupId: this.id + }) + .then(response => { const CursorPageClass = require("./Asset").CursorPage; + const structures = retrieveStructures(); - return this.client.apis.groupsAPI.getJoinRequests({ - groupId: this.id, - ...options - }) - .then(response => new CursorPageClass( - this.client, - options, - response, - this.getJoinRequests - )); - } - - acceptJoinRequests (options: Omit): Promise { - return this.client.apis.groupsAPI.acceptJoinRequests({ - groupId: this.id, - ...options - }); - } - - declineJoinRequest (userId: number): Promise { - return this.client.apis.groupsAPI.declineJoinRequest({ - groupId: this.id, - userId - }); - } - - getJoinRequest (userId: number): Promise { - return this.client.apis.groupsAPI.getJoinRequest({ - groupId: this.id, - userId - }); - } - - acceptJoinRequest (userId: number): Promise { - return this.client.apis.groupsAPI.acceptJoinRequest({ - groupId: this.id, - userId - }); - } - - getSelfMembership (): Promise { - return this.client.apis.groupsAPI.getSelfGroupMembership({ - groupId: this.id - }); - } - - getRoles (): Promise { - return this.client.apis.groupsAPI.getGroupRoles({ - groupId: this.id - }) - .then(response => response.roles.map(roleData => new GroupRole({ + return new CursorPageClass( + this.client, + options || {}, + { + ...response, + data: response.data.map( + universeData => + new structures.PartialGameUniverse( + { + id: universeData.id, + name: universeData.name, + rootPlace: universeData.rootPlaceId ? + { + id: universeData.rootPlaceId + } : + undefined + }, + this.client + ) + ) + }, + this.getUniverses + ); + }); + } + + /** + * Returns whether the authenticated user can manage the group or not + * @returns {Promise} + */ + canSelfManage (): Promise { + return this.client.apis.developAPI + .getSelfManageableGroups() + .then(response => !!response.data.find(data => data.id === this.id)); + } + + /** + * Gets the currently available funds in the group + * @returns {Promise} + */ + getFunds (): Promise { + return this.client.apis.economyAPI + .getGroupCurrency({ + groupId: this.id + }) + .then(response => response.robux); + } + + getRevenueSummaryInTimeFrame ( + timeFrame: GetGroupRevenueSummaryInTimeFrameOptions["timeFrame"] + ): Promise { + return this.client.apis.economyAPI.getGroupRevenueByTime({ + groupId: this.id, + timeFrame + }); + } + + getTransactions ( + options: Omit + ): Promise { + return this.client.apis.economyAPI.getGroupTransactions({ + groupId: this.id, + ...options + }); + } + + getAllies ( + maxItems = 100, + startItem?: number + ): Promise> { + return this.client.apis.groupsAPI + .getGroupRelationships({ + relationshipType: "allies", + groupId: this.id, + maxRows: maxItems, + startRowIndex: startItem + }) + .then(response => ({ + ...response, + relationshipType: "allies", + groups: response.relatedGroups.map( + groupData => new Group(groupData, this.client) + ) + })); + } + + getEnemies ( + maxItems = 100, + startItem?: number + ): Promise> { + return this.client.apis.groupsAPI + .getGroupRelationships({ + relationshipType: "enemies", + groupId: this.id, + maxRows: maxItems, + startRowIndex: startItem + }) + .then(response => ({ + ...response, + relationshipType: "enemies", + groups: response.relatedGroups.map( + groupData => new Group(groupData, this.client) + ) + })); + } + + getGroup (): Promise { + return this.client.getGroup(this.id); + } + + getMember (userId: number): Promise { + return this.client.apis.groupsAPI + .getUserGroups({ + userId + }) + .then(response => { + const foundGroup = response.data.find( + groupData => groupData.group.id === this.id + ); + + if (foundGroup) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define + return new GroupMember( + { + id: userId, + role: foundGroup.role, + group: foundGroup.group + }, + this.client + ); + } else { + return null; + } + }); + } + + getIsMember (userId: number): Promise { + console.warn( + `group.getIsMember() is deprecated and may be removed in the future. Please switch to group.getMember` + ); + return this.getMember(userId); + } + + getSettings (): Promise { + return this.client.apis.groupsAPI.getGroupSettings({ + groupId: this.id + }); + } + + updateSettings ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.updateGroupSettings({ + groupId: this.id, + ...options + }); + } + + updateDescription (description: string): Promise { + return this.client.apis.groupsAPI.updateGroupDescription({ + description, + groupId: this.id + }); + } + + updateShout (shout: string): Promise { + return this.client.apis.groupsAPI.updateGroupStatus({ + groupId: this.id, + message: shout + }); + } + + updateIcon (file: unknown): Promise { + return this.client.apis.groupsAPI.updateGroupIcon({ + files: file, + groupId: this.id + }); + } + + declineJoinRequests (userIds: number[]): Promise { + return this.client.apis.groupsAPI.declineJoinRequests({ + groupId: this.id, + userIds + }); + } + + getJoinRequests ( + options: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.groupsAPI + .getJoinRequests({ + groupId: this.id, + ...options + }) + .then( + response => + new CursorPageClass( + this.client, + options, + response, + this.getJoinRequests + ) + ); + } + + acceptJoinRequests ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.acceptJoinRequests({ + groupId: this.id, + ...options + }); + } + + declineJoinRequest (userId: number): Promise { + return this.client.apis.groupsAPI.declineJoinRequest({ + groupId: this.id, + userId + }); + } + + getJoinRequest (userId: number): Promise { + return this.client.apis.groupsAPI.getJoinRequest({ + groupId: this.id, + userId + }); + } + + acceptJoinRequest (userId: number): Promise { + return this.client.apis.groupsAPI.acceptJoinRequest({ + groupId: this.id, + userId + }); + } + + getSelfMembership (): Promise { + return this.client.apis.groupsAPI.getSelfGroupMembership({ + groupId: this.id + }); + } + + getRoles (): Promise { + return this.client.apis.groupsAPI + .getGroupRoles({ + groupId: this.id + }) + .then(response => + response.roles.map( + roleData => + new GroupRole( + { group: { - id: this.id, - name: this.name || undefined + id: this.id, + name: this.name || undefined }, ...roleData - }, this.client))); - } - - getMembersWithRole (options: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.groupsAPI.getMembersWithRole({ - groupId: this.id, - ...options - }) - .then(response => new CursorPageClass( - this.client, - options, - response, - this.getMembersWithRole - )); - } - - getMembers (options: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.groupsAPI.getMembers({ - groupId: this.id, - ...options + }, + this.client + ) + ) + ); + } + + getMembersWithRole ( + options: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.groupsAPI + .getMembersWithRole({ + groupId: this.id, + ...options + }) + .then( + response => + new CursorPageClass( + this.client, + options, + response, + this.getMembersWithRole + ) + ); + } + + getMembers ( + options: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.groupsAPI + .getMembers({ + groupId: this.id, + ...options + }) + .then( + response => + new CursorPageClass(this.client, options, response, this.getMembers) + ); + } + + join (options: Omit): Promise { + return this.client.apis.groupsAPI.joinGroup({ + groupId: this.id, + ...options, + captchaProvider: options.captchaProvider || "PROVIDER_ARKOSELABS" + }); + } + + getIsPendingJoin (): Promise { + return this.client.apis.groupsAPI + .getSelfPendingGroupJoins() + .then( + response => + (response.data.find(groupData => groupData.id === this.id) && + true) || + false + ); + } + + changeOwner (userId: number): Promise { + return this.client.apis.groupsAPI.changeGroupOwner({ + groupId: this.id, + userId + }); + } + + claim (): Promise { + return this.client.apis.groupsAPI.claimGroup({ + groupId: this.id + }); + } + + kickMember (userId: number): Promise { + return this.client.apis.groupsAPI.kickMember({ + groupId: this.id, + userId + }); + } + + updateMember (userId: number, roleId: number): Promise { + return this.client.apis.groupsAPI.updateMember({ + groupId: this.id, + roleId, + userId + }); + } + + getPayouts (): Promise { + return this.client.apis.groupsAPI.getGroupPayouts({ + groupId: this.id + }); + } + + payoutMembers ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.payoutMembers({ + groupId: this.id, + ...options + }); + } + + updateRecurringPayouts ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.updateRecurringPayouts({ + groupId: this.id, + ...options + }); + } + + getRelationships ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.getGroupRelationships({ + groupId: this.id, + ...options + }); + } + + declineRelationshipRequests ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.declineRelationshipRequests({ + groupId: this.id, + ...options + }); + } + + getRelationshipRequests ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.getRelationshipRequests({ + groupId: this.id, + ...options + }); + } + + acceptRelationshipRequests ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.acceptRelationshipRequests({ + groupId: this.id, + ...options + }); + } + + deleteRelationship ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.deleteRelationship({ + groupId: this.id, + ...options + }); + } + + createRelationship ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.createRelationship({ + groupId: this.id, + ...options + }); + } + + acceptRelationshipRequest ( + type: "enemies" | "allies", + withGroup: number + ): Promise { + return this.client.apis.groupsAPI.acceptRelationshipRequest({ + groupId: this.id, + relationshipType: type || "allies", + withGroup + }); + } + + declineRelationshipRequest ( + type: "enemies" | "allies", + withGroup: number + ): Promise { + return this.client.apis.groupsAPI.declineRelationshipRequest({ + groupId: this.id, + relationshipType: type || "allies", + withGroup + }); + } + + getRolePermissions (roleId: number): Promise { + return this.client.apis.groupsAPI.getRolePermissions({ + groupId: this.id, + roleId + }); + } + + updateRolePermissions ( + roleId: number, + permissions: Omit + ): Promise { + return this.client.apis.groupsAPI.updateRolePermissions({ + groupId: this.id, + roleId, + ...permissions + }); + } + + getGuestPermissions (): Promise { + return this.client.apis.groupsAPI.getGuestPermissions({ + groupId: this.id + }); + } + + getAllRolesPermissions (): Promise { + return this.client.apis.groupsAPI.getAllRolesPermissions({ + groupId: this.id + }); + } + + getSocialLinks (): Promise { + return this.client.apis.groupsAPI.getSocialLinks({ + groupId: this.id + }); + } + + createSocialLink ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.createSocialLink({ + groupId: this.id, + ...options + }); + } + + deleteSocialLink (id: number): Promise { + return this.client.apis.groupsAPI.deleteSocialLink({ + groupId: this.id, + id + }); + } + + updateSocialLink ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.updateSocialLink({ + groupId: this.id, + ...options + }); + } + + getWallPosts ( + options: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.groupsAPI + .getWallPosts({ + groupId: this.id, + ...options + }) + .then( + response => + new CursorPageClass(this.client, options, response, this.getWallPosts) + ); + } + + createWallPost ( + options: Omit + ): Promise { + return this.client.apis.groupsAPI.createWallPost({ + groupId: this.id, + ...options + }); + } + + deleteWallPost (id: number): Promise { + return this.client.apis.groupsAPI.deleteWallPost({ + groupId: this.id, + id + }); + } + + getIsUserPrimaryGroup (userId: number): Promise { + return ( + this.client.apis.groupsAPI + .getUserPrimaryGroup({ + userId }) - .then(response => new CursorPageClass( - this.client, - options, - response, - this.getMembers - )); - } - - join (options: Omit): Promise { - return this.client.apis.groupsAPI.joinGroup({ - groupId: this.id, - ...options, - captchaProvider: options.captchaProvider || "PROVIDER_ARKOSELABS" - }); - } - - getIsPendingJoin (): Promise { - return this.client.apis.groupsAPI.getSelfPendingGroupJoins() - .then(response => (response.data.find(groupData => groupData.id === this.id) && true) || false); - } - - changeOwner (userId: number): Promise { - return this.client.apis.groupsAPI.changeGroupOwner({ - groupId: this.id, - userId - }); - } - - claim (): Promise { - return this.client.apis.groupsAPI.claimGroup({ - groupId: this.id - }); - } - - kickMember (userId: number): Promise { - return this.client.apis.groupsAPI.kickMember({ - groupId: this.id, - userId - }); - } - - updateMember (userId: number, roleId: number): Promise { - return this.client.apis.groupsAPI.updateMember({ - groupId: this.id, - roleId, - userId - }); - } - - getPayouts (): Promise { - return this.client.apis.groupsAPI.getGroupPayouts({ - groupId: this.id - }); - } - - payoutMembers (options: Omit): Promise { - return this.client.apis.groupsAPI.payoutMembers({ - groupId: this.id, - ...options - }); - } - - updateRecurringPayouts (options: Omit): Promise { - return this.client.apis.groupsAPI.updateRecurringPayouts({ - groupId: this.id, - ...options - }); - } - - getRelationships (options: Omit): Promise { - return this.client.apis.groupsAPI.getGroupRelationships({ - groupId: this.id, - ...options - }); - } - - declineRelationshipRequests (options: Omit): Promise { - return this.client.apis.groupsAPI.declineRelationshipRequests({ - groupId: this.id, - ...options - }); - } - - getRelationshipRequests (options: Omit): Promise { - return this.client.apis.groupsAPI.getRelationshipRequests({ - groupId: this.id, - ...options - }); - } - - acceptRelationshipRequests (options: Omit): Promise { - return this.client.apis.groupsAPI.acceptRelationshipRequests({ - groupId: this.id, - ...options - }); - } - - deleteRelationship (options: Omit): Promise { - return this.client.apis.groupsAPI.deleteRelationship({ - groupId: this.id, - ...options - }); - } - - createRelationship (options: Omit): Promise { - return this.client.apis.groupsAPI.createRelationship({ - groupId: this.id, - ...options - }); - } - - acceptRelationshipRequest (type: "enemies" | "allies", withGroup: number): Promise { - return this.client.apis.groupsAPI.acceptRelationshipRequest({ - groupId: this.id, - relationshipType: type || "allies", - withGroup - }); - } - - declineRelationshipRequest (type: "enemies" | "allies", withGroup: number): Promise { - return this.client.apis.groupsAPI.declineRelationshipRequest({ - groupId: this.id, - relationshipType: type || "allies", - withGroup - }); - } - - getRolePermissions (roleId: number): Promise { - return this.client.apis.groupsAPI.getRolePermissions({ - groupId: this.id, - roleId - }); - } - - updateRolePermissions (roleId: number, permissions: Omit): Promise { - return this.client.apis.groupsAPI.updateRolePermissions({ - groupId: this.id, - roleId, - ...permissions - }); - } - - getGuestPermissions (): Promise { - return this.client.apis.groupsAPI.getGuestPermissions({ - groupId: this.id - }); - } - - getAllRolesPermissions (): Promise { - return this.client.apis.groupsAPI.getAllRolesPermissions({ - groupId: this.id - }); - } - - getSocialLinks (): Promise { - return this.client.apis.groupsAPI.getSocialLinks({ - groupId: this.id - }); - } - - createSocialLink (options: Omit): Promise { - return this.client.apis.groupsAPI.createSocialLink({ - groupId: this.id, - ...options - }); - } - - deleteSocialLink (id: number): Promise { - return this.client.apis.groupsAPI.deleteSocialLink({ - groupId: this.id, - id - }); - } - - updateSocialLink (options: Omit): Promise { - return this.client.apis.groupsAPI.updateSocialLink({ - groupId: this.id, - ...options - }); - } - - getWallPosts (options: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.groupsAPI.getWallPosts({ - groupId: this.id, - ...options - }) - .then(response => new CursorPageClass( - this.client, - options, - response, - this.getWallPosts - )); - } - - createWallPost (options: Omit): Promise { - return this.client.apis.groupsAPI.createWallPost({ - groupId: this.id, - ...options - }); - } - - deleteWallPost (id: number): Promise { - return this.client.apis.groupsAPI.deleteWallPost({ - groupId: this.id, - id - }); - } - - getIsUserPrimaryGroup (userId: number): Promise { - return this.client.apis.groupsAPI.getUserPrimaryGroup({ - userId - }) - // eslint-disable-next-line @typescript-eslint/no-use-before-define - .then(response => response && response.group && response.role ? new GroupMember({ + // eslint-disable-next-line @typescript-eslint/no-use-before-define + .then(response => + response && response.group && response.role ? + new GroupMember( + { group: response.group, role: { - id: response.role!.id!, - name: response.role!.name!, - rank: response.role!.rank! + id: response.role!.id!, + name: response.role!.name!, + rank: response.role!.rank! }, id: userId - }, this.client) : null); - } - - removeAsPrimary (): Promise { - return this.client.apis.groupsAPI.removePrimaryGroup(); - } - - setAsPrimary (): Promise { - return this.client.apis.groupsAPI.setPrimaryGroup({ - groupId: this.id - }); - } - - createRole (options: Omit): Promise { - return this.client.apis.groupsAPI.createRole({ - groupId: this.id, - ...options - }); - } - - deleteRole (roleId: number): Promise { - return this.client.apis.groupsAPI.deleteRole({ - groupId: this.id, - roleId - }); - } - - updateRole (roleId: number, options: Omit): Promise { - return this.client.apis.groupsAPI.updateRole({ - groupId: this.id, - roleId, - ...options - }); - } + }, + this.client + ) : + null + ) + ); + } + + removeAsPrimary (): Promise { + return this.client.apis.groupsAPI.removePrimaryGroup(); + } + + setAsPrimary (): Promise { + return this.client.apis.groupsAPI.setPrimaryGroup({ + groupId: this.id + }); + } + + createRole (options: Omit): Promise { + return this.client.apis.groupsAPI.createRole({ + groupId: this.id, + ...options + }); + } + + deleteRole (roleId: number): Promise { + return this.client.apis.groupsAPI.deleteRole({ + groupId: this.id, + roleId + }); + } + + updateRole ( + roleId: number, + options: Omit + ): Promise { + return this.client.apis.groupsAPI.updateRole({ + groupId: this.id, + roleId, + ...options + }); + } } - export interface PartialGroupOptions { - id: number; - name?: string; + id: number; + name?: string; } - export class PartialGroup extends GroupBase { - // Shut up eslint, this is not useless either - // eslint-disable-next-line no-useless-constructor - constructor (data: PartialGroupOptions, client: Client) { - super(data, client); - } + // Shut up eslint, this is not useless either + // eslint-disable-next-line no-useless-constructor + constructor (data: PartialGroupOptions, client: Client) { + super(data, client); + } } - export interface GroupMemberOptions { - group: PartialGroupOptions; - name?: string | null; - /** - * The user id - */ + group: PartialGroupOptions; + name?: string | null; + /** + * The user id + */ + id: number; + role?: { id: number; - role?: { - id: number; - name: string; - rank: number; - }; + name: string; + rank: number; + }; } - export class GroupMember extends UserBase { - public group: PartialGroup; - public role: GroupRole | null; - - constructor (data: GroupMemberOptions, client: Client) { - super({ - name: data.name, - id: data.id - }, client); - this.group = new PartialGroup(data.group, client); - // eslint-disable-next-line @typescript-eslint/no-use-before-define - this.role = data.role ? new GroupRole({ - id: data.role.id, - name: data.role.name, - rank: data.role.rank, - group: { - name: this.name || undefined, - id: this.id - } - }, client) : null; - } - - kick (): Promise { - return this.kickFromGroup(this.id); - } + public group: PartialGroup; + public role: GroupRole | null; + + constructor (data: GroupMemberOptions, client: Client) { + super( + { + name: data.name, + id: data.id + }, + client + ); + this.group = new PartialGroup(data.group, client); + // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.role = data.role ? + new GroupRole( + { + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + name: this.name || undefined, + id: this.id + } + }, + client + ) : + null; + } + + kick (): Promise { + return this.kickFromGroup(this.id); + } } - export interface GroupOptions { - id: number; - name: string; - description: string; - owner: { - buildersClubMembershipType: string; - userId: number; - username: string; - displayName: string; - } | null; - shout: { - body: string; - poster: { - buildersClubMembershipType: string; - userId: number; - username: string; - displayName: string; - }; - created: string; - updated: string; - } | null; - memberCount: number; - isBuildersClubOnly: boolean; - publicEntryAllowed: boolean; - isLocked: boolean; + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + } | null; + shout: { + body: string; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + created: string; + updated: string; + } | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; } - export class Group extends GroupBase { - public description: string; - public name: string; - public owner: GroupMember | null; - public shout: GroupShout | null; - public memberCount: number; - public isBuildersClubOnly: boolean; - public publicEntryAllowed: boolean; - public isLocked: boolean; - - constructor (data: GroupOptions, client: Client) { - super(data, client); - this.description = data.description; - this.name = data.name; - this.owner = data.owner ? new GroupMember({ - id: data.owner.userId, - name: data.owner.username, - group: this - }, client) : null; - this.shout = data.shout ? new GroupShout({ - content: data.shout.body, - creator: { - id: data.shout.poster.userId, - username: data.shout.poster.username - }, - group: { - id: this.id, - name: this.name || undefined - } - }, client) : null; - this.memberCount = data.memberCount; - this.isBuildersClubOnly = data.isBuildersClubOnly; - this.publicEntryAllowed = data.publicEntryAllowed; - this.isLocked = data.isLocked; - } + public description: string; + public name: string; + public owner: GroupMember | null; + public shout: GroupShout | null; + public memberCount: number; + public isBuildersClubOnly: boolean; + public publicEntryAllowed: boolean; + public isLocked: boolean; + + constructor (data: GroupOptions, client: Client) { + super(data, client); + this.description = data.description; + this.name = data.name; + this.owner = data.owner ? + new GroupMember( + { + id: data.owner.userId, + name: data.owner.username, + group: this + }, + client + ) : + null; + this.shout = data.shout ? + new GroupShout( + { + content: data.shout.body, + creator: { + id: data.shout.poster.userId, + username: data.shout.poster.username + }, + group: { + id: this.id, + name: this.name || undefined + } + }, + client + ) : + null; + this.memberCount = data.memberCount; + this.isBuildersClubOnly = data.isBuildersClubOnly; + this.publicEntryAllowed = data.publicEntryAllowed; + this.isLocked = data.isLocked; + } } - export interface GroupJoinRequestOptions { - id?: number; - user: PartialUserOptions; - group: PartialGroupOptions; - created: string; + id?: number; + user: PartialUserOptions; + group: PartialGroupOptions; + created: string; } - export class GroupJoinRequest { - public client: Client; - public id: number | null; - public user: PartialUser; - public group: PartialGroup; - public created: Date; - - constructor (data: GroupJoinRequestOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.id = data.id || null; - this.user = new structures.PartialUser(data.user, client); - this.group = new PartialGroup(data.group, client); - this.created = new Date(data.created); - } + public client: Client; + public id: number | null; + public user: PartialUser; + public group: PartialGroup; + public created: Date; + + constructor (data: GroupJoinRequestOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.id = data.id || null; + this.user = new structures.PartialUser(data.user, client); + this.group = new PartialGroup(data.group, client); + this.created = new Date(data.created); + } } - export interface GroupRoleOptions { - id?: number; + id?: number; + name?: string; + rank?: number; + group: { + id: number; name?: string; - rank?: number; - group: { - id: number; - name?: string; - }; + }; } - export class GroupRole { - public client: Client; - public id: number | null; - public name: string | null; - public rank: number | null; - public group: PartialGroup; - - constructor (data: GroupRoleOptions, client: Client) { - this.client = client; - this.id = data.id || null; - this.name = data.name || null; - this.rank = data.rank || null; - this.group = new PartialGroup({ - id: data.group.id, - name: data.group.name - }, client); - } + public client: Client; + public id: number | null; + public name: string | null; + public rank: number | null; + public group: PartialGroup; + + constructor (data: GroupRoleOptions, client: Client) { + this.client = client; + this.id = data.id || null; + this.name = data.name || null; + this.rank = data.rank || null; + this.group = new PartialGroup( + { + id: data.group.id, + name: data.group.name + }, + client + ); + } } - export interface GroupRolePermissionsOptions { - groupId: number; - role: { - id: number; - name: string; - description: string; - rank: number; - memberCount: number; + groupId: number; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + permissions: { + groupPostsPermissions: { + viewWall: boolean; + postToWall: boolean; + deleteFromWall: boolean; + viewStatus: boolean; + postToStatus: boolean; + }; + groupMembershipPermissions: { + changeRank: boolean; + inviteMembers: boolean; + removeMembers: boolean; + }; + groupManagementPermissions: { + manageRelationships: boolean; + manageClan: boolean; + viewAuditLogs: boolean; }; - permissions: { - groupPostsPermissions: { - viewWall: boolean; - postToWall: boolean; - deleteFromWall: boolean; - viewStatus: boolean; - postToStatus: boolean; - }; - groupMembershipPermissions: { - changeRank: boolean; - inviteMembers: boolean; - removeMembers: boolean; - }; - groupManagementPermissions: { - manageRelationships: boolean; - manageClan: boolean; - viewAuditLogs: boolean; - }; - groupEconomyPermissions: { - spendGroupFunds: boolean; - advertiseGroup: boolean; - createItems: boolean; - manageItems: boolean; - addGroupPlaces: boolean; - manageGroupGames: boolean; - viewGroupPayouts: boolean; - }; + groupEconomyPermissions: { + spendGroupFunds: boolean; + advertiseGroup: boolean; + createItems: boolean; + manageItems: boolean; + addGroupPlaces: boolean; + manageGroupGames: boolean; + viewGroupPayouts: boolean; }; + }; } - export class GroupRolePermissions { - public client: Client; - public group: PartialGroup; - public role: GroupRole; - public permissions: GroupRolePermissionsOptions["permissions"]; - - constructor (data: GroupRolePermissionsOptions, client: Client) { - this.client = client; - this.group = new PartialGroup({ - id: data.groupId - }, client); - this.role = new GroupRole({ - id: data.role.id, - name: data.role.name, - rank: data.role.rank, - group: { - id: this.group.id - } - }, client); - this.permissions = data.permissions; - } + public client: Client; + public group: PartialGroup; + public role: GroupRole; + public permissions: GroupRolePermissionsOptions["permissions"]; + + constructor (data: GroupRolePermissionsOptions, client: Client) { + this.client = client; + this.group = new PartialGroup( + { + id: data.groupId + }, + client + ); + this.role = new GroupRole( + { + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + id: this.group.id + } + }, + client + ); + this.permissions = data.permissions; + } } - export interface GroupShoutOptions { - content: string; - creator: { - id: number; - username: string; - }; - group: { - id: number; - name?: string; - }; + content: string; + creator: { + id: number; + username: string; + }; + group: { + id: number; + name?: string; + }; } - export class GroupShout { - public client: Client; - public content: string; - public creator: PartialUser; - public group: PartialGroup; - - constructor (data: GroupShoutOptions, client: Client) { - const structures = retrieveStructures(); - - this.client = client; - this.content = data.content; - this.creator = new structures.PartialUser(data.creator, client); - this.group = new PartialGroup({ - id: data.group.id, - name: data.group.name - }, client); - } + public client: Client; + public content: string; + public creator: PartialUser; + public group: PartialGroup; + + constructor (data: GroupShoutOptions, client: Client) { + const structures = retrieveStructures(); + + this.client = client; + this.content = data.content; + this.creator = new structures.PartialUser(data.creator, client); + this.group = new PartialGroup( + { + id: data.group.id, + name: data.group.name + }, + client + ); + } } - export interface GroupWallPostOptions { + id: number; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + group: { id: number; - poster: { - buildersClubMembershipType: string; - userId: number; - username: string; - displayName: string; - }; - group: { - id: number; - name?: string; - }; - body: string; - created: string; - updated: string; + name?: string; + }; + body: string; + created: string; + updated: string; } - export class GroupWallPost { - public client: Client; - public id: number; - public creator: GroupMember; - public content: string; - public created: Date; - - constructor (data: GroupWallPostOptions, client: Client) { - this.client = client; - this.id = data.id; - this.content = data.body; - this.creator = new GroupMember({ - group: { - id: data.group.id, - name: data.group.name - }, - id: data.poster.userId, - name: data.poster.username - }, client); - this.created = new Date(data.created); - } + public client: Client; + public id: number; + public creator: GroupMember; + public content: string; + public created: Date; + + constructor (data: GroupWallPostOptions, client: Client) { + this.client = client; + this.id = data.id; + this.content = data.body; + this.creator = new GroupMember( + { + group: { + id: data.group.id, + name: data.group.name + }, + id: data.poster.userId, + name: data.poster.username + }, + client + ); + this.created = new Date(data.created); + } } diff --git a/src/structures/User.ts b/src/structures/User.ts index 6efea37c7..7bee3d361 100644 --- a/src/structures/User.ts +++ b/src/structures/User.ts @@ -1,712 +1,882 @@ import Client from "../client"; import { - GetUserAvatar, - GetUserCurrentlyWearing, - GetUserOutfits, - GetUserOutfitsOptions + GetUserAvatar, + GetUserCurrentlyWearing, + GetUserOutfits, + GetUserOutfitsOptions } from "../client/apis/AvatarAPI"; -import { DeleteBadgeFromUser, GetUserBadges, GetUserBadgesOptions } from "../client/apis/BadgesAPI"; +import { + DeleteBadgeFromUser, + GetUserBadges, + GetUserBadgesOptions +} from "../client/apis/BadgesAPI"; import { CursorPage } from "./Asset"; -import { GetUserBundles, GetUserBundlesByType, GetUserBundlesOptions } from "../client/apis/CatalogAPI"; -import { AddUsersToConversation, RemoveUserFromConversation, StartOneToOneConversation } from "../client/apis/ChatAPI"; -import { GetUsersTags, SetPendingUserTag, SetUserTag } from "../client/apis/ContactsAPI"; +import { + GetUserBundles, + GetUserBundlesByType, + GetUserBundlesOptions +} from "../client/apis/CatalogAPI"; +import { + AddUsersToConversation, + RemoveUserFromConversation, + StartOneToOneConversation +} from "../client/apis/ChatAPI"; +import { + GetUsersTags, + SetPendingUserTag, + SetUserTag +} from "../client/apis/ContactsAPI"; import { RemoveUserFromUniverseTeamCreate } from "../client/apis/DevelopAPI"; import { GetUserResellableAssetCopies } from "../client/apis/EconomyAPI"; import { - AcceptFriendRequest, - DeclineFriendRequest, - FollowUser, - GetUserFollowers, - GetUserFollowersOptions, - GetUserFollowing, - GetUserFollowingOptions, - GetUserFriendsWithStatuses, - SendFriendRequest, - UnFollowUser, - UnfriendUser + AcceptFriendRequest, + DeclineFriendRequest, + FollowUser, + GetUserFollowers, + GetUserFollowersOptions, + GetUserFollowing, + GetUserFollowingOptions, + GetUserFriendsWithStatuses, + SendFriendRequest, + UnFollowUser, + UnfriendUser } from "../client/apis/FriendsAPI"; -import { GetJoinRequest, GetUserGroups, GetUserPrimaryGroup, PayoutMembersOptions } from "../client/apis/GroupsAPI"; import { - GetUserCollectibles, - GetUserCollectiblesOptions, - GetUserInventory, - GetUserInventoryByAssetTypeId, - GetUserInventoryByAssetTypeIdOptions, - GetUserInventoryOptions, - GetUserItemsByTypeAndTargetId, - GetUserItemsByTypeAndTargetIdOptions + GetJoinRequest, + GetUserGroups, + GetUserPrimaryGroup, + PayoutMembersOptions +} from "../client/apis/GroupsAPI"; +import { + GetUserCollectibles, + GetUserCollectiblesOptions, + GetUserInventory, + GetUserInventoryByAssetTypeId, + GetUserInventoryByAssetTypeIdOptions, + GetUserInventoryOptions, + GetUserItemsByTypeAndTargetId, + GetUserItemsByTypeAndTargetIdOptions } from "../client/apis/InventoryAPI"; import { - PremiumUpsellCheck, - PremiumUpsellCheckOptions, - ValidateUserMembership + PremiumUpsellCheck, + PremiumUpsellCheckOptions, + ValidateUserMembership } from "../client/apis/PremiumFeaturesAPI"; import { GetUsersPresences } from "../client/apis/PresenceAPI"; -import { SendMessage, SendMessageOptions } from "../client/apis/PrivateMessagesAPI"; import { - GetUsersAvatarBustImages, - GetUsersAvatarBustImagesOptions, - GetUsersAvatarHeadShotsImages, - GetUsersAvatarHeadShotsImagesOptions, - GetUsersFullBodyAvatarImages, - GetUsersFullBodyAvatarImagesOptions + SendMessage, + SendMessageOptions +} from "../client/apis/PrivateMessagesAPI"; +import { + GetUsersAvatarBustImages, + GetUsersAvatarBustImagesOptions, + GetUsersAvatarHeadShotsImages, + GetUsersAvatarHeadShotsImagesOptions, + GetUsersFullBodyAvatarImages, + GetUsersFullBodyAvatarImagesOptions } from "../client/apis/ThumbnailsAPI"; import { SendTrade, SendTradeOptions } from "../client/apis/TradesAPI"; -import { UpdateUser, UpdateUserAccess } from "../client/apis/TranslationRolesAPI"; +import { + UpdateUser, + UpdateUserAccess +} from "../client/apis/TranslationRolesAPI"; import { EnumUserPresence } from "../interfaces/GeneralInterfaces"; - export interface UserBaseOptions { - id: number; - name?: string | null; - displayName?: string; - membership?: boolean; + id: number; + name?: string | null; + displayName?: string; + membership?: boolean; } - export class UserBase { - public client: Client; - public id: number; - public name: string | null; - public displayName: string | null; - public membership: unknown; - - constructor (data: UserBaseOptions, client: Client) { - this.client = client; - this.id = data.id; - this.name = data.name || null; - this.displayName = data.displayName || null; - this.membership = data.membership || null; - } - - getStatus (): Promise { - return this.client.apis.usersAPI.getUserStatus({ - userId: this.id - }) - .then(response => response.status); - } - - getAvatar (): Promise { - return this.client.apis.avatarAPI.getUserAvatar({ - userId: this.id - }); - } - - getCurrentlyWearing (): Promise { - return this.client.apis.avatarAPI.getUserCurrentlyWearing({ - userId: this.id - }); - } - - getOutfits (options: Omit): Promise { - return this.client.apis.avatarAPI.getUserOutfits({ - ...options, - userId: this.id - }); - } - - getBadges (options?: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.badgesAPI.getUserBadges({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options || {}, response, this.getBadges) as CursorPage); - } - - getBadgesAwardedDates (badges: number[]): Promise<{ id: number; awardedAt: Date }[]> { - return this.client.apis.badgesAPI.getUserBadgesAwardedDates({ - badgeIds: badges, - userId: this.id - }) - .then(response => response.data.map(badgeAwarded => ({ - id: badgeAwarded.badgeId, - awardedAt: new Date(badgeAwarded.awardedDate) - }))); - } - - deleteBadge (badgeId: number): Promise { - return this.client.apis.badgesAPI.deleteBadgeFromUser({ - badgeId, - userId: this.id - }); - } - - getBundles (options?: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.catalogAPI.getUserBundles({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options || {}, response, this.getBundles)); - } - - getBundlesByType (bundleType: string, options?: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.catalogAPI.getUserBundlesByType({ - ...options, - userId: this.id, - bundleType - }) - .then(response => new CursorPageClass(this.client, options || {}, response, this.getBundlesByType)); - } - - addToChatConversation (conversationId: number): Promise { - return this.client.apis.chatAPI.addUsersToConversation({ - conversationId, - participantUserIds: [this.id] - }); - } - - removeFromConversation (conversationId: number): Promise { - return this.client.apis.chatAPI.removeUserFromConversation({ - conversationId, - participantUserId: this.id - }); - } - - startConversation (): Promise { - return this.client.apis.chatAPI.startOneToOneConversation({ - participantUserId: this.id - }); - } - - getTag (): Promise { - return this.client.apis.contactsAPI.getUsersTags({ - targetUserIds: [this.id] - }) - .then(response => response[0]); - } - - setPendingTag (tag: string): Promise { - return this.client.apis.contactsAPI.setPendingUserTag({ - userTag: tag, - targetUserId: this.id - }); - } - - setTag (tag: string): Promise { - return this.client.apis.contactsAPI.setUserTag({ - targetUserId: this.id, - userTag: tag - }); - } - - removeFromTeamCreate (universeId: number): Promise { - return this.client.apis.developAPI.removeUserFromUniverseTeamCreate({ - userId: this.id, - universeId - }); - } - - getResellableAssetCopies (assetId: number): Promise { - return this.client.apis.economyAPI.getUserResellableAssetCopies({ - assetId, - userId: this.id - }); - } - - getFollowers (options?: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.friendsAPI.getUserFollowers({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options || {}, response, this.getFollowers)); - } - - getFollowersCount (): Promise { - return this.client.apis.friendsAPI.getUserFollowersCount({ - userId: this.id - }) - .then(response => response.count); - } - - getFollowing (options?: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.friendsAPI.getUserFollowing({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options || {}, response, this.getFollowing)); - } - - getFollowingCount (): Promise { - return this.client.apis.friendsAPI.getUserFollowingCount({ - userId: this.id - }) - .then(response => response.count); - } - - getFriends (): Promise { - return this.client.apis.friendsAPI.getUserFriends({ - userId: this.id - }) - .then(response => response.data.map(friendRequest => new FriendRequest(friendRequest, this.client))); - } - - getFriendsCount (): Promise { - return this.client.apis.friendsAPI.getUserFriendsCount({ - userId: this.id - }) - .then(data => data.count); - } - - getFriendsWithStatuses (userIds: number[]): Promise { - return this.client.apis.friendsAPI.getUserFriendsWithStatuses({ - userId: this.id, - withUserIds: userIds - }); - } - - follow (): Promise { - return this.client.apis.friendsAPI.followUser({ - userId: this.id - }); - } - - friend (source?: string): Promise { - return this.client.apis.friendsAPI.sendFriendRequest({ - source: source || "Unknown", - userId: this.id - }); - } - - unFollow (): Promise { - return this.client.apis.friendsAPI.unFollowUser({ - userId: this.id - }); - } - - unfriend (): Promise { - return this.client.apis.friendsAPI.unfriendUser({ - userId: this.id - }); - } - - acceptFriendRequest (): Promise { - return this.client.apis.friendsAPI.acceptFriendRequest({ - userId: this.id - }); - } - - declineFriendRequest (): Promise { - return this.client.apis.friendsAPI.declineFriendRequest({ - userId: this.id - }); - } - - canInviteToVIPServer (): Promise { - return this.client.apis.gamesAPI.canSelfInviteUserToVIPServer({ - userId: this.id - }) - .then(response => response.canInvite); - } - - awardBadge (badgeId: number, placeId: number): Promise { - return this.client.apis.generalApi.awardBadge({ - badgeId, - placeId, - userId: this.id - }) - .then(response => response as unknown as string); - } - - isFollowedByUser (userId: number): Promise { - return this.client.apis.generalApi.isUserFollowing({ - userId, - followUserId: this.id - }); - } - - getGroups (): Promise { - return this.client.apis.groupsAPI.getUserGroups({ - userId: this.id - }); - } - - ownsAsset (assetId: number): Promise { - return this.client.apis.generalApi.userOwnsAsset({ - userId: this.id, - assetId - }); - } - - block (): Promise { - return this.client.apis.generalApi.blockUser({ - userId: this.id - }); - } - - unblock (): Promise { - return this.client.apis.generalApi.unblockUser({ - userId: this.id - }); - } - - canManageAsset (assetId: number): Promise { - return this.client.apis.generalApi.userCanManageAsset({ - assetId, - userId: this.id - }); - } - - acceptJoinRequestInGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.acceptJoinRequest({ - groupId, - userId: this.id - }); - } - - declineJoinRequestInGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.declineJoinRequest({ - groupId, - userId: this.id - }); - } - - getJoinRequestInGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.getJoinRequest({ - groupId, - userId: this.id - }); - } - - setGroupOwner (groupId: number): Promise { - return this.client.apis.groupsAPI.changeGroupOwner({ - groupId, - userId: this.id - }); - } - - kickFromGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.kickMember({ - groupId: groupId, - userId: this.id - }); - } - - updateMemberInGroup (groupId: number, roleId: number): Promise { - return this.client.apis.groupsAPI.updateMember({ - groupId, - roleId, - userId: this.id - }); - } - - payoutUserFromGroup (options: { - groupId: number; - type: PayoutMembersOptions["type"]; - amount: number; - }): Promise { - return this.client.apis.groupsAPI.payoutMembers({ - type: options.type, - groupId: options.groupId, - users: [ - { - userId: this.id, - amount: options.amount - } - ] - }); - } - - deleteGroupWallPosts (groupId: number): Promise { - return this.client.apis.groupsAPI.deleteUserWallPosts({ - groupId, - userId: this.id - }); - } - - getPrimaryGroup (): Promise { - return this.client.apis.groupsAPI.getUserPrimaryGroup({ - userId: this.id - }); - } - - getCollectibles (options?: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI.getUserCollectibles({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options || {}, response, this.getCollectibles)); - } - - getItemsByTypeAndTargetId (itemType: GetUserItemsByTypeAndTargetIdOptions["itemType"], id: number): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI.getUserItemsByTypeAndTargetId({ - itemType, - itemTargetId: id, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, {}, response, this.getItemsByTypeAndTargetId)); - } - - getInventory (options: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI.getUserInventory({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options, response, this.getInventory)); - } - - getInventoryByAssetTypeId (options: Omit): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI.getUserInventoryByAssetTypeId({ - ...options, - userId: this.id - }) - .then(response => new CursorPageClass(this.client, options, response, this.getInventoryByAssetTypeId)); - } - - getUser (): Promise { - return this.client.getUser(this.id); - } - - getPremiumMembership (): Promise { - return this.client.apis.premiumFeaturesAPI.validateUserMembership({ - userId: this.id - }); - } - - upsellPremiumCheck (options: Omit): Promise { - return this.client.apis.premiumFeaturesAPI.premiumUpsellCheck({ - ...options, - userId: this.id - }); - } - - getPresence (): Promise { - return this.client.apis.presenceAPI.getUsersPresences({ - userIds: [this.id] - }) - .then(response => response.userPresences[0]); - } - - sendMessage (options: Omit): Promise { - return this.client.apis.privateMessagesAPI.sendMessage({ - ...options, - userId: this.id - }); - } - - getFullBodyAvatarImage (options: Omit): Promise { - return this.client.apis.thumbnailsAPI.getUsersFullBodyAvatarImages({ - ...options, - userIds: [this.id] - }) - .then(response => response.data[0]); - } - - getAvatarBustImage (options: Omit): Promise { - return this.client.apis.thumbnailsAPI.getUsersAvatarBustImages({ - ...options, - userIds: [this.id] - }) - .then(response => response.data[0]); - } - - getAvatarHeadShotImage (options: Omit): Promise { - return this.client.apis.thumbnailsAPI.getUsersAvatarHeadShotImages({ - ...options, - userIds: [this.id] - }) - .then(response => response.data[0]); - } - - getCanTrade (): Promise { - return this.client.apis.tradesAPI.canTradeWith({ - userId: this.id - }) - .then(response => response.canTrade); - } - - sendTrade (offers: Omit[]): Promise { - return this.client.apis.tradesAPI.sendTrade({ - offers: offers.map(offerData => ({ - userId: this.id, - robux: offerData.robux, - userAssetIds: offerData.userAssetIds - })) - }); - } - - updateTranslationGameAccess (options: Omit): Promise { - return this.client.apis.translationRolesAPI.updateUserAccess({ - ...options, - userId: this.id - }); - } + public client: Client; + public id: number; + public name: string | null; + public displayName: string | null; + public membership: unknown; + + constructor (data: UserBaseOptions, client: Client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + this.displayName = data.displayName || null; + this.membership = data.membership || null; + } + + getStatus (): Promise { + return this.client.apis.usersAPI + .getUserStatus({ + userId: this.id + }) + .then(response => response.status); + } + + getAvatar (): Promise { + return this.client.apis.avatarAPI.getUserAvatar({ + userId: this.id + }); + } + + getCurrentlyWearing (): Promise { + return this.client.apis.avatarAPI.getUserCurrentlyWearing({ + userId: this.id + }); + } + + getOutfits ( + options: Omit + ): Promise { + return this.client.apis.avatarAPI.getUserOutfits({ + ...options, + userId: this.id + }); + } + + getBadges ( + options?: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.badgesAPI + .getUserBadges({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + options || {}, + response, + this.getBadges + ) as CursorPage + ); + } + + getBadgesAwardedDates ( + badges: number[] + ): Promise<{ id: number; awardedAt: Date }[]> { + return this.client.apis.badgesAPI + .getUserBadgesAwardedDates({ + badgeIds: badges, + userId: this.id + }) + .then(response => + response.data.map(badgeAwarded => ({ + id: badgeAwarded.badgeId, + awardedAt: new Date(badgeAwarded.awardedDate) + })) + ); + } + + deleteBadge (badgeId: number): Promise { + return this.client.apis.badgesAPI.deleteBadgeFromUser({ + badgeId, + userId: this.id + }); + } + + getBundles ( + options?: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.catalogAPI + .getUserBundles({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + options || {}, + response, + this.getBundles + ) + ); + } + + getBundlesByType ( + bundleType: string, + options?: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.catalogAPI + .getUserBundlesByType({ + ...options, + userId: this.id, + bundleType + }) + .then( + response => + new CursorPageClass( + this.client, + options || {}, + response, + this.getBundlesByType + ) + ); + } + + addToChatConversation ( + conversationId: number + ): Promise { + return this.client.apis.chatAPI.addUsersToConversation({ + conversationId, + participantUserIds: [this.id] + }); + } + + removeFromConversation ( + conversationId: number + ): Promise { + return this.client.apis.chatAPI.removeUserFromConversation({ + conversationId, + participantUserId: this.id + }); + } + + startConversation (): Promise { + return this.client.apis.chatAPI.startOneToOneConversation({ + participantUserId: this.id + }); + } + + getTag (): Promise { + return this.client.apis.contactsAPI + .getUsersTags({ + targetUserIds: [this.id] + }) + .then(response => response[0]); + } + + setPendingTag (tag: string): Promise { + return this.client.apis.contactsAPI.setPendingUserTag({ + userTag: tag, + targetUserId: this.id + }); + } + + setTag (tag: string): Promise { + return this.client.apis.contactsAPI.setUserTag({ + targetUserId: this.id, + userTag: tag + }); + } + + removeFromTeamCreate ( + universeId: number + ): Promise { + return this.client.apis.developAPI.removeUserFromUniverseTeamCreate({ + userId: this.id, + universeId + }); + } + + getResellableAssetCopies ( + assetId: number + ): Promise { + return this.client.apis.economyAPI.getUserResellableAssetCopies({ + assetId, + userId: this.id + }); + } + + getFollowers ( + options?: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.friendsAPI + .getUserFollowers({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + options || {}, + response, + this.getFollowers + ) + ); + } + + getFollowersCount (): Promise { + return this.client.apis.friendsAPI + .getUserFollowersCount({ + userId: this.id + }) + .then(response => response.count); + } + + getFollowing ( + options?: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.friendsAPI + .getUserFollowing({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + options || {}, + response, + this.getFollowing + ) + ); + } + + getFollowingCount (): Promise { + return this.client.apis.friendsAPI + .getUserFollowingCount({ + userId: this.id + }) + .then(response => response.count); + } + + getFriends (): Promise { + return this.client.apis.friendsAPI + .getUserFriends({ + userId: this.id + }) + .then(response => + response.data.map( + friendRequest => new FriendRequest(friendRequest, this.client) + ) + ); + } + + getFriendsCount (): Promise { + return this.client.apis.friendsAPI + .getUserFriendsCount({ + userId: this.id + }) + .then(data => data.count); + } + + getFriendsWithStatuses ( + userIds: number[] + ): Promise { + return this.client.apis.friendsAPI.getUserFriendsWithStatuses({ + userId: this.id, + withUserIds: userIds + }); + } + + follow (): Promise { + return this.client.apis.friendsAPI.followUser({ + userId: this.id + }); + } + + friend (source?: string): Promise { + return this.client.apis.friendsAPI.sendFriendRequest({ + source: source || "Unknown", + userId: this.id + }); + } + + unFollow (): Promise { + return this.client.apis.friendsAPI.unFollowUser({ + userId: this.id + }); + } + + unfriend (): Promise { + return this.client.apis.friendsAPI.unfriendUser({ + userId: this.id + }); + } + + acceptFriendRequest (): Promise { + return this.client.apis.friendsAPI.acceptFriendRequest({ + userId: this.id + }); + } + + declineFriendRequest (): Promise { + return this.client.apis.friendsAPI.declineFriendRequest({ + userId: this.id + }); + } + + canInviteToVIPServer (): Promise { + return this.client.apis.gamesAPI + .canSelfInviteUserToVIPServer({ + userId: this.id + }) + .then(response => response.canInvite); + } + + awardBadge (badgeId: number, placeId: number): Promise { + return this.client.apis.generalApi + .awardBadge({ + badgeId, + placeId, + userId: this.id + }) + .then(response => response as unknown as string); + } + + isFollowedByUser (userId: number): Promise { + return this.client.apis.generalApi.isUserFollowing({ + userId, + followUserId: this.id + }); + } + + getGroups (): Promise { + return this.client.apis.groupsAPI.getUserGroups({ + userId: this.id + }); + } + + ownsAsset (assetId: number): Promise { + return this.client.apis.generalApi.userOwnsAsset({ + userId: this.id, + assetId + }); + } + + block (): Promise { + return this.client.apis.generalApi.blockUser({ + userId: this.id + }); + } + + unblock (): Promise { + return this.client.apis.generalApi.unblockUser({ + userId: this.id + }); + } + + canManageAsset (assetId: number): Promise { + return this.client.apis.generalApi.userCanManageAsset({ + assetId, + userId: this.id + }); + } + + acceptJoinRequestInGroup (groupId: number): Promise { + return this.client.apis.groupsAPI.acceptJoinRequest({ + groupId, + userId: this.id + }); + } + + declineJoinRequestInGroup (groupId: number): Promise { + return this.client.apis.groupsAPI.declineJoinRequest({ + groupId, + userId: this.id + }); + } + + getJoinRequestInGroup (groupId: number): Promise { + return this.client.apis.groupsAPI.getJoinRequest({ + groupId, + userId: this.id + }); + } + + setGroupOwner (groupId: number): Promise { + return this.client.apis.groupsAPI.changeGroupOwner({ + groupId, + userId: this.id + }); + } + + kickFromGroup (groupId: number): Promise { + return this.client.apis.groupsAPI.kickMember({ + groupId: groupId, + userId: this.id + }); + } + + updateMemberInGroup (groupId: number, roleId: number): Promise { + return this.client.apis.groupsAPI.updateMember({ + groupId, + roleId, + userId: this.id + }); + } + + payoutUserFromGroup (options: { + groupId: number; + type: PayoutMembersOptions["type"]; + amount: number; + }): Promise { + return this.client.apis.groupsAPI.payoutMembers({ + type: options.type, + groupId: options.groupId, + users: [ + { + userId: this.id, + amount: options.amount + } + ] + }); + } + + deleteGroupWallPosts (groupId: number): Promise { + return this.client.apis.groupsAPI.deleteUserWallPosts({ + groupId, + userId: this.id + }); + } + + getPrimaryGroup (): Promise { + return this.client.apis.groupsAPI.getUserPrimaryGroup({ + userId: this.id + }); + } + + getCollectibles ( + options?: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.inventoryAPI + .getUserCollectibles({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + options || {}, + response, + this.getCollectibles + ) + ); + } + + getItemsByTypeAndTargetId ( + itemType: GetUserItemsByTypeAndTargetIdOptions["itemType"], + id: number + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.inventoryAPI + .getUserItemsByTypeAndTargetId({ + itemType, + itemTargetId: id, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + {}, + response, + this.getItemsByTypeAndTargetId + ) + ); + } + + getInventory ( + options: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.inventoryAPI + .getUserInventory({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass(this.client, options, response, this.getInventory) + ); + } + + getInventoryByAssetTypeId ( + options: Omit + ): Promise> { + const CursorPageClass = require("./Asset").CursorPage; + + return this.client.apis.inventoryAPI + .getUserInventoryByAssetTypeId({ + ...options, + userId: this.id + }) + .then( + response => + new CursorPageClass( + this.client, + options, + response, + this.getInventoryByAssetTypeId + ) + ); + } + + getUser (): Promise { + return this.client.getUser(this.id); + } + + getPremiumMembership (): Promise { + return this.client.apis.premiumFeaturesAPI.validateUserMembership({ + userId: this.id + }); + } + + upsellPremiumCheck ( + options: Omit + ): Promise { + return this.client.apis.premiumFeaturesAPI.premiumUpsellCheck({ + ...options, + userId: this.id + }); + } + + getPresence (): Promise { + return this.client.apis.presenceAPI + .getUsersPresences({ + userIds: [this.id] + }) + .then(response => response.userPresences[0]); + } + + sendMessage ( + options: Omit + ): Promise { + return this.client.apis.privateMessagesAPI.sendMessage({ + ...options, + userId: this.id + }); + } + + getFullBodyAvatarImage ( + options: Omit + ): Promise { + return this.client.apis.thumbnailsAPI + .getUsersFullBodyAvatarImages({ + ...options, + userIds: [this.id] + }) + .then(response => response.data[0]); + } + + getAvatarBustImage ( + options: Omit + ): Promise { + return this.client.apis.thumbnailsAPI + .getUsersAvatarBustImages({ + ...options, + userIds: [this.id] + }) + .then(response => response.data[0]); + } + + getAvatarHeadShotImage ( + options: Omit + ): Promise { + return this.client.apis.thumbnailsAPI + .getUsersAvatarHeadShotImages({ + ...options, + userIds: [this.id] + }) + .then(response => response.data[0]); + } + + getCanTrade (): Promise { + return this.client.apis.tradesAPI + .canTradeWith({ + userId: this.id + }) + .then(response => response.canTrade); + } + + sendTrade ( + offers: Omit[] + ): Promise { + return this.client.apis.tradesAPI.sendTrade({ + offers: offers.map(offerData => ({ + userId: this.id, + robux: offerData.robux, + userAssetIds: offerData.userAssetIds + })) + }); + } + + updateTranslationGameAccess ( + options: Omit + ): Promise { + return this.client.apis.translationRolesAPI.updateUserAccess({ + ...options, + userId: this.id + }); + } } - export interface FriendRequestOptions { - description: string; - created: string; - isBanned: boolean; - id: number; - name: string; + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; } - export class FriendRequest { - public client: Client; - public user: PartialUser; - public isBanned: boolean; - public created: Date; - public description: string; - - constructor (data: FriendRequestOptions, client: Client) { - this.client = client; - this.user = new PartialUser({ - id: data.id, - name: data.name - }, client); - this.created = new Date(data.created); - this.description = data.description; - this.isBanned = data.isBanned; - } + public client: Client; + public user: PartialUser; + public isBanned: boolean; + public created: Date; + public description: string; + + constructor (data: FriendRequestOptions, client: Client) { + this.client = client; + this.user = new PartialUser( + { + id: data.id, + name: data.name + }, + client + ); + this.created = new Date(data.created); + this.description = data.description; + this.isBanned = data.isBanned; + } } - export interface PartialUserOptions { - id: number; - name?: string; - displayName?: string; + id: number; + name?: string; + displayName?: string; } - export class PartialUser extends UserBase { - // Eslint, I'm getting tired of you complaining about useless constructors. - // You are useless - // eslint-disable-next-line no-useless-constructor - constructor (data: PartialUserOptions, client: Client) { - super(data, client); - } + // Eslint, I'm getting tired of you complaining about useless constructors. + // You are useless + // eslint-disable-next-line no-useless-constructor + constructor (data: PartialUserOptions, client: Client) { + super(data, client); + } } - export interface UserOptions { - id: number; - name: string; - displayName: string; - friendsCount: number; - presenceType: EnumUserPresence; - lastLocation: string | null; - userStatus: string | null; - userStatusDate: string | null; - userPlaceId: number | null; - followersCount: number; - followingsCount: number; - isVieweeBlocked: boolean; - isViewerBlocked: boolean; - areFriends: boolean; - canFollow: boolean; - canMessage: boolean; - canFriend: boolean; - canTrade: boolean; - incomingFriendRequest: boolean; - sentFriendRequest: boolean; - canSeeFavorites: boolean; - messagesDisabled: boolean; - canSeeInventory: boolean; - headShotImage: { - final: boolean; - url: string; - retryUrl: string | null; - userId: number; - endpointType: "Avatar" | string; - }; - previousUsernames: string; + id: number; + name: string; + displayName: string; + friendsCount: number; + presenceType: EnumUserPresence; + lastLocation: string | null; + userStatus: string | null; + userStatusDate: string | null; + userPlaceId: number | null; + followersCount: number; + followingsCount: number; + isVieweeBlocked: boolean; + isViewerBlocked: boolean; + areFriends: boolean; + canFollow: boolean; + canMessage: boolean; + canFriend: boolean; + canTrade: boolean; + incomingFriendRequest: boolean; + sentFriendRequest: boolean; + canSeeFavorites: boolean; + messagesDisabled: boolean; + canSeeInventory: boolean; + headShotImage: { + final: boolean; + url: string; + retryUrl: string | null; + userId: number; + endpointType: "Avatar" | string; + }; + previousUsernames: string; } - export class User extends PartialUser { - public friendsCount: number; - public presenceType: EnumUserPresence; - public lastLocation: string | null; - public status: string | null; - public statusDate: Date | null; - public placeId: number | null; - public followersCount: number; - public followingCount: number; - /** - * If the authenticated user has blocked the user - */ - public isBlocked: boolean; - /** - * If the user has blocked the authenticated user - */ - public hasBlocked: boolean; - /** - * If the authenticated user and the target user are friends - */ - public areFriends: boolean; - public canFollow: boolean; - public canMessage: boolean; - public canFriend: boolean; - /** - * If the authenticated user has sent a friend request to this user - */ - public sentFriendRequest: boolean; - /** - * If the target user has sent a friend request to the authenticated user - */ - public incomingFriendRequest: boolean; - public messagesDisabled: boolean; - public canSeeFavorites: boolean; - public canTrade: boolean; - public canSeeInventory: boolean; - public previousNames: string[]; - public headshotImage: { - final: boolean; - url: string | null; - retryUrl: string | null; - userId: number; - endpointType: "Avatar" | string; + public friendsCount: number; + public presenceType: EnumUserPresence; + public lastLocation: string | null; + public status: string | null; + public statusDate: Date | null; + public placeId: number | null; + public followersCount: number; + public followingCount: number; + /** + * If the authenticated user has blocked the user + */ + public isBlocked: boolean; + /** + * If the user has blocked the authenticated user + */ + public hasBlocked: boolean; + /** + * If the authenticated user and the target user are friends + */ + public areFriends: boolean; + public canFollow: boolean; + public canMessage: boolean; + public canFriend: boolean; + /** + * If the authenticated user has sent a friend request to this user + */ + public sentFriendRequest: boolean; + /** + * If the target user has sent a friend request to the authenticated user + */ + public incomingFriendRequest: boolean; + public messagesDisabled: boolean; + public canSeeFavorites: boolean; + public canTrade: boolean; + public canSeeInventory: boolean; + public previousNames: string[]; + public headshotImage: { + final: boolean; + url: string | null; + retryUrl: string | null; + userId: number; + endpointType: "Avatar" | string; + }; + + constructor (data: UserOptions, client: Client) { + super(data, client); + this.friendsCount = data.friendsCount; + this.presenceType = data.presenceType; + this.lastLocation = data.lastLocation || null; + this.status = data.userStatus || null; + const matchedStatusTimestamp = data.userStatusDate ? + data.userStatusDate.match(/\((.*)\)/) : + null; + this.statusDate = matchedStatusTimestamp ? + new Date(parseInt(matchedStatusTimestamp[1])) : + null; + this.placeId = data.userPlaceId; + this.followersCount = data.followersCount; + this.followingCount = data.followingsCount; + this.isBlocked = data.isVieweeBlocked; + this.hasBlocked = data.isViewerBlocked; + this.areFriends = data.areFriends; + this.canFollow = data.canFollow; + this.canMessage = data.canMessage; + this.canFriend = data.canFriend; + this.sentFriendRequest = data.sentFriendRequest; + this.incomingFriendRequest = data.incomingFriendRequest; + this.messagesDisabled = data.messagesDisabled; + this.canSeeFavorites = data.canSeeFavorites; + this.canTrade = data.canTrade; + this.canSeeInventory = data.canSeeInventory; + this.previousNames = data.previousUsernames.split("\r\n"); + this.headshotImage = { + final: data.headShotImage.final, + url: data.headShotImage.url, + retryUrl: data.headShotImage.retryUrl, + userId: data.headShotImage.userId, + endpointType: data.headShotImage.endpointType }; - - constructor (data: UserOptions, client: Client) { - super(data, client); - this.friendsCount = data.friendsCount; - this.presenceType = data.presenceType; - this.lastLocation = data.lastLocation || null; - this.status = data.userStatus || null; - const matchedStatusTimestamp = data.userStatusDate ? data.userStatusDate.match(/\((.*)\)/) : null; - this.statusDate = matchedStatusTimestamp ? new Date(parseInt(matchedStatusTimestamp[1])) : null; - this.placeId = data.userPlaceId; - this.followersCount = data.followersCount; - this.followingCount = data.followingsCount; - this.isBlocked = data.isVieweeBlocked; - this.hasBlocked = data.isViewerBlocked; - this.areFriends = data.areFriends; - this.canFollow = data.canFollow; - this.canMessage = data.canMessage; - this.canFriend = data.canFriend; - this.sentFriendRequest = data.sentFriendRequest; - this.incomingFriendRequest = data.incomingFriendRequest; - this.messagesDisabled = data.messagesDisabled; - this.canSeeFavorites = data.canSeeFavorites; - this.canTrade = data.canTrade; - this.canSeeInventory = data.canSeeInventory; - this.previousNames = data.previousUsernames.split("\r\n"); - this.headshotImage = { - final: data.headShotImage.final, - url: data.headShotImage.url, - retryUrl: data.headShotImage.retryUrl, - userId: data.headShotImage.userId, - endpointType: data.headShotImage.endpointType - }; - } + } } diff --git a/src/util/constants.ts b/src/util/constants.ts index 5c31e1e5c..8f1c8dc04 100644 --- a/src/util/constants.ts +++ b/src/util/constants.ts @@ -1,68 +1,76 @@ // All naming conventions Roblox uses for identifier types (userId, groupId, etc.) export const identifierNames = { - userId: [ - "ProfileUserId", "UserId", "userId", "userid", "PlayerId", "playerId", "playerid", - "targetUserId", "ID", "id", "Id", "targetID"], - groupId: [ - "GroupId", "groupId", "Groupid", "Id", "ID", "id" - ], - name: [ - "Name", "name" - ], - username: [ - "ProfileUserName", "Username", "username", "userName", "UserName", "Name", "name" - ], - friendsCount: [ - "numFriends", "NumFriends", "numfriends", "FriendsCount" - ] + userId: [ + "ProfileUserId", + "UserId", + "userId", + "userid", + "PlayerId", + "playerId", + "playerid", + "targetUserId", + "ID", + "id", + "Id", + "targetID" + ], + groupId: ["GroupId", "groupId", "Groupid", "Id", "ID", "id"], + name: ["Name", "name"], + username: [ + "ProfileUserName", + "Username", + "username", + "userName", + "UserName", + "Name", + "name" + ], + friendsCount: ["numFriends", "NumFriends", "numfriends", "FriendsCount"] }; export const StatusCodeReasons = { - 400: [ - "Bad Request (invalid values provided)", - "Invalid body type (content-type) sent", - "Bloxy sent an invalid request (from faulty code, feel free to check it out and submit an issue / PR)", - "(Roblox's fault for not saying) All data provided was valid but you don't have access to view the response or the requested data" - ], - 401: [ - "You're not logged in (use .login on the client to log in)", - "The cookie was not provided in the request, or invalid cookie provided" - ], - 403: [ - "A captcha is required", - "You don't have the proper permissions", - "You're not authorized" - ], - 404: [ - "Invalid request method (i.e. POST instead of GET)", - "Resource removed / updated to another route", - "You're not logged in (use .login on the client to log in)" - ], - 429: [ - "You're sending too many requests. Roblox has rate limits in place to prevent abuse", - "Your IP has sent too many requests" - ], - 500: [ - "Roblox is down", - "There is an error in Roblox's API handler (causing a server error)", - "Invalid body provided which results in the API failing" - ] + 400: [ + "Bad Request (invalid values provided)", + "Invalid body type (content-type) sent", + "Bloxy sent an invalid request (from faulty code, feel free to check it out and submit an issue / PR)", + "(Roblox's fault for not saying) All data provided was valid but you don't have access to view the response or the requested data" + ], + 401: [ + "You're not logged in (use .login on the client to log in)", + "The cookie was not provided in the request, or invalid cookie provided" + ], + 403: [ + "A captcha is required", + "You don't have the proper permissions", + "You're not authorized" + ], + 404: [ + "Invalid request method (i.e. POST instead of GET)", + "Resource removed / updated to another route", + "You're not logged in (use .login on the client to log in)" + ], + 429: [ + "You're sending too many requests. Roblox has rate limits in place to prevent abuse", + "Your IP has sent too many requests" + ], + 500: [ + "Roblox is down", + "There is an error in Roblox's API handler (causing a server error)", + "Invalid body provided which results in the API failing" + ] }; - export enum CreatorType { - USER = 1, - GROUP = 2 + USER = 1, + GROUP = 2 } - export enum MorphAvatarType { - R6 = "MorphToR6", - R15 = "MorphToR15" + R6 = "MorphToR6", + R15 = "MorphToR15" } - export enum GameGenre { - FPS = "FPS" + FPS = "FPS" } diff --git a/src/util/converter.ts b/src/util/converter.ts index 27ff53d4c..3963d6a1f 100644 --- a/src/util/converter.ts +++ b/src/util/converter.ts @@ -1,15 +1,19 @@ // Misc. "type" converter export function generalIdentifierToNumber (identifier: string | number): number { - if (typeof identifier === "string") { - return Number(identifier); - } else { - return identifier; - } + if (typeof identifier === "string") { + return Number(identifier); + } else { + return identifier; + } } -export function convertObjectToValue (dataObject: Record, namingConventions: string[]): unknown { - // eslint-disable-next-line security/detect-object-injection - return namingConventions.map(name => dataObject[name] || null) - .find(value => !!value) as unknown; +export function convertObjectToValue ( + dataObject: Record, + namingConventions: string[] +): unknown { + // eslint-disable-next-line security/detect-object-injection + return namingConventions + .map(name => dataObject[name] || null) + .find(value => !!value) as unknown; } diff --git a/src/util/errors/errors.ts b/src/util/errors/errors.ts index ac6a62799..dbb621554 100644 --- a/src/util/errors/errors.ts +++ b/src/util/errors/errors.ts @@ -1,27 +1,37 @@ import { StatusCodeReasons } from "../constants"; - interface BloxyHttpErrorOptions { - message: string; - name?: string; - statusMessage: string; - statusCode: number; - possibleReasons: string[]; + message: string; + name?: string; + statusMessage: string; + statusCode: number; + possibleReasons: string[]; } - export class BloxyHttpError extends Error { - public statusCode: number; - public statusMessage: string; + public statusCode: number; + public statusMessage: string; - constructor (options: BloxyHttpErrorOptions) { - const statusRelatedIssues = StatusCodeReasons[options.statusCode as keyof typeof StatusCodeReasons] || []; - options.possibleReasons = [...options.possibleReasons, ...statusRelatedIssues]; - const revisedMessage = `\n\n${options.message} | Status code: ${options.statusCode}, status message: ${options.statusMessage}. ${options.possibleReasons.length > 0 ? `Possible reasons:\n${options.possibleReasons.map(r => `- ${r}`) - .join("\n")}\n\n` : ""}`; - super(revisedMessage); - this.name = options.name || "BloxyHttpError"; - this.statusCode = options.statusCode; - this.statusMessage = options.statusMessage; - } + constructor (options: BloxyHttpErrorOptions) { + const statusRelatedIssues = + StatusCodeReasons[options.statusCode as keyof typeof StatusCodeReasons] || + []; + options.possibleReasons = [ + ...options.possibleReasons, + ...statusRelatedIssues + ]; + const revisedMessage = `\n\n${options.message} | Status code: ${ + options.statusCode + }, status message: ${options.statusMessage}. ${ + options.possibleReasons.length > 0 ? + `Possible reasons:\n${options.possibleReasons + .map(r => `- ${r}`) + .join("\n")}\n\n` : + "" + }`; + super(revisedMessage); + this.name = options.name || "BloxyHttpError"; + this.statusCode = options.statusCode; + this.statusMessage = options.statusMessage; + } } diff --git a/src/util/errors/index.ts b/src/util/errors/index.ts index b0b612346..ea2b39da0 100644 --- a/src/util/errors/index.ts +++ b/src/util/errors/index.ts @@ -1,8 +1,7 @@ import { default as messages } from "./messages"; import * as errors from "./errors"; - export default { - messages, - errors + messages, + errors }; diff --git a/src/util/errors/messages.ts b/src/util/errors/messages.ts index 4fa80d32d..19b4cbc89 100644 --- a/src/util/errors/messages.ts +++ b/src/util/errors/messages.ts @@ -1,3 +1,3 @@ export default { - hello: "world" + hello: "world" }; diff --git a/src/util/utilFunctions.ts b/src/util/utilFunctions.ts index 5ecb997e1..23072c785 100644 --- a/src/util/utilFunctions.ts +++ b/src/util/utilFunctions.ts @@ -1,27 +1,32 @@ /* eslint-disable security/detect-object-injection */ -export const utilMergeDeep = (baseObject: Record, newObject: Record) => { - const target = {}; - // Merge the object into the target object - const internalMerger = (obj: Record) => { - for (const prop in obj) { - // eslint-disable-next-line no-prototype-builtins - if (obj.hasOwnProperty(prop)) { - if (Object.prototype.toString.call(obj[prop]) === "[object Object]") { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - target[prop] = utilMergeDeep(target[prop] as Record, obj[prop]); - } else { - // Otherwise, do a regular merge - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - target[prop] = obj[prop]; - } - } +export function utilMergeDeep< + B extends Record, + N extends Record +>(baseObject: B, newObject: N): B & N { + const target = {} as B & N; + // Merge the object into the target object + const internalMerger = (obj: Record) => { + for (const prop in obj) { + // eslint-disable-next-line no-prototype-builtins + if (obj.hasOwnProperty(prop)) { + if (Object.prototype.toString.call(obj[prop]) === "[object Object]") { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + target[prop] = utilMergeDeep( + target[prop] as Record, + obj[prop] + ); + } else { + // Otherwise, do a regular merge + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + target[prop] = obj[prop]; } - }; + } + } + }; + internalMerger(baseObject); + internalMerger(newObject); - internalMerger(baseObject); - internalMerger(newObject); - - return target; -}; + return target; +} From b9bfa13bdd87d935146067c858154c3ae12aeb15 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 01:34:40 +0100 Subject: [PATCH 10/24] Update `eslintrc.json`, ignore `security/detect-object-injection` in `convertObjectToValue` --- .eslintrc.json | 2 +- src/util/converter.ts | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 839b8ef81..aaeb00bae 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -176,7 +176,7 @@ "template-tag-spacing": "error", "unicode-bom": "error", "arrow-body-style": "error", - "arrow-parens": ["error", "as-needed"], + "arrow-parens": ["error", "always"], "arrow-spacing": "error", "no-duplicate-imports": "error", "no-useless-computed-key": "error", diff --git a/src/util/converter.ts b/src/util/converter.ts index 3963d6a1f..10ad110b2 100644 --- a/src/util/converter.ts +++ b/src/util/converter.ts @@ -1,6 +1,6 @@ // Misc. "type" converter -export function generalIdentifierToNumber (identifier: string | number): number { +export function generalIdentifierToNumber(identifier: string | number): number { if (typeof identifier === "string") { return Number(identifier); } else { @@ -8,12 +8,13 @@ export function generalIdentifierToNumber (identifier: string | number): number } } -export function convertObjectToValue ( +/* eslint-disable security/detect-object-injection */ +export function convertObjectToValue( dataObject: Record, namingConventions: string[] ): unknown { // eslint-disable-next-line security/detect-object-injection return namingConventions - .map(name => dataObject[name] || null) - .find(value => !!value) as unknown; + .map((name) => dataObject[name] || null) + .find((value) => !!value) as unknown; } From 08df677042b9c79f9c2df1116736545aa54fe7b4 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 01:37:46 +0100 Subject: [PATCH 11/24] Update all files to respect the new `.eslintrc.json` --- src/client/Client.ts | 18 +-- src/client/apis/AccountInformationAPI.ts | 22 +-- src/client/apis/AccountSettingsAPI.ts | 40 +++--- src/client/apis/AdConfigurationAPI.ts | 10 +- src/client/apis/AdsAPI.ts | 6 +- src/client/apis/AssetDeliveryAPI.ts | 20 +-- src/client/apis/AuthAPI.ts | 54 ++++---- src/client/apis/AvatarAPI.ts | 38 +++--- src/client/apis/BadgesAPI.ts | 14 +- src/client/apis/BaseAPI.ts | 2 +- src/client/apis/BillingAPI.ts | 40 +++--- src/client/apis/CatalogAPI.ts | 40 +++--- src/client/apis/ChatAPI.ts | 44 +++--- src/client/apis/ContactsAPI.ts | 8 +- src/client/apis/DataAPI.ts | 2 +- src/client/apis/DevelopAPI.ts | 82 ++++++------ src/client/apis/EconomyAPI.ts | 30 ++--- src/client/apis/EconomyCreatorStatsAPI.ts | 2 +- src/client/apis/EngagementPayoutsAPI.ts | 2 +- src/client/apis/FollowingsAPI.ts | 8 +- src/client/apis/FriendsAPI.ts | 56 ++++---- .../apis/GameInternationalizationAPI.ts | 22 +-- src/client/apis/GamesAPI.ts | 44 +++--- src/client/apis/GeneralAPI.ts | 36 ++--- src/client/apis/GroupsAPI.ts | 126 +++++++++--------- src/client/apis/InventoryAPI.ts | 12 +- src/client/apis/ItemConfigurationAPI.ts | 16 +-- src/client/apis/LocaleAPI.ts | 12 +- src/client/apis/MetricsAPI.ts | 6 +- src/client/apis/NotificationsAPI.ts | 66 ++++----- src/client/apis/OtherAPI.ts | 2 +- src/client/apis/PremiumFeaturesAPI.ts | 4 +- src/client/apis/PresenceAPI.ts | 4 +- src/client/apis/PrivateMessagesAPI.ts | 20 +-- src/client/apis/PublishAPI.ts | 14 +- src/client/apis/ThumbnailsAPI.ts | 28 ++-- src/client/apis/TradesAPI.ts | 18 +-- src/client/apis/TranslationRolesAPI.ts | 8 +- src/client/apis/TwoStepVerificationAPI.ts | 20 +-- src/client/apis/UsersAPI.ts | 20 +-- src/client/lib/ChatManager/ChatManager.ts | 28 ++-- .../handlers/friendShipnotifications.ts | 2 +- .../handlers/presenceBulkNotifications.ts | 2 +- .../structures/OrderedDataStorePage.ts | 2 +- src/controllers/rest/RESTController.ts | 4 +- src/controllers/rest/lib/updateXCSRFToken.ts | 2 +- src/controllers/rest/request/RESTRequest.ts | 2 +- src/controllers/rest/response/RESTResponse.ts | 8 +- .../rest/response/handlers/updateHeaders.ts | 2 +- .../rest/response/handlers/validStatusCode.ts | 4 +- .../response/handlers/validStatusMessage.ts | 4 +- src/structures/Asset.ts | 6 +- src/structures/Chat.ts | 2 +- src/structures/Game.ts | 2 +- src/structures/Group.ts | 38 +++--- src/structures/User.ts | 52 ++++---- src/util/errors/errors.ts | 2 +- 57 files changed, 589 insertions(+), 589 deletions(-) diff --git a/src/client/Client.ts b/src/client/Client.ts index 844b77b3a..044ab4ec5 100644 --- a/src/client/Client.ts +++ b/src/client/Client.ts @@ -92,7 +92,7 @@ export default class Client extends ClientBase { .getGroup({ groupId }) - .then(data => { + .then((data) => { if (!data) { throw new Error(`Group not found: ${groupId}`); } else { @@ -111,7 +111,7 @@ export default class Client extends ClientBase { userId }) .then( - data => + (data) => new User( { id: data.ProfileUserId, @@ -157,7 +157,7 @@ export default class Client extends ClientBase { usernames: [username], excludeBannedUsers: false }) - .then(response => { + .then((response) => { if (response.data && response.data[0]) { return new PartialUser(response.data[0], this); } else { @@ -175,7 +175,7 @@ export default class Client extends ClientBase { .getUserById({ userId }) - .then(data => new PartialUser(data, this)); + .then((data) => new PartialUser(data, this)); } getUsersByUserIds ( @@ -183,7 +183,7 @@ export default class Client extends ClientBase { excludeBannedUsers = false ): Promise { if (typeof userIds[0] === "string") { - userIds = (userIds as string[]).map(userId => parseInt(userId)); + userIds = (userIds as string[]).map((userId) => parseInt(userId)); } return this.apis.usersAPI @@ -191,8 +191,8 @@ export default class Client extends ClientBase { excludeBannedUsers, userIds: userIds as number[] }) - .then(response => - response.data.map(userData => new PartialUser(userData, this)) + .then((response) => + response.data.map((userData) => new PartialUser(userData, this)) ); } @@ -205,8 +205,8 @@ export default class Client extends ClientBase { excludeBannedUsers, usernames }) - .then(response => - response.data.map(userData => new PartialUser(userData, this)) + .then((response) => + response.data.map((userData) => new PartialUser(userData, this)) ); } } diff --git a/src/client/apis/AccountInformationAPI.ts b/src/client/apis/AccountInformationAPI.ts index 71e9b5b70..0c8fcd40d 100644 --- a/src/client/apis/AccountInformationAPI.ts +++ b/src/client/apis/AccountInformationAPI.ts @@ -86,7 +86,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/birthdate" }, json: true - }).then(response => response.body as GetUserBirthdate); + }).then((response) => response.body as GetUserBirthdate); } updateUserBirthdate ( @@ -110,7 +110,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/description" }, json: true - }).then(response => response.body as GetUserDescription); + }).then((response) => response.body as GetUserDescription); } updateUserDescription ( @@ -134,7 +134,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/gender" }, json: true - }).then(response => response.body as GetUserGender); + }).then((response) => response.body as GetUserGender); } updateUserGender ( @@ -158,7 +158,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/xbox-live/consecutive-login-days" }, json: true - }).then(response => response.body as GetConsecutiveXboxLoginDays); + }).then((response) => response.body as GetConsecutiveXboxLoginDays); } getMetaData () { @@ -168,7 +168,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/metadata" }, json: true - }).then(response => response.body as GetMetaData); + }).then((response) => response.body as GetMetaData); } getVerifiedPhoneNumber (): Promise { @@ -178,7 +178,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/phone" }, json: true - }).then(response => response.body as GetVerifiedPhoneNumber); + }).then((response) => response.body as GetVerifiedPhoneNumber); } setPhoneNumber (options: SetPhoneNumberOptions): Promise { @@ -236,7 +236,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/promotion-channels" }, json: true - }).then(response => response.body as GetSelfPromotionChannels); + }).then((response) => response.body as GetSelfPromotionChannels); } getUserPromotionChannels ( @@ -248,7 +248,7 @@ export default class AccountInformationAPI extends BaseAPI { path: `v1/users/${options.userId}/promotion-channels` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUserPromotionChannels ( @@ -262,7 +262,7 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body as UpdateUserPromotionChannels); + }).then((response) => response.body as UpdateUserPromotionChannels); } removeStarCodeAffiliate (): Promise { @@ -283,7 +283,7 @@ export default class AccountInformationAPI extends BaseAPI { path: "v1/star-code-affiliates" }, json: true - }).then(response => response.body as GetStarCodeAffiliate); + }).then((response) => response.body as GetStarCodeAffiliate); } addStarCodeAffiliate ( @@ -297,6 +297,6 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body as AddStarCodeAffiliate); + }).then((response) => response.body as AddStarCodeAffiliate); } } diff --git a/src/client/apis/AccountSettingsAPI.ts b/src/client/apis/AccountSettingsAPI.ts index fa7c952c8..fb841ee37 100644 --- a/src/client/apis/AccountSettingsAPI.ts +++ b/src/client/apis/AccountSettingsAPI.ts @@ -133,7 +133,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/account/settings/settings-groups" }, json: true - }).then(response => + }).then((response) => response.body.map((val: any) => ({ title: val.Title, url: val.Url, @@ -149,7 +149,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/app-chat-privacy" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateAppChatPrivacy ( @@ -163,7 +163,7 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameChatPrivacy (): Promise { @@ -173,7 +173,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/game-chat-privacy" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGameChatPrivacy ( @@ -187,7 +187,7 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getInventoryPrivacy (): Promise { @@ -197,7 +197,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/inventory-privacy" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateInventoryPrivacy ( @@ -211,7 +211,7 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserPrivacy (): Promise { @@ -221,7 +221,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/privacy" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUserPrivacy ( @@ -235,7 +235,7 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserPrivacySettingsInfo (): Promise { @@ -245,7 +245,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/privacy/info" }, json: true - }).then(response => response.body as GetUserPrivacySettingsInfo); + }).then((response) => response.body as GetUserPrivacySettingsInfo); } getUserPrivateMessagePrivacy (): Promise { @@ -255,7 +255,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/private-message-privacy" }, json: true - }).then(response => response.body as GetUserPrivateMessagePrivacy); + }).then((response) => response.body as GetUserPrivateMessagePrivacy); } updateUserPrivateMessagePrivacy ( @@ -279,7 +279,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/email" }, json: true - }).then(response => response.body as GetUserEmailStatus); + }).then((response) => response.body as GetUserEmailStatus); } updateUserEmail (options: UpdateUserEmailOptions): Promise { @@ -312,7 +312,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: `v1/themes/User/${this.client.user!.id}` }, json: true - }).then(response => response.body as GetWebsiteTheme); + }).then((response) => response.body as GetWebsiteTheme); } updateWebsiteTheme ( @@ -338,7 +338,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/themes/types" }, json: true - }).then(response => response.body as GetWebsiteThemes); + }).then((response) => response.body as GetWebsiteThemes); } getUserTradePrivacy (): Promise { @@ -348,7 +348,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/trade-privacy" }, json: true - }).then(response => response.body as GetUserTradePrivacy); + }).then((response) => response.body as GetUserTradePrivacy); } updateUserTradePrivacy ( @@ -362,7 +362,7 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body as UpdateUserTradePrivacy); + }).then((response) => response.body as UpdateUserTradePrivacy); } getUserTradeQualityFilter (): Promise { @@ -372,7 +372,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/trade-value" }, json: true - }).then(response => response.body as GetUserTradeQualityFilter); + }).then((response) => response.body as GetUserTradeQualityFilter); } updateUserTradeQualityFilter ( @@ -400,7 +400,7 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body as UpdateTwoStepStatus); + }).then((response) => response.body as UpdateTwoStepStatus); } getContactUpsell (): Promise { @@ -410,7 +410,7 @@ export default class AccountSettingsAPI extends BaseAPI { path: "v1/user/screens/contact-upsell" }, json: true - }).then(response => response.body as GetContactUpsell); + }).then((response) => response.body as GetContactUpsell); } updateContactUpsellSuppression ( @@ -441,7 +441,7 @@ export default class AccountSettingsAPI extends BaseAPI { } }, json: true - }).then(response => response.body as GetIsXboxUsernameValid); + }).then((response) => response.body as GetIsXboxUsernameValid); } updateUserPromotionChannels ( diff --git a/src/client/apis/AdConfigurationAPI.ts b/src/client/apis/AdConfigurationAPI.ts index 2b4ad9906..69fa3299f 100644 --- a/src/client/apis/AdConfigurationAPI.ts +++ b/src/client/apis/AdConfigurationAPI.ts @@ -62,7 +62,7 @@ export default class AdConfigurationAPI extends BaseAPI { path: "/v1/sponsored-games/create-ad/metadata" }, json: true - }).then(response => response.body as GetCreateAdMetaData); + }).then((response) => response.body as GetCreateAdMetaData); } getSponsoredGames ( @@ -79,7 +79,7 @@ export default class AdConfigurationAPI extends BaseAPI { } }, json: true - }).then(response => response.body as GetSponsoredGames); + }).then((response) => response.body as GetSponsoredGames); } createAd (options: CreateAdOptions): Promise { @@ -91,7 +91,7 @@ export default class AdConfigurationAPI extends BaseAPI { json: options as any }, json: true - }).then(response => response.body as CreateAd); + }).then((response) => response.body as CreateAd); } runAd (options: RunAdOptions): Promise { @@ -103,7 +103,7 @@ export default class AdConfigurationAPI extends BaseAPI { json: options as any }, json: true - }).then(response => response.body as RunAd); + }).then((response) => response.body as RunAd); } stopAd (options: StopAdOptions): Promise { @@ -115,6 +115,6 @@ export default class AdConfigurationAPI extends BaseAPI { json: options as any }, json: true - }).then(response => response.body as StopAd); + }).then((response) => response.body as StopAd); } } diff --git a/src/client/apis/AdsAPI.ts b/src/client/apis/AdsAPI.ts index 065ed8d82..a07507c84 100644 --- a/src/client/apis/AdsAPI.ts +++ b/src/client/apis/AdsAPI.ts @@ -43,7 +43,7 @@ export default class AdsAPI extends BaseAPI { assetId: options.assetId } } - }).then(response => response.body as CreateAssetAd); + }).then((response) => response.body as CreateAssetAd); } createGamePassAd ( @@ -62,7 +62,7 @@ export default class AdsAPI extends BaseAPI { gamePassId: options.gamePassId } } - }).then(response => response.body as CreateGamePassAd); + }).then((response) => response.body as CreateGamePassAd); } createGroupAd (options: CreateGroupAdOptions): Promise { @@ -79,6 +79,6 @@ export default class AdsAPI extends BaseAPI { groupId: options.groupId } } - }).then(response => response.body as CreateGroupAd); + }).then((response) => response.body as CreateGroupAd); } } diff --git a/src/client/apis/AssetDeliveryAPI.ts b/src/client/apis/AssetDeliveryAPI.ts index 76256a1ef..d3b46630b 100644 --- a/src/client/apis/AssetDeliveryAPI.ts +++ b/src/client/apis/AssetDeliveryAPI.ts @@ -33,7 +33,7 @@ export type BaseAssetRaw = { const convertToBaseAsset = (options: BaseAssetRaw): BaseAsset => ({ errors: typeof options.Errors !== "undefined" ? - options.Errors.map(v => ({ + options.Errors.map((v) => ({ message: v.Message, code: v.Code })) : @@ -147,7 +147,7 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then(response => convertToBaseAsset(response.body) as GetAssetByAlias); + }).then((response) => convertToBaseAsset(response.body) as GetAssetByAlias); } getAssetById (options: GetAssetByIdOptions): Promise { @@ -165,7 +165,7 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then(response => ({ + }).then((response) => ({ location: response.body.Location || undefined, request: response.body.Request })); @@ -185,7 +185,7 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then(response => convertToBaseAsset(response.body) as GetAssetByHash); + }).then((response) => convertToBaseAsset(response.body) as GetAssetByHash); } getAssetByAssetId ( @@ -205,7 +205,7 @@ export default class AssetDeliveryAPI extends BaseAPI { } } }).then( - response => convertToBaseAsset(response.body) as GetAssetByAssetId + (response) => convertToBaseAsset(response.body) as GetAssetByAssetId ); } @@ -226,7 +226,7 @@ export default class AssetDeliveryAPI extends BaseAPI { } } }).then( - response => + (response) => convertToBaseAsset(response.body) as GetAssetVersionByAssetId ); } @@ -248,7 +248,7 @@ export default class AssetDeliveryAPI extends BaseAPI { } } }).then( - response => + (response) => convertToBaseAsset(response.body) as GetAssetByAssetVersionId ); } @@ -270,7 +270,7 @@ export default class AssetDeliveryAPI extends BaseAPI { } } }).then( - response => convertToBaseAsset(response.body) as GetAssetByMarAssetHash + (response) => convertToBaseAsset(response.body) as GetAssetByMarAssetHash ); } @@ -291,7 +291,7 @@ export default class AssetDeliveryAPI extends BaseAPI { } } }).then( - response => convertToBaseAsset(response.body) as GetAssetByUserAssetId + (response) => convertToBaseAsset(response.body) as GetAssetByUserAssetId ); } @@ -305,7 +305,7 @@ export default class AssetDeliveryAPI extends BaseAPI { json: options } }).then( - response => + (response) => response.body.map((value: BaseAssetRaw) => convertToBaseAsset(value) ) as GetBatchAssets diff --git a/src/client/apis/AuthAPI.ts b/src/client/apis/AuthAPI.ts index 3448e91fe..82c71542a 100644 --- a/src/client/apis/AuthAPI.ts +++ b/src/client/apis/AuthAPI.ts @@ -223,7 +223,7 @@ export default class AuthAPI extends BaseAPI { origin: "roblox.com" } } - }).then(response => ({ + }).then((response) => ({ authTicket: response.headers["rbx-authentication-ticket"] })); } @@ -235,7 +235,7 @@ export default class AuthAPI extends BaseAPI { request: { path: "v2/auth/metadata" } - }).then(response => response.body as GetAuthMetaData); + }).then((response) => response.body as GetAuthMetaData); } login (options: LoginOptions): Promise { @@ -247,7 +247,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as Login); + }).then((response) => response.body as Login); } logout (): Promise { @@ -258,7 +258,7 @@ export default class AuthAPI extends BaseAPI { path: "v2/logout", method: "POST" } - }).then(response => response.body as Logout); + }).then((response) => response.body as Logout); } getCredentialsVerificationStatus ( @@ -275,7 +275,7 @@ export default class AuthAPI extends BaseAPI { "request.password": options.password } } - }).then(response => response.body as GetCredentialsVerificationStatus); + }).then((response) => response.body as GetCredentialsVerificationStatus); } sendCredentialsVerificationMessage ( @@ -289,7 +289,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as SendCredentialsVerificationMessage); + }).then((response) => response.body as SendCredentialsVerificationMessage); } getMetaData (): Promise { @@ -299,7 +299,7 @@ export default class AuthAPI extends BaseAPI { request: { path: "v2/metadata" } - }).then(response => response.body as GetMetaData); + }).then((response) => response.body as GetMetaData); } getCurrentUserPasswordStatus (): Promise { @@ -309,7 +309,7 @@ export default class AuthAPI extends BaseAPI { request: { path: "v2/passwords/current-status" } - }).then(response => response.body as GetCurrentPasswordStatus); + }).then((response) => response.body as GetCurrentPasswordStatus); } getPasswordResetMetaData ( @@ -325,7 +325,7 @@ export default class AuthAPI extends BaseAPI { "request.ticket": options.ticket } } - }).then(response => response.body as GetPasswordResetMetaData); + }).then((response) => response.body as GetPasswordResetMetaData); } resetPassword (options: ResetPasswordOptions): Promise { @@ -337,7 +337,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as ResetPassword); + }).then((response) => response.body as ResetPassword); } validatePassword ( @@ -353,7 +353,7 @@ export default class AuthAPI extends BaseAPI { "request.password": options.password } } - }).then(response => response.body as ValidatePassword); + }).then((response) => response.body as ValidatePassword); } sendPasswordReset ( @@ -367,7 +367,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as SendPasswordReset); + }).then((response) => response.body as SendPasswordReset); } verifyPasswordReset ( @@ -381,7 +381,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as VerifyPasswordReset); + }).then((response) => response.body as VerifyPasswordReset); } changeUserPassword ( @@ -395,7 +395,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as ChangeUserPassword); + }).then((response) => response.body as ChangeUserPassword); } getRecoveryMetaData (): Promise { @@ -405,7 +405,7 @@ export default class AuthAPI extends BaseAPI { request: { path: "v2/recovery/metadata" } - }).then(response => response.body as GetRecoveryMetaData); + }).then((response) => response.body as GetRecoveryMetaData); } getRevertAccountInfo ( @@ -420,7 +420,7 @@ export default class AuthAPI extends BaseAPI { ticket: options.ticket } } - }).then(response => response.body as RevertAccountInfo); + }).then((response) => response.body as RevertAccountInfo); } revertAccount (options: RevertAccountOptions): Promise { @@ -432,7 +432,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as RevertAccount); + }).then((response) => response.body as RevertAccount); } getSAMLMetaData (): Promise { @@ -442,7 +442,7 @@ export default class AuthAPI extends BaseAPI { request: { path: "v2/saml/metadata" } - }).then(response => response.body as GetSAMLMetaData); + }).then((response) => response.body as GetSAMLMetaData); } samlAuthenticate (): Promise { @@ -453,7 +453,7 @@ export default class AuthAPI extends BaseAPI { path: "v2/saml/login", method: "POST" } - }).then(response => response.body as SAMLRequest); + }).then((response) => response.body as SAMLRequest); } getTwoStepVerificationMetaData (): Promise { @@ -463,7 +463,7 @@ export default class AuthAPI extends BaseAPI { request: { path: "v2/twostepverification/metadata" } - }).then(response => response.body as GetTwoStepVerificationMetaData); + }).then((response) => response.body as GetTwoStepVerificationMetaData); } resendTwoStepVerificationCode ( @@ -477,7 +477,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as ResendTwoStepVerification); + }).then((response) => response.body as ResendTwoStepVerification); } verifyTwoStepCode ( @@ -491,7 +491,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as VerifyTwoStepVerification); + }).then((response) => response.body as VerifyTwoStepVerification); } getExistingUsernames ( @@ -506,7 +506,7 @@ export default class AuthAPI extends BaseAPI { username: options.username } } - }).then(response => response.body as GetExistingUsernames); + }).then((response) => response.body as GetExistingUsernames); } validateUsername ( @@ -523,7 +523,7 @@ export default class AuthAPI extends BaseAPI { "request.context": options.context } } - }).then(response => response.body as ValidateUsername); + }).then((response) => response.body as ValidateUsername); } recoverUsernames ( @@ -536,7 +536,7 @@ export default class AuthAPI extends BaseAPI { path: "v2/twostepverification/metadata", json: options } - }).then(response => response.body as RecoverUsernames); + }).then((response) => response.body as RecoverUsernames); } signUp (options: SignUpOptions): Promise { @@ -548,7 +548,7 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as SignUp); + }).then((response) => response.body as SignUp); } changeUserUsername (options: ChangeUsernameOptions): Promise { @@ -560,6 +560,6 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then(response => response.body as ChangeUsername); + }).then((response) => response.body as ChangeUsername); } } diff --git a/src/client/apis/AvatarAPI.ts b/src/client/apis/AvatarAPI.ts index 6c5e2fd4e..c9beb0c5f 100644 --- a/src/client/apis/AvatarAPI.ts +++ b/src/client/apis/AvatarAPI.ts @@ -236,7 +236,7 @@ export default class AvatarAPI extends BaseAPI { path: "v1/avatar" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAvatarMetaData (): Promise { @@ -246,7 +246,7 @@ export default class AvatarAPI extends BaseAPI { path: "v1/avatar/metadata" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAvatarRules (): Promise { @@ -256,7 +256,7 @@ export default class AvatarAPI extends BaseAPI { path: "v1/avatar-rules" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserAvatar (options: GetUserAvatarOptions): Promise { @@ -266,7 +266,7 @@ export default class AvatarAPI extends BaseAPI { path: `v1/users/${options.userId}/avatar` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserCurrentlyWearing ( @@ -278,7 +278,7 @@ export default class AvatarAPI extends BaseAPI { path: `v1/users/${options.userId}/currently-wearing` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserOutfits (options: GetUserOutfitsOptions): Promise { @@ -288,7 +288,7 @@ export default class AvatarAPI extends BaseAPI { path: `v1/users/${options.userId}/outfits` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } removeAssetFromAvatar ( @@ -301,7 +301,7 @@ export default class AvatarAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } wearAssetOnAvatar ( @@ -314,7 +314,7 @@ export default class AvatarAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } redrawThumbnail (): Promise { @@ -325,7 +325,7 @@ export default class AvatarAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setSelfAvatarBodyColors ( @@ -339,7 +339,7 @@ export default class AvatarAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setSelfAvatarType ( @@ -353,7 +353,7 @@ export default class AvatarAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setSelfAvatarScales ( @@ -367,7 +367,7 @@ export default class AvatarAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setSelfWearingAssets ( @@ -381,7 +381,7 @@ export default class AvatarAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getOutfit (options: GetOutfitOptions): Promise { @@ -391,7 +391,7 @@ export default class AvatarAPI extends BaseAPI { path: `v1/outfits/${options.userOutfitId}/details` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteOutfit (options: DeleteOutfitOptions): Promise { @@ -402,7 +402,7 @@ export default class AvatarAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateOutfit (options: UpdateOutfitOptions): Promise { @@ -414,7 +414,7 @@ export default class AvatarAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } wearOutfit (options: WearOutfitOptions): Promise { @@ -425,7 +425,7 @@ export default class AvatarAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createOutfit (options: CreateOutfitOptions): Promise { @@ -437,7 +437,7 @@ export default class AvatarAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRecentlyUsed (options: GetRecentItemsOptions): Promise { @@ -447,6 +447,6 @@ export default class AvatarAPI extends BaseAPI { path: `v1/recent-items/${options.recentItemListType}/list` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/BadgesAPI.ts b/src/client/apis/BadgesAPI.ts index 3f7a70b08..1396d167a 100644 --- a/src/client/apis/BadgesAPI.ts +++ b/src/client/apis/BadgesAPI.ts @@ -66,7 +66,7 @@ export default class AvatarAPI extends BaseAPI { path: `v1/badges/${options.badgeId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateBadge (options: UpdateBadgeOptions): Promise { @@ -77,7 +77,7 @@ export default class AvatarAPI extends BaseAPI { method: "PATCH" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseBadges ( @@ -90,7 +90,7 @@ export default class AvatarAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserBadges (options: GetUserBadgesOptions): Promise { @@ -101,7 +101,7 @@ export default class AvatarAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserBadgesAwardedDates ( @@ -116,7 +116,7 @@ export default class AvatarAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteBadgeFromUser ( @@ -129,7 +129,7 @@ export default class AvatarAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteBadgeFromSelf ( @@ -142,6 +142,6 @@ export default class AvatarAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/BaseAPI.ts b/src/client/apis/BaseAPI.ts index 66a591d81..5f0780a61 100644 --- a/src/client/apis/BaseAPI.ts +++ b/src/client/apis/BaseAPI.ts @@ -53,7 +53,7 @@ export default class BaseAPI { return this.options.client.rest .request(options.request as RESTRequestOptions) - .then(response => { + .then((response) => { if (options.json && !(response.body instanceof Object)) { response.body = JSON.parse(response.body); } diff --git a/src/client/apis/BillingAPI.ts b/src/client/apis/BillingAPI.ts index f68cafbb5..6f332394a 100644 --- a/src/client/apis/BillingAPI.ts +++ b/src/client/apis/BillingAPI.ts @@ -152,7 +152,7 @@ export default class BillingAPI extends BaseAPI { path: `v1/developer-exchange-rate` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } submitDeveloperExchange ( @@ -166,7 +166,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getLuobuDeveloperExchangeBalance (): Promise { @@ -176,7 +176,7 @@ export default class BillingAPI extends BaseAPI { path: `v1/luobu-developer-exchange/balance` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getLuobuDeveloperExchangeEligibility (): Promise { @@ -186,7 +186,7 @@ export default class BillingAPI extends BaseAPI { path: `v1/luobu-developer-exchange/eligibility` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getLuobuDeveloperExchangeLatestRequestStatus (): Promise { @@ -196,7 +196,7 @@ export default class BillingAPI extends BaseAPI { path: `v1/luobu-developer-exchange/latest-request-status` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } submitLuobuDeveloperExchange ( @@ -210,7 +210,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserPaymentsHistory ( @@ -223,7 +223,7 @@ export default class BillingAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } purchaseAmazonProduct ( @@ -237,7 +237,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } validateAmazonProduct ( @@ -251,7 +251,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } purchaseAppleProduct ( @@ -265,7 +265,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } validateAppleProduct ( @@ -279,7 +279,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } redeemDigitalCode ( @@ -293,7 +293,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } redeemGameCard (options: RedeemGameCardOptions): Promise { @@ -305,7 +305,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } reverseGameCard (options: ReverseGameCardOptions): Promise { @@ -317,7 +317,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } purchaseGoogleProduct ( @@ -331,7 +331,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } validateGoogleProduct ( @@ -345,7 +345,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendXsollaWebhook ( @@ -359,7 +359,7 @@ export default class BillingAPI extends BaseAPI { json: options as any }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getXsollaIFrameToken ( @@ -373,7 +373,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } incrementCounterByAgent ( @@ -387,7 +387,7 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } redeemPromoCode (options: RedeemPromoCodeOptions): Promise { @@ -399,6 +399,6 @@ export default class BillingAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/CatalogAPI.ts b/src/client/apis/CatalogAPI.ts index 08945a61f..3f887ade0 100644 --- a/src/client/apis/CatalogAPI.ts +++ b/src/client/apis/CatalogAPI.ts @@ -144,7 +144,7 @@ export default class CatalogAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getBundleDetails ( @@ -157,7 +157,7 @@ export default class CatalogAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getBundleRecommendationsByBundleId ( @@ -170,7 +170,7 @@ export default class CatalogAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiBundleDetails ( @@ -185,7 +185,7 @@ export default class CatalogAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserBundles (options: GetUserBundlesOptions): Promise { @@ -196,7 +196,7 @@ export default class CatalogAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserBundlesByType ( @@ -208,7 +208,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/users/${options.userId}/bundles/${options.bundleType}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } unpackBundle (options: UnpackBundleOptions): Promise { @@ -219,7 +219,7 @@ export default class CatalogAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAssetToCategory (): Promise { @@ -229,7 +229,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/asset-to-category` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAssetToSubCategory (): Promise { @@ -239,7 +239,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/asset-to-subcategory` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getCategories (): Promise { @@ -249,7 +249,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/categories` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSubCategories (): Promise { @@ -259,7 +259,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/subcategories` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAppStoreExclusiveBundles ( @@ -271,7 +271,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/exclusive-items/${options.appStoreType}/bundles` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAssetFavoriteCount ( @@ -283,7 +283,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/favorites/assets/${options.assetId}/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getBundleFavoriteCount ( @@ -295,7 +295,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/favorites/bundles/${options.bundleId}/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } removeAssetFavorite ( @@ -308,7 +308,7 @@ export default class CatalogAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFavoriteAsset ( @@ -320,7 +320,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } favoriteAsset (options: FavoriteAssetOptions): Promise { @@ -331,7 +331,7 @@ export default class CatalogAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } removeBundleFavorite ( @@ -344,7 +344,7 @@ export default class CatalogAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFavoriteBundle ( @@ -356,7 +356,7 @@ export default class CatalogAPI extends BaseAPI { path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } favoriteBundle (options: FavoriteBundleOptions): Promise { @@ -367,6 +367,6 @@ export default class CatalogAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/ChatAPI.ts b/src/client/apis/ChatAPI.ts index e23fc786f..58d1432ff 100644 --- a/src/client/apis/ChatAPI.ts +++ b/src/client/apis/ChatAPI.ts @@ -198,7 +198,7 @@ export default class ChatAPI extends BaseAPI { path: `v2/chat-settings` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getConversations ( @@ -213,7 +213,7 @@ export default class ChatAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getConversationMessages ( @@ -226,7 +226,7 @@ export default class ChatAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRolloutSettings ( @@ -241,7 +241,7 @@ export default class ChatAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUnreadConversationCount (): Promise { @@ -251,7 +251,7 @@ export default class ChatAPI extends BaseAPI { path: `v2/get-conversations` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUnreadMessagesInConversations ( @@ -267,7 +267,7 @@ export default class ChatAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserConversations ( @@ -280,7 +280,7 @@ export default class ChatAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMetaData (): Promise { @@ -290,7 +290,7 @@ export default class ChatAPI extends BaseAPI { path: `v2/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiLatestConversationMessages ( @@ -303,7 +303,7 @@ export default class ChatAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } addUsersToConversation ( @@ -317,7 +317,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markConversationMessagesRead ( @@ -331,7 +331,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markConversationsSeen ( @@ -345,7 +345,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } removeUserFromConversation ( @@ -359,7 +359,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } renameGroupConversation ( @@ -373,7 +373,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } resetConversationUniverse ( @@ -387,7 +387,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendGameLinkMessage ( @@ -401,7 +401,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendMessage (options: SendMessageOptions): Promise { @@ -413,7 +413,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setConversationUniverse ( @@ -427,7 +427,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } startCloudEditConversation ( @@ -441,7 +441,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } startGroupConversation ( @@ -455,7 +455,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } startOneToOneConversation ( @@ -469,7 +469,7 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUserTypingStatus ( @@ -483,6 +483,6 @@ export default class ChatAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/ContactsAPI.ts b/src/client/apis/ContactsAPI.ts index 30e321d51..7604ebcc3 100644 --- a/src/client/apis/ContactsAPI.ts +++ b/src/client/apis/ContactsAPI.ts @@ -41,7 +41,7 @@ export default class ContactsAPI extends BaseAPI { path: `v1/contacts/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersTags (options: GetUsersTagsOptions): Promise { @@ -53,7 +53,7 @@ export default class ContactsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setPendingUserTag ( @@ -67,7 +67,7 @@ export default class ContactsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setUserTag (options: SetUserTagOptions): Promise { @@ -79,6 +79,6 @@ export default class ContactsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/DataAPI.ts b/src/client/apis/DataAPI.ts index f212b28fc..3fcf0cf2f 100644 --- a/src/client/apis/DataAPI.ts +++ b/src/client/apis/DataAPI.ts @@ -29,6 +29,6 @@ export default class DataAPI extends BaseAPI { Accept: "application/json" } } - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/DevelopAPI.ts b/src/client/apis/DevelopAPI.ts index 1f2826546..894fa3981 100644 --- a/src/client/apis/DevelopAPI.ts +++ b/src/client/apis/DevelopAPI.ts @@ -462,7 +462,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/gametemplates` }, json: true - }).then(response => response.body.data); + }).then((response) => response.body.data); } getGameUpdatesHistory ( @@ -474,7 +474,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/gameUpdateNotifications/${options.universeId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } publishGameUpdateNotification ( @@ -488,7 +488,7 @@ export default class DevelopAPI extends BaseAPI { json: `"${options.gameUpdateText}"` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } filterGameUpdateNotificationText ( @@ -502,7 +502,7 @@ export default class DevelopAPI extends BaseAPI { json: `"${options.text}"` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupUniverses ( @@ -515,7 +515,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getPlaceCompatibilities ( @@ -527,7 +527,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/places/${options.placeId}/compatibilities` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updatePlaceConfiguration ( @@ -541,7 +541,7 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getPlaceStatistics ( @@ -554,7 +554,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiPlugins (options: GetPluginsByIdOptions): Promise { @@ -567,7 +567,7 @@ export default class DevelopAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updatePlugin (options: UpdatePluginOptions): Promise { @@ -579,7 +579,7 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } searchUniverses (options: SearchUniversesOptions): Promise { @@ -607,7 +607,7 @@ export default class DevelopAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } searchToolbox (options: SearchToolboxOptions): Promise { @@ -618,7 +618,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverse (options: GetUniverseOptions): Promise { @@ -628,7 +628,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfUniversePermissions ( @@ -640,7 +640,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/permissions` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getPlacesInUniverse ( @@ -653,7 +653,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseStatisticReports ( @@ -665,7 +665,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/statistic-reports` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseStatisticReportsByTime ( @@ -677,7 +677,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } downloadUniverseStatisticReportsByTime ( @@ -689,7 +689,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/download` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiUniverses ( @@ -704,7 +704,7 @@ export default class DevelopAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiUniversesPermissions ( @@ -719,7 +719,7 @@ export default class DevelopAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } activateUniverse ( @@ -732,7 +732,7 @@ export default class DevelopAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deactivateUniverse ( @@ -745,7 +745,7 @@ export default class DevelopAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } generateUniverseStatisticReportsByTime ( @@ -758,7 +758,7 @@ export default class DevelopAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseConfiguration ( @@ -770,7 +770,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/configuration` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUniverseConfiguration ( @@ -784,7 +784,7 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseVIPServersConfiguration ( @@ -796,7 +796,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/configuration/vip-servers` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseTeamCreateSettings ( @@ -808,7 +808,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.universeId}/teamcreate` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUniverseTeamCreateSettings ( @@ -822,7 +822,7 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } removeUserFromUniverseTeamCreate ( @@ -836,7 +836,7 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseTeamCreateMembers ( @@ -849,7 +849,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfUniversesTeamCreateAccess ( @@ -862,7 +862,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfManageableGroups (): Promise { @@ -872,7 +872,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/user/groups/canmanage` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfNotificationStatisticReports (): Promise { @@ -882,7 +882,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/user/notifications/statistic-reports` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getStudioData (options: GetStudioDataOptions): Promise { @@ -893,7 +893,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setStudioData (options: SetStudioDataOptions): Promise { @@ -908,7 +908,7 @@ export default class DevelopAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfUniverses ( @@ -921,7 +921,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createUniverseAlias ( @@ -933,7 +933,7 @@ export default class DevelopAPI extends BaseAPI { path: `v1/universes/${options.targetId}/aliases` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteUniverseAlias ( @@ -946,7 +946,7 @@ export default class DevelopAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUniverseAlias ( @@ -960,7 +960,7 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createDeveloperProduct ( @@ -974,7 +974,7 @@ export default class DevelopAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateDeveloperProduct ( @@ -988,6 +988,6 @@ export default class DevelopAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/EconomyAPI.ts b/src/client/apis/EconomyAPI.ts index a814ed347..9f40bada6 100644 --- a/src/client/apis/EconomyAPI.ts +++ b/src/client/apis/EconomyAPI.ts @@ -187,7 +187,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/assets/${options.assetId}/resale-data` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAssetResellers ( @@ -200,7 +200,7 @@ export default class EconomyAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserResellableAssetCopies ( @@ -212,7 +212,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/assets/${options.assetId}/users/${options.userId}/resellable-copies` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getResaleTaxRate (): Promise { @@ -222,7 +222,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/resale-tax-rate` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setAssetCopiesForSale ( @@ -238,7 +238,7 @@ export default class EconomyAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getDeveloperExchangeAbility (): Promise { @@ -248,7 +248,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/developer-exchange/cashoutAbility` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getDeveloperExchangeHelp (): Promise { @@ -258,7 +258,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/developer-exchange/help` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getDeveloperExchangeInfo ( @@ -271,7 +271,7 @@ export default class EconomyAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } submitDeveloperExchange ( @@ -285,7 +285,7 @@ export default class EconomyAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupCurrency ( @@ -297,7 +297,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/groups/${options.groupId}/currency` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfCurrency (options: GetSelfCurrencyOptions): Promise { @@ -307,7 +307,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/users/${options.userId}/currency` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupRevenueByTime ( @@ -319,7 +319,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/groups/${options.groupId}/revenue/summary/${options.timeFrame}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfRevenueSummaryByTIme ( @@ -331,7 +331,7 @@ export default class EconomyAPI extends BaseAPI { path: `v1/users/${options.userId}/revenue/summary/${options.timeFrame}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupTransactions ( @@ -344,7 +344,7 @@ export default class EconomyAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfTransactions ( @@ -357,6 +357,6 @@ export default class EconomyAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/EconomyCreatorStatsAPI.ts b/src/client/apis/EconomyCreatorStatsAPI.ts index b412da4f8..0e46c1131 100644 --- a/src/client/apis/EconomyCreatorStatsAPI.ts +++ b/src/client/apis/EconomyCreatorStatsAPI.ts @@ -34,6 +34,6 @@ export default class EconomyCreatorStatsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/EngagementPayoutsAPI.ts b/src/client/apis/EngagementPayoutsAPI.ts index fd7c2f165..cd7154257 100644 --- a/src/client/apis/EngagementPayoutsAPI.ts +++ b/src/client/apis/EngagementPayoutsAPI.ts @@ -26,6 +26,6 @@ export default class EngagementPayoutsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/FollowingsAPI.ts b/src/client/apis/FollowingsAPI.ts index 084737175..8cc219fc4 100644 --- a/src/client/apis/FollowingsAPI.ts +++ b/src/client/apis/FollowingsAPI.ts @@ -48,7 +48,7 @@ export default class FollowingsAPI extends BaseAPI { path: `v1/users/${options.userId}/universes` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFollowingUniverseStatus ( @@ -60,7 +60,7 @@ export default class FollowingsAPI extends BaseAPI { path: `v1/users/${options.userId}/universes/${options.universeId}/status` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } unFollowUniverse ( @@ -73,7 +73,7 @@ export default class FollowingsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } followUniverse (options: FollowUniverseOptions): Promise { @@ -84,6 +84,6 @@ export default class FollowingsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/FriendsAPI.ts b/src/client/apis/FriendsAPI.ts index 23d7c2f7d..f1585534e 100644 --- a/src/client/apis/FriendsAPI.ts +++ b/src/client/apis/FriendsAPI.ts @@ -189,7 +189,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/friends/verified/nearby/code/${options.code}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } checkSessionHealth (): Promise { @@ -199,7 +199,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/friends/verified/nearby/health` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } redeemFriendCode ( @@ -212,7 +212,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteFriendSession (): Promise { @@ -223,7 +223,7 @@ export default class FriendsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSession (): Promise { @@ -234,7 +234,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } redeemFriendQRCode (options: RedeemQRCodeOptions): Promise { @@ -245,7 +245,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteFriendQRSession (): Promise { @@ -256,7 +256,7 @@ export default class FriendsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getFriendQRSession (): Promise { @@ -267,7 +267,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMetaData (options: GetMetaDataOptions): Promise { @@ -278,7 +278,7 @@ export default class FriendsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfFriendsCount (): Promise { @@ -288,7 +288,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/my/friends/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfFriendRequests ( @@ -301,7 +301,7 @@ export default class FriendsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfFriendRequestsCount (): Promise { @@ -311,7 +311,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/user/friend-requests/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFollowers ( @@ -324,7 +324,7 @@ export default class FriendsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFollowersCount ( @@ -336,7 +336,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/users/${options.userId}/followers/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFollowing ( @@ -349,7 +349,7 @@ export default class FriendsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFollowingCount ( @@ -361,7 +361,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/users/${options.userId}/followings/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFriends (options: GetUserFriendsOptions): Promise { @@ -372,7 +372,7 @@ export default class FriendsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFriendsCount ( @@ -384,7 +384,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/users/${options.userId}/friends/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFriendsOnline ( @@ -396,7 +396,7 @@ export default class FriendsAPI extends BaseAPI { path: `v1/users/${options.userId}/friends/online` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserFriendsWithStatuses ( @@ -411,7 +411,7 @@ export default class FriendsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineAllFriendRequests (): Promise { @@ -422,7 +422,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptFriendRequest ( @@ -435,7 +435,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineFriendRequest ( @@ -448,7 +448,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } followUser (options: FollowUserOptions): Promise { @@ -459,7 +459,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendFriendRequest ( @@ -475,7 +475,7 @@ export default class FriendsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } unFollowUser (options: UnFollowUserOptions): Promise { @@ -486,7 +486,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } unfriendUser (options: UnfriendUserOptions): Promise { @@ -497,7 +497,7 @@ export default class FriendsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRecommendedUsers (): Promise { @@ -507,6 +507,6 @@ export default class FriendsAPI extends BaseAPI { path: `v1/recommended-users` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/GameInternationalizationAPI.ts b/src/client/apis/GameInternationalizationAPI.ts index 71ea621fb..239454369 100644 --- a/src/client/apis/GameInternationalizationAPI.ts +++ b/src/client/apis/GameInternationalizationAPI.ts @@ -120,7 +120,7 @@ export default class GameInternationalizationAPI extends BaseAPI { path: `v1/name-description/games/${options.gameId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGameInfo (options: UpdateGameInfoOptions): Promise { @@ -134,7 +134,7 @@ export default class GameInternationalizationAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getNameDescriptionMetaData (): Promise { @@ -144,7 +144,7 @@ export default class GameInternationalizationAPI extends BaseAPI { path: `v1/name-description/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameInfoHistory ( @@ -158,7 +158,7 @@ export default class GameInternationalizationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameSourceLanguage ( @@ -170,7 +170,7 @@ export default class GameInternationalizationAPI extends BaseAPI { path: `v1/source-language/games/${options.gameId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGameSourceLanguage ( @@ -186,7 +186,7 @@ export default class GameInternationalizationAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameSupportedLanguages ( @@ -198,7 +198,7 @@ export default class GameInternationalizationAPI extends BaseAPI { path: `v1/supported-languages/games/${options.gameId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } modifyGameSupportedLanguages ( @@ -212,7 +212,7 @@ export default class GameInternationalizationAPI extends BaseAPI { json: options.data }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameAutomaticTranslationStatus ( @@ -224,7 +224,7 @@ export default class GameInternationalizationAPI extends BaseAPI { path: `v1/supported-languages/games/${options.gameId}/automatic-translation-status` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSupportedLanguagesMetaData (): Promise { @@ -234,7 +234,7 @@ export default class GameInternationalizationAPI extends BaseAPI { path: `v1/supported-languages/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } toggleGameAutomaticTranslation ( @@ -248,6 +248,6 @@ export default class GameInternationalizationAPI extends BaseAPI { json: String(options.enableAutomaticTranslation).toString() }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/GamesAPI.ts b/src/client/apis/GamesAPI.ts index 33cd432cd..1ab22adab 100644 --- a/src/client/apis/GamesAPI.ts +++ b/src/client/apis/GamesAPI.ts @@ -291,7 +291,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games?${universeIdsQueryString}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameServersByType ( @@ -304,7 +304,7 @@ export default class GamesAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGamesProductInfo ( @@ -319,7 +319,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/games-product-info?${universeIdsQueryString}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } listGames (options: ListGamesOptions): Promise { @@ -348,7 +348,7 @@ export default class GamesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiPlaces (options: MultiGetPlacesOptions): Promise { @@ -362,7 +362,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/multiget-place-details?${placeIdsQueryString}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiGamesPlayabilityStatus ( @@ -377,7 +377,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/multiget-playability-status?${universeIdsQueryString}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameRecommendationsByAlgorithm ( @@ -393,7 +393,7 @@ export default class GamesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameRecommendationsByGame ( @@ -409,7 +409,7 @@ export default class GamesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameSorts (options: GetGameSortsOptions): Promise { @@ -422,7 +422,7 @@ export default class GamesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } isGameFavorited (options: IsGameFavoritedOptions): Promise { @@ -432,7 +432,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/${options.universeId}/favorites` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } toggleGameFavorite ( @@ -448,7 +448,7 @@ export default class GamesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameFavoriteCount ( @@ -460,7 +460,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/${options.universeId}/favorites/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameGamePasses ( @@ -473,7 +473,7 @@ export default class GamesAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfGameVote ( @@ -485,7 +485,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/${options.universeId}/votes/user` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGamesVotes (options: GetGamesVotesOptions): Promise { @@ -498,7 +498,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/games/votes?${universeIdsQueryString}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setSelfGameVote (options: SetSelfGameVoteOptions): Promise { @@ -512,7 +512,7 @@ export default class GamesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } canSelfInviteUserToVIPServer ( @@ -524,7 +524,7 @@ export default class GamesAPI extends BaseAPI { path: `v1/vip-server/can-invite/${options.userId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getVIPServer (options: GetVIPServerOptions): Promise { @@ -535,7 +535,7 @@ export default class GamesAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateVIPServer (options: UpdateVIPServerOptions): Promise { @@ -547,7 +547,7 @@ export default class GamesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createVIPServer (options: CreateVIPServerOptions): Promise { @@ -559,7 +559,7 @@ export default class GamesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateVIPServerPermissions ( @@ -573,7 +573,7 @@ export default class GamesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateVIPServerSubscription ( @@ -587,6 +587,6 @@ export default class GamesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/GeneralAPI.ts b/src/client/apis/GeneralAPI.ts index facab4487..d99f75556 100644 --- a/src/client/apis/GeneralAPI.ts +++ b/src/client/apis/GeneralAPI.ts @@ -166,7 +166,7 @@ export default class GeneralAPI extends BaseAPI { path: `assets/${options}/versions` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } awardBadge (options: AwardBadgeOptions): Promise { @@ -186,7 +186,7 @@ export default class GeneralAPI extends BaseAPI { request: { path: "currency/balance" } - }).then(response => response.body as GetBalance); + }).then((response) => response.body as GetBalance); } getUserFriends (options: GetUserFriendsOptions): Promise { @@ -199,7 +199,7 @@ export default class GeneralAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptFriendRequest ( @@ -257,7 +257,7 @@ export default class GeneralAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body.count); + }).then((response) => response.body.count); } unfriendUser (options: UnfriendUserOptions): Promise { @@ -280,7 +280,7 @@ export default class GeneralAPI extends BaseAPI { path: "user/following-exists", qs: options } - }).then(response => response.body.isFollowing); + }).then((response) => response.body.isFollowing); } followUser (options: FollowUserOptions): Promise { @@ -315,7 +315,7 @@ export default class GeneralAPI extends BaseAPI { request: { path: `users/${options.userId}/groups` } - }).then(response => response.body); + }).then((response) => response.body); } getGroup (options: GetGroupOptions): Promise { @@ -325,7 +325,7 @@ export default class GeneralAPI extends BaseAPI { path: `groups/${options.groupId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupAllies (options: GetGroupAlliesOptions): Promise { @@ -338,7 +338,7 @@ export default class GeneralAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupEnemies (options: GetGroupEnemiesOptions): Promise { @@ -351,7 +351,7 @@ export default class GeneralAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getIncomingItems (): Promise { @@ -375,7 +375,7 @@ export default class GeneralAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGamePassProductInfo ( @@ -388,7 +388,7 @@ export default class GeneralAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } userOwnsAsset (options: UserOwnsAssetOptions): Promise { @@ -399,7 +399,7 @@ export default class GeneralAPI extends BaseAPI { qs: options } }).then( - response => (response.body as string).includes("true") as UserOwnsAsset + (response) => (response.body as string).includes("true") as UserOwnsAsset ); } @@ -409,7 +409,7 @@ export default class GeneralAPI extends BaseAPI { request: { path: "reference/deviceinfo" } - }).then(response => ({ + }).then((response) => ({ deviceType: response.body.DeviceType, operatingSystemType: response.body.OperationSystemType, platformType: response.body.PlatformType @@ -425,7 +425,7 @@ export default class GeneralAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body.success === (true as BlockUser)); + }).then((response) => response.body.success === (true as BlockUser)); } unblockUser (options: UnblockUserOptions): Promise { @@ -437,7 +437,7 @@ export default class GeneralAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body.success === (true as UnblockUser)); + }).then((response) => response.body.success === (true as UnblockUser)); } getUserById (options: GetUserByIdOptions): Promise { @@ -447,7 +447,7 @@ export default class GeneralAPI extends BaseAPI { path: `users/${options.userId}` }, json: true - }).then(response => ({ + }).then((response) => ({ id: response.body.Id, name: response.body.Username })); @@ -463,7 +463,7 @@ export default class GeneralAPI extends BaseAPI { qs: options }, json: true - }).then(response => ({ + }).then((response) => ({ id: response.body.Id, name: response.body.Username })); @@ -479,7 +479,7 @@ export default class GeneralAPI extends BaseAPI { }, json: true }).then( - response => response.body.CanManage === (true as UserCanManageAsset) + (response) => response.body.CanManage === (true as UserCanManageAsset) ); } } diff --git a/src/client/apis/GroupsAPI.ts b/src/client/apis/GroupsAPI.ts index 72d351440..3cf792f0e 100644 --- a/src/client/apis/GroupsAPI.ts +++ b/src/client/apis/GroupsAPI.ts @@ -597,7 +597,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiGroups (options: GetMultiGroupsOptions): Promise { @@ -610,7 +610,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAuditLogs (options: GetGroupAuditLogsOptions): Promise { @@ -621,7 +621,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupSettings ( @@ -633,7 +633,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/settings` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGroupSettings ( @@ -647,7 +647,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupConfigurationMetaData (): Promise { @@ -657,7 +657,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/configuration/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupsMetaData (): Promise { @@ -667,7 +667,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createGroup (options: CreateGroupOptions): Promise { @@ -685,7 +685,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGroupDescription ( @@ -699,7 +699,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGroupStatus ( @@ -713,7 +713,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateGroupIcon (options: UpdateGroupIconOptions): Promise { @@ -725,7 +725,7 @@ export default class GroupsAPI extends BaseAPI { body: options.files }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineJoinRequests ( @@ -741,7 +741,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getJoinRequests (options: GetJoinRequestsOptions): Promise { @@ -752,7 +752,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptJoinRequests ( @@ -768,7 +768,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineJoinRequest ( @@ -781,7 +781,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getJoinRequest (options: GetJoinRequestOptions): Promise { @@ -791,7 +791,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptJoinRequest ( @@ -804,7 +804,7 @@ export default class GroupsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfGroupMembership ( @@ -816,7 +816,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/membership` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupRoles (options: GetGroupRolesOptions): Promise { @@ -826,7 +826,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/roles` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMembersWithRole ( @@ -842,7 +842,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMembers (options: GetMembersOptions): Promise { @@ -853,7 +853,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } joinGroup (options: JoinGroupOptions): Promise { @@ -865,7 +865,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfPendingGroupJoins (): Promise { @@ -875,7 +875,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/user/groups/pending` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserGroups (options: GetUserGroupsOptions): Promise { @@ -885,7 +885,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/users/${options.userId}/groups/roles` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } changeGroupOwner (options: ChangeOwnerOptions): Promise { @@ -897,7 +897,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } claimGroup (options: ClaimGroupOptions): Promise { @@ -909,7 +909,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } kickMember (options: KickMemberOptions): Promise { @@ -920,7 +920,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateMember (options: UpdateMemberOptions): Promise { @@ -932,7 +932,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupPayouts (options: GetGroupPayoutsOptions): Promise { @@ -942,7 +942,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/payouts` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } payoutMembers (options: PayoutMembersOptions): Promise { @@ -953,7 +953,7 @@ export default class GroupsAPI extends BaseAPI { method: "POST", json: { PayoutType: options.type, - Recipients: options.users.map(userData => ({ + Recipients: options.users.map((userData) => ({ recipientId: userData.userId, recipientType: "User", amount: userData.amount @@ -961,7 +961,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateRecurringPayouts ( @@ -974,7 +974,7 @@ export default class GroupsAPI extends BaseAPI { method: "POST", json: { PayoutType: options.type, - Recipients: options.users.map(userData => ({ + Recipients: options.users.map((userData) => ({ recipientId: userData.userId, recipientType: "User", amount: userData.amount @@ -982,7 +982,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupRelationships ( @@ -998,7 +998,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineRelationshipRequests ( @@ -1014,7 +1014,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRelationshipRequests ( @@ -1027,7 +1027,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptRelationshipRequests ( @@ -1043,7 +1043,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteRelationship ( @@ -1056,7 +1056,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createRelationship ( @@ -1069,7 +1069,7 @@ export default class GroupsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptRelationshipRequest ( @@ -1081,7 +1081,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineRelationshipRequest ( @@ -1094,7 +1094,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRolePermissions ( @@ -1106,7 +1106,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateRolePermissions ( @@ -1120,7 +1120,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGuestPermissions ( @@ -1132,7 +1132,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/roles/guest/permissions` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAllRolesPermissions ( @@ -1144,7 +1144,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/roles/permissions` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSocialLinks (options: GetSocialLinksOptions): Promise { @@ -1154,7 +1154,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/${options.groupId}/social-links` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createSocialLink (options: PostSocialLinkOptions): Promise { @@ -1166,7 +1166,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteSocialLink ( @@ -1179,7 +1179,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateSocialLink ( @@ -1193,7 +1193,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getWallPosts (options: GetWallPostsOptions): Promise { @@ -1204,7 +1204,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createWallPost (options: CreateWallPostOptions): Promise { @@ -1216,7 +1216,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteWallPost (options: DeleteWallPostOptions): Promise { @@ -1227,7 +1227,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteUserWallPosts ( @@ -1240,7 +1240,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } searchGroupsByKeyword ( @@ -1253,7 +1253,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } searchGroups (options: SearchGroupsOptions): Promise { @@ -1264,7 +1264,7 @@ export default class GroupsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupSearchMetaData (): Promise { @@ -1274,7 +1274,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/groups/search/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRolesByIds (options: GetRolesByIdsOptions): Promise { @@ -1287,7 +1287,7 @@ export default class GroupsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserPrimaryGroup ( @@ -1299,7 +1299,7 @@ export default class GroupsAPI extends BaseAPI { path: `v1/users/${options.userId}/groups/primary/role` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } removePrimaryGroup (): Promise { @@ -1310,7 +1310,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setPrimaryGroup (options: SetPrimaryGroupOptions): Promise { @@ -1322,7 +1322,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createRole (options: CreateRoleOptions): Promise { @@ -1334,7 +1334,7 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteRole (options: DeleteRoleOptions): Promise { @@ -1345,7 +1345,7 @@ export default class GroupsAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateRole (options: UpdateRoleOptions): Promise { @@ -1357,6 +1357,6 @@ export default class GroupsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/InventoryAPI.ts b/src/client/apis/InventoryAPI.ts index b82c688ec..c6fcb998b 100644 --- a/src/client/apis/InventoryAPI.ts +++ b/src/client/apis/InventoryAPI.ts @@ -177,7 +177,7 @@ export default class InventoryAPI extends BaseAPI { path: `v1/packages/${options.packageId}/assets` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserCollectibles ( @@ -190,7 +190,7 @@ export default class InventoryAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserItemsByTypeAndTargetId ( @@ -202,7 +202,7 @@ export default class InventoryAPI extends BaseAPI { path: `v1/users/${options.userId}/items/${options.itemType}/${options.itemTargetId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAssetOwners (options: GetAssetOwnersOptions): Promise { @@ -213,7 +213,7 @@ export default class InventoryAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserInventory ( @@ -226,7 +226,7 @@ export default class InventoryAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserInventoryByAssetTypeId ( @@ -239,6 +239,6 @@ export default class InventoryAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/ItemConfigurationAPI.ts b/src/client/apis/ItemConfigurationAPI.ts index f92905684..152b48bfe 100644 --- a/src/client/apis/ItemConfigurationAPI.ts +++ b/src/client/apis/ItemConfigurationAPI.ts @@ -95,7 +95,7 @@ export default class InventoryAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMultiCreatedAssets ( @@ -109,7 +109,7 @@ export default class InventoryAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getItemTagsByItemIds ( @@ -124,7 +124,7 @@ export default class InventoryAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } createItemTag (options: CreateItemTagOptions): Promise { @@ -136,7 +136,7 @@ export default class InventoryAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getItemTagsMetaData (): Promise { @@ -146,7 +146,7 @@ export default class InventoryAPI extends BaseAPI { path: `v1/item-tags/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deleteItemTag (options: DeleteItemTagOptions): Promise { @@ -157,7 +157,7 @@ export default class InventoryAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getTagsByTagIds (options: GetTagsByTagIdsOptions): Promise { @@ -170,7 +170,7 @@ export default class InventoryAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } searchTags (options: SearchTagsOptions): Promise { @@ -181,6 +181,6 @@ export default class InventoryAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/LocaleAPI.ts b/src/client/apis/LocaleAPI.ts index 67bbd7254..b818c603d 100644 --- a/src/client/apis/LocaleAPI.ts +++ b/src/client/apis/LocaleAPI.ts @@ -69,7 +69,7 @@ export default class LocaleAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getLocales (options: GetLocalesOptions): Promise { @@ -80,7 +80,7 @@ export default class LocaleAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSupportedLocales (): Promise { @@ -90,7 +90,7 @@ export default class LocaleAPI extends BaseAPI { path: `v1/locales/supported-locales` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserLocale (): Promise { @@ -100,7 +100,7 @@ export default class LocaleAPI extends BaseAPI { path: `v1/locales/user-locale` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getLocusSupportedLocales (): Promise { @@ -110,7 +110,7 @@ export default class LocaleAPI extends BaseAPI { path: `v1/locales/user-localization-locus-supported-locales` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setUserLocale (options: SetUserLocaleOptions): Promise { @@ -122,6 +122,6 @@ export default class LocaleAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/MetricsAPI.ts b/src/client/apis/MetricsAPI.ts index 42c2f2148..5e6f8136e 100644 --- a/src/client/apis/MetricsAPI.ts +++ b/src/client/apis/MetricsAPI.ts @@ -35,7 +35,7 @@ export default class LocaleAPI extends BaseAPI { path: `v1/thumbnails/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } recordThumbnailLoad ( @@ -49,7 +49,7 @@ export default class LocaleAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } recordBundleLoad ( @@ -63,6 +63,6 @@ export default class LocaleAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/NotificationsAPI.ts b/src/client/apis/NotificationsAPI.ts index 52dd92f1c..769046052 100644 --- a/src/client/apis/NotificationsAPI.ts +++ b/src/client/apis/NotificationsAPI.ts @@ -247,7 +247,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/notifications/get-settings` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRealtimeNotificationSettings (): Promise { @@ -257,7 +257,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/notifications/settings/realtime` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } allowNotificationSource ( @@ -271,7 +271,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } disallowNotificationSource ( @@ -285,7 +285,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } allowNotificationDestination ( @@ -299,7 +299,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } disallowNotificationDestination ( @@ -313,7 +313,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateDestinationSetting ( @@ -327,7 +327,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateNotificationSettings ( @@ -341,7 +341,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getChromeManifest (): Promise { @@ -351,7 +351,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/push-notifications/chrome-manifest` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getCurrentDeviceDestination (): Promise { @@ -361,7 +361,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/push-notifications/get-current-device-destination` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getDestinations (): Promise { @@ -371,7 +371,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/push-notifications/get-destinations` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getPushNotificationsMetaData (): Promise { @@ -381,7 +381,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/push-notifications/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getNotificationIds ( @@ -394,7 +394,7 @@ export default class NotificationsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deregisterAllDevices (): Promise { @@ -405,7 +405,7 @@ export default class NotificationsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } deregisterCurrentDevice (): Promise { @@ -415,7 +415,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/push-notifications/deregister-current-device` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markNotificationRead ( @@ -429,7 +429,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markNotificationCategoryRead ( @@ -443,7 +443,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markNotificationInteraction ( @@ -457,7 +457,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } registerAndroidAmazon ( @@ -471,7 +471,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } registerAndroidNative ( @@ -485,7 +485,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } registerAndroidTencentSerice ( @@ -499,7 +499,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } registerChrome (options: RegisterChromeOptions): Promise { @@ -511,7 +511,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } registerFirefox (options: RegisterFirefoxOptions): Promise { @@ -523,7 +523,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } registerIOSNative ( @@ -537,7 +537,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getLatestUniversesUpdates ( @@ -553,7 +553,7 @@ export default class NotificationsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getStreamNotificationsPromptSettings (): Promise { @@ -563,7 +563,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/stream-notifications/get-prompt-settings` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getRecentStreamNotifications ( @@ -576,7 +576,7 @@ export default class NotificationsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getStreamNotificationsMetaData (): Promise { @@ -586,7 +586,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/stream-notifications/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUnreadStreamNotificationsCount (): Promise { @@ -596,7 +596,7 @@ export default class NotificationsAPI extends BaseAPI { path: `v2/stream-notifications/unread-count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } clearUnreadStreamNotifications (): Promise { @@ -607,7 +607,7 @@ export default class NotificationsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markGameUpdateNotificationInteracted ( @@ -621,7 +621,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markGameUpdateNotificationRead ( @@ -635,7 +635,7 @@ export default class NotificationsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } suppressStreamNotificationsPrompt (): Promise { @@ -646,6 +646,6 @@ export default class NotificationsAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/OtherAPI.ts b/src/client/apis/OtherAPI.ts index 6e2ec07d2..cf1a5baf5 100644 --- a/src/client/apis/OtherAPI.ts +++ b/src/client/apis/OtherAPI.ts @@ -62,6 +62,6 @@ export default class OtherAPI extends BaseAPI { url: `https://www.roblox.com/users/profile/profileheader-json?userId=${options.userId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/PremiumFeaturesAPI.ts b/src/client/apis/PremiumFeaturesAPI.ts index 898b8ae18..ceaf90933 100644 --- a/src/client/apis/PremiumFeaturesAPI.ts +++ b/src/client/apis/PremiumFeaturesAPI.ts @@ -30,7 +30,7 @@ export default class PremiumFeaturesAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } validateUserMembership ( @@ -42,6 +42,6 @@ export default class PremiumFeaturesAPI extends BaseAPI { path: `v1/users/${options.userId}/validate-membership` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/PresenceAPI.ts b/src/client/apis/PresenceAPI.ts index c110215a0..f6e36ed73 100644 --- a/src/client/apis/PresenceAPI.ts +++ b/src/client/apis/PresenceAPI.ts @@ -43,7 +43,7 @@ export default class PresenceAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersPresences ( @@ -57,6 +57,6 @@ export default class PresenceAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/PrivateMessagesAPI.ts b/src/client/apis/PrivateMessagesAPI.ts index 075a9c35e..e4a3f2f97 100644 --- a/src/client/apis/PrivateMessagesAPI.ts +++ b/src/client/apis/PrivateMessagesAPI.ts @@ -100,7 +100,7 @@ export default class PrivateMessagesAPI extends BaseAPI { path: `v1/announcements` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAnnouncementsMetaData (): Promise { @@ -110,7 +110,7 @@ export default class PrivateMessagesAPI extends BaseAPI { path: `v1/announcements/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMessages (options: GetMessagesOptions): Promise { @@ -121,7 +121,7 @@ export default class PrivateMessagesAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getMessage (options: GetMessageOptions): Promise { @@ -131,7 +131,7 @@ export default class PrivateMessagesAPI extends BaseAPI { path: `v1/messages/${options.messageId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUnreadMessagesCount (): Promise { @@ -141,7 +141,7 @@ export default class PrivateMessagesAPI extends BaseAPI { path: `v1/messages/unread/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } archiveMessages (options: ArchiveMessagesOptions): Promise { @@ -153,7 +153,7 @@ export default class PrivateMessagesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markMessagesRead ( @@ -167,7 +167,7 @@ export default class PrivateMessagesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } markMessagesUnread ( @@ -181,7 +181,7 @@ export default class PrivateMessagesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendMessage (options: SendMessageOptions): Promise { @@ -193,7 +193,7 @@ export default class PrivateMessagesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } unArchiveMessages ( @@ -207,6 +207,6 @@ export default class PrivateMessagesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/PublishAPI.ts b/src/client/apis/PublishAPI.ts index 4414642e2..61d2f0d40 100644 --- a/src/client/apis/PublishAPI.ts +++ b/src/client/apis/PublishAPI.ts @@ -72,7 +72,7 @@ export default class PublishAPI extends BaseAPI { body: options.files }, json: true - }).then(response => response.body); + }).then((response) => response.body); } publishAudio (options: PublishAudioOptions): Promise { @@ -84,7 +84,7 @@ export default class PublishAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } verifyAudio (options: VerifyAudioOptions): Promise { @@ -96,7 +96,7 @@ export default class PublishAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } publishBadgeIcon ( @@ -110,7 +110,7 @@ export default class PublishAPI extends BaseAPI { body: options.files }, json: true - }).then(response => response.body); + }).then((response) => response.body); } publishGamePassIcon ( @@ -124,7 +124,7 @@ export default class PublishAPI extends BaseAPI { body: options.files }, json: true - }).then(response => response.body); + }).then((response) => response.body); } uploadGameThumbnail ( @@ -138,7 +138,7 @@ export default class PublishAPI extends BaseAPI { body: options.files }, json: true - }).then(response => response.body); + }).then((response) => response.body); } uploadPluginIcon ( @@ -152,6 +152,6 @@ export default class PublishAPI extends BaseAPI { body: options.files }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/ThumbnailsAPI.ts b/src/client/apis/ThumbnailsAPI.ts index 94928248c..d09ad1eb5 100644 --- a/src/client/apis/ThumbnailsAPI.ts +++ b/src/client/apis/ThumbnailsAPI.ts @@ -216,7 +216,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getBadgesIcons (options: GetBadgesIconsOptions): Promise { @@ -232,7 +232,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getBundlesThumbnails ( @@ -250,7 +250,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getDeveloperProductIcons ( @@ -268,7 +268,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGamePassesIcons ( @@ -286,7 +286,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniverseThumbnailIds ( @@ -299,7 +299,7 @@ export default class ThumbnailsAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniversesRootPlaceThumbnail ( @@ -317,7 +317,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUniversesThumbnailIds ( @@ -335,7 +335,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGroupsIcons (options: GetGroupsIconsOptions): Promise { @@ -351,7 +351,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersFullBodyAvatarImages ( @@ -367,7 +367,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersAvatarBustImages ( @@ -383,7 +383,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersAvatarHeadShotImages ( @@ -399,7 +399,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersOutfitsImages ( @@ -417,7 +417,7 @@ export default class ThumbnailsAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getBatchImages (options: GetBatchImagesOptions): Promise { @@ -429,6 +429,6 @@ export default class ThumbnailsAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/TradesAPI.ts b/src/client/apis/TradesAPI.ts index ac4eb7510..5b813b84a 100644 --- a/src/client/apis/TradesAPI.ts +++ b/src/client/apis/TradesAPI.ts @@ -114,7 +114,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/trades/${options.tradeId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getTradesByStatusType ( @@ -126,7 +126,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/trades/${options.tradeStatusType}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getTradesCountByStatusType ( @@ -138,7 +138,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/trades/${options.tradeStatusType}/count` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getTradesMetaData (): Promise { @@ -148,7 +148,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/trades/metadata` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } canTradeWith ( @@ -160,7 +160,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/users/${options.userId}/can-trade-with` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } acceptTrade (options: AcceptTradeOptions): Promise { @@ -171,7 +171,7 @@ export default class TradesAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } counterTrade (options: CounterTradeOptions): Promise { @@ -183,7 +183,7 @@ export default class TradesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } declineTrade (options: DeclineTradeOptions): Promise { @@ -194,7 +194,7 @@ export default class TradesAPI extends BaseAPI { method: "POST" }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendTrade (options: SendTradeOptions): Promise { @@ -206,6 +206,6 @@ export default class TradesAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/TranslationRolesAPI.ts b/src/client/apis/TranslationRolesAPI.ts index 240760d5c..a59c68995 100644 --- a/src/client/apis/TranslationRolesAPI.ts +++ b/src/client/apis/TranslationRolesAPI.ts @@ -57,7 +57,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/game-localization-roles/games/${options.gameId}/current-user/roles` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getGameRoleAssignees ( @@ -69,7 +69,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/game-localization-roles/games/${options.gameId}/roles/${options.role}/assignees` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getSelfGamesAccessByRole ( @@ -81,7 +81,7 @@ export default class TradesAPI extends BaseAPI { path: `v1/game-localization-roles/roles/${options.role}/current-user` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateUserAccess (options: UpdateUserAccess): Promise { @@ -98,6 +98,6 @@ export default class TradesAPI extends BaseAPI { } }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/TwoStepVerificationAPI.ts b/src/client/apis/TwoStepVerificationAPI.ts index 97f266174..87d5a3631 100644 --- a/src/client/apis/TwoStepVerificationAPI.ts +++ b/src/client/apis/TwoStepVerificationAPI.ts @@ -91,7 +91,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getConfiguration ( @@ -104,7 +104,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } verifyWithAuthenticator ( @@ -120,7 +120,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } disableAuthenticator ( @@ -136,7 +136,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } enableAuthenticator ( @@ -152,7 +152,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } verifyAuthenticatorSetup ( @@ -168,7 +168,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } sendEmailCode (options: EmailSendCodeOptions): Promise { @@ -179,7 +179,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } verifyEmail (options: EmailVerifyOptions): Promise { @@ -191,7 +191,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } disableEmail (options: EmailDisableOptions): Promise { @@ -203,7 +203,7 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } enableEmail (options: EmailEnableOptions): Promise { @@ -215,6 +215,6 @@ export default class TwoStepVerificationAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/apis/UsersAPI.ts b/src/client/apis/UsersAPI.ts index 755d29b34..e5fd622df 100644 --- a/src/client/apis/UsersAPI.ts +++ b/src/client/apis/UsersAPI.ts @@ -98,7 +98,7 @@ export default class UsersAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } validateDisplayNameExistingUser ( @@ -111,7 +111,7 @@ export default class UsersAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } setDisplayName ( @@ -125,7 +125,7 @@ export default class UsersAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserById (options: GetUserByIdOptions): Promise { @@ -135,7 +135,7 @@ export default class UsersAPI extends BaseAPI { path: `v1/users/${options.userId}` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getAuthenticatedUserInformation (): Promise { @@ -146,7 +146,7 @@ export default class UsersAPI extends BaseAPI { path: `v1/users/authenticated` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersByUsernames ( @@ -160,7 +160,7 @@ export default class UsersAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUsersByIds (options: GetUsersByUserIdsOptions): Promise { @@ -172,7 +172,7 @@ export default class UsersAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } getUserStatus (options: GetUserStatusOptions): Promise { @@ -182,7 +182,7 @@ export default class UsersAPI extends BaseAPI { path: `v1/users/${options.userId}/status` }, json: true - }).then(response => response.body); + }).then((response) => response.body); } updateStatus (options: UpdateSelfStatusOptions): Promise { @@ -194,7 +194,7 @@ export default class UsersAPI extends BaseAPI { json: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } searchUsers (options: SearchUsersOptions): Promise { @@ -205,6 +205,6 @@ export default class UsersAPI extends BaseAPI { qs: options }, json: true - }).then(response => response.body); + }).then((response) => response.body); } } diff --git a/src/client/lib/ChatManager/ChatManager.ts b/src/client/lib/ChatManager/ChatManager.ts index 789568978..ee91663a3 100644 --- a/src/client/lib/ChatManager/ChatManager.ts +++ b/src/client/lib/ChatManager/ChatManager.ts @@ -34,7 +34,7 @@ export default class ChatManager { getConversation (conversationId: number): Promise { return this.getConversations([conversationId]).then( - data => data[0] || null + (data) => data[0] || null ); } @@ -49,15 +49,15 @@ export default class ChatManager { pageSize: amount, exclusiveStartMessageId: startMessageId }) - .then(response => - response.map(chatData => new ChatMessage(chatData, this.client)) + .then((response) => + response.map((chatData) => new ChatMessage(chatData, this.client)) ); } getUnreadConversationsCount (): Promise { return this.client.apis.chatAPI .getUnreadConversationCount() - .then(response => response.count); + .then((response) => response.count); } getConversations (conversations: number[]): Promise { @@ -65,9 +65,9 @@ export default class ChatManager { .getConversations({ conversationIds: conversations }) - .then(response => + .then((response) => response.map( - conversationData => + (conversationData) => new ChatConversation(conversationData, this.client) ) ); @@ -130,12 +130,12 @@ export default class ChatManager { conversationIds: conversations, pageSize: amount }) - .then(response => + .then((response) => Array.prototype.concat.apply( [], - response.map(conversationData => + response.map((conversationData) => conversationData.chatMessages.map( - chatData => new ChatMessage(chatData, this.client) + (chatData) => new ChatMessage(chatData, this.client) ) ) ) @@ -151,12 +151,12 @@ export default class ChatManager { conversationIds: conversations, pageSize: amount }) - .then(response => + .then((response) => Array.prototype.concat.apply( [], - response.map(conversationData => + response.map((conversationData) => conversationData.chatMessages.map( - chatData => new ChatMessage(chatData, this.client) + (chatData) => new ChatMessage(chatData, this.client) ) ) ) @@ -176,13 +176,13 @@ export default class ChatManager { ): Promise { return this.client.apis.chatAPI .sendGameLinkMessage(options) - .then(response => new ChatMessageSent(response, this.client)); + .then((response) => new ChatMessageSent(response, this.client)); } sendMessage (options: SendMessageOptions): Promise { return this.client.apis.chatAPI .sendMessage(options) - .then(response => new ChatMessageSent(response, this.client)); + .then((response) => new ChatMessageSent(response, this.client)); } setConversationUniverse ( diff --git a/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts b/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts index bfff3bb4d..f1b123f34 100644 --- a/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts +++ b/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts @@ -12,7 +12,7 @@ export default function handleFriendshipNotifications ( user: new PartialUser( { id: [message.UserId1, message.UserId2].filter( - id => id !== socket.client.user!.id + (id) => id !== socket.client.user!.id )[0]! }, socket.client diff --git a/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts b/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts index 09f60a0ff..f994ea5fd 100644 --- a/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts +++ b/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts @@ -10,7 +10,7 @@ export default function handlePresenceBulkNotifications ( throw new Error("Presence bulk notification message was not an array"); } - message.forEach(presenceUpdated => { + message.forEach((presenceUpdated) => { socket.emit( "userPresenceChanged", new PartialUser( diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts index aa6c8475a..8d207870e 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts @@ -15,7 +15,7 @@ export default class OrderedDataStorePage { ) { this.orderedDataStore = orderedDataStore; this.options = data.options; - this.data = data.result.data.Entries.map(x => ({ + this.data = data.result.data.Entries.map((x) => ({ key: x.Target, value: x.Value })); diff --git a/src/controllers/rest/RESTController.ts b/src/controllers/rest/RESTController.ts index 5feb9d3d5..8a45d07ea 100644 --- a/src/controllers/rest/RESTController.ts +++ b/src/controllers/rest/RESTController.ts @@ -71,7 +71,7 @@ class RESTController { */ fetchXCSRFToken (): Promise { - return updateXCSRFToken(this).then(xcsrfToken => { + return updateXCSRFToken(this).then((xcsrfToken) => { this.setXCSRFToken(xcsrfToken); return xcsrfToken; }); @@ -98,7 +98,7 @@ class RESTController { DefaultRESTControllerOptions.xcsrfRefreshInterval) ) { // Refresh token - await this.fetchXCSRFToken().then(token => { + await this.fetchXCSRFToken().then((token) => { this.setXCSRFToken(token); }); } diff --git a/src/controllers/rest/lib/updateXCSRFToken.ts b/src/controllers/rest/lib/updateXCSRFToken.ts index bf11a5849..1150c5e13 100644 --- a/src/controllers/rest/lib/updateXCSRFToken.ts +++ b/src/controllers/rest/lib/updateXCSRFToken.ts @@ -15,7 +15,7 @@ export default function updateXCSRFToken ( allowedStatusCodes: [403] } }) - .then(response => { + .then((response) => { const foundXcsrfToken = response.headers["x-csrf-token"]; if (!foundXcsrfToken) { diff --git a/src/controllers/rest/request/RESTRequest.ts b/src/controllers/rest/request/RESTRequest.ts index 219011fe0..a1449a748 100644 --- a/src/controllers/rest/request/RESTRequest.ts +++ b/src/controllers/rest/request/RESTRequest.ts @@ -39,7 +39,7 @@ class RESTRequest { async send (options?: RESTRequestOptions): Promise { await prepare(this, options || this.requestOptions); await Promise.all( - this.controller.requestHandlers.map(handler => handler(this)) + this.controller.requestHandlers.map((handler) => handler(this)) ); const responseData = await this.controller.requester(this.requestOptions); diff --git a/src/controllers/rest/response/RESTResponse.ts b/src/controllers/rest/response/RESTResponse.ts index 8132cae25..81218b4c5 100644 --- a/src/controllers/rest/response/RESTResponse.ts +++ b/src/controllers/rest/response/RESTResponse.ts @@ -22,15 +22,15 @@ export default class RESTResponse { // eslint-disable-next-line require-await async process (): Promise { - const allProcessed = this.controller.responseHandlers.map(handler => + const allProcessed = this.controller.responseHandlers.map((handler) => handler(this) ); - if (allProcessed.every(processed => processed === true)) { + if (allProcessed.every((processed) => processed === true)) { return this.responseData; } else { const error = allProcessed.find( - err => + (err) => err instanceof BloxyHttpError && err.name === "BloxyInvalidStatusMessageError" && err.statusMessage.includes("Token Validation Failed") @@ -49,7 +49,7 @@ export default class RESTResponse { } } - throw allProcessed.find(err => err instanceof Error); + throw allProcessed.find((err) => err instanceof Error); } } } diff --git a/src/controllers/rest/response/handlers/updateHeaders.ts b/src/controllers/rest/response/handlers/updateHeaders.ts index b78b99ba1..91e5b91b9 100644 --- a/src/controllers/rest/response/handlers/updateHeaders.ts +++ b/src/controllers/rest/response/handlers/updateHeaders.ts @@ -6,7 +6,7 @@ export default function updateHeaders (response: RESTResponse): boolean { const setCookieHeader = response.responseData.headers["set-cookie"]; if (Array.isArray(setCookieHeader)) { - setCookieHeader.forEach(toSetCookie => { + setCookieHeader.forEach((toSetCookie) => { const parsedCookie = Cookie.parse(toSetCookie); if (parsedCookie) { diff --git a/src/controllers/rest/response/handlers/validStatusCode.ts b/src/controllers/rest/response/handlers/validStatusCode.ts index 14f986002..a8e0340da 100644 --- a/src/controllers/rest/response/handlers/validStatusCode.ts +++ b/src/controllers/rest/response/handlers/validStatusCode.ts @@ -16,10 +16,10 @@ export default function validStatusCode ( const disallowedStatusCodes = responseOptions.disallowedStatusCodes || []; const isAllowed = allowedStatusCodes.some( - statusCode => responseData.statusCode === statusCode + (statusCode) => responseData.statusCode === statusCode ); const isDisallowed = disallowedStatusCodes.some( - statusCode => responseData.statusCode === statusCode + (statusCode) => responseData.statusCode === statusCode ); if (allowedStatusCodes.length > 0) { diff --git a/src/controllers/rest/response/handlers/validStatusMessage.ts b/src/controllers/rest/response/handlers/validStatusMessage.ts index 25c90b5af..f41878547 100644 --- a/src/controllers/rest/response/handlers/validStatusMessage.ts +++ b/src/controllers/rest/response/handlers/validStatusMessage.ts @@ -16,10 +16,10 @@ export default function validStatusMessage ( const disallowedStatusMessages = responseOptions.disallowedStatusMessages || []; - const isAllowed = allowedStatusMessages.some(statusMessage => + const isAllowed = allowedStatusMessages.some((statusMessage) => responseData.statusMessage.toLowerCase().includes(statusMessage) ); - const isDisallowed = disallowedStatusMessages.some(statusMessage => + const isDisallowed = disallowedStatusMessages.some((statusMessage) => responseData.statusMessage.toLowerCase().includes(statusMessage) ); diff --git a/src/structures/Asset.ts b/src/structures/Asset.ts index f7f7d943a..46c060f21 100644 --- a/src/structures/Asset.ts +++ b/src/structures/Asset.ts @@ -124,7 +124,7 @@ export class Bundle { this.name = data.name; this.description = data.description; this.bundleType = data.bundleType; - this.items = data.items.map(itemData => ({ + this.items = data.items.map((itemData) => ({ owned: itemData.owned, id: itemData.id, name: itemData.name, @@ -401,7 +401,7 @@ export class Trade { this.created = new Date(data.created); this.active = data.isActive; this.status = data.status; - this.offers = data.offers.map(offerData => ({ + this.offers = data.offers.map((offerData) => ({ robux: offerData.robux, user: new structures.PartialUser( { @@ -411,7 +411,7 @@ export class Trade { client ), assets: offerData.userAssets.map( - assetData => new CollectibleAsset(assetData, client) + (assetData) => new CollectibleAsset(assetData, client) ) })); } diff --git a/src/structures/Chat.ts b/src/structures/Chat.ts index c7abfe7e4..6b100c602 100644 --- a/src/structures/Chat.ts +++ b/src/structures/Chat.ts @@ -77,7 +77,7 @@ export class ChatConversation { ); this.hasUnreadMessages = data.hasUnreadMessages; this.members = data.participants.map( - participantData => + (participantData) => new structures.PartialUser( { id: participantData.targetId, diff --git a/src/structures/Game.ts b/src/structures/Game.ts index c68ad4590..a940cd9bf 100644 --- a/src/structures/Game.ts +++ b/src/structures/Game.ts @@ -502,7 +502,7 @@ export class VIPServer { enemyClanId: data.permissions.enemyClanId, friendsAllowed: data.permissions.friendsAllowed, users: data.permissions.users.map( - userData => new structures.PartialUser(userData, client) + (userData) => new structures.PartialUser(userData, client) ) }; } diff --git a/src/structures/Group.ts b/src/structures/Group.ts index c7ae1e943..0a1237d06 100644 --- a/src/structures/Group.ts +++ b/src/structures/Group.ts @@ -123,7 +123,7 @@ export class GroupBase { ...options, groupId: this.id }) - .then(response => { + .then((response) => { const CursorPageClass = require("./Asset").CursorPage; const structures = retrieveStructures(); @@ -133,7 +133,7 @@ export class GroupBase { { ...response, data: response.data.map( - universeData => + (universeData) => new structures.PartialGameUniverse( { id: universeData.id, @@ -160,7 +160,7 @@ export class GroupBase { canSelfManage (): Promise { return this.client.apis.developAPI .getSelfManageableGroups() - .then(response => !!response.data.find(data => data.id === this.id)); + .then((response) => !!response.data.find((data) => data.id === this.id)); } /** @@ -172,7 +172,7 @@ export class GroupBase { .getGroupCurrency({ groupId: this.id }) - .then(response => response.robux); + .then((response) => response.robux); } getRevenueSummaryInTimeFrame ( @@ -204,11 +204,11 @@ export class GroupBase { maxRows: maxItems, startRowIndex: startItem }) - .then(response => ({ + .then((response) => ({ ...response, relationshipType: "allies", groups: response.relatedGroups.map( - groupData => new Group(groupData, this.client) + (groupData) => new Group(groupData, this.client) ) })); } @@ -224,11 +224,11 @@ export class GroupBase { maxRows: maxItems, startRowIndex: startItem }) - .then(response => ({ + .then((response) => ({ ...response, relationshipType: "enemies", groups: response.relatedGroups.map( - groupData => new Group(groupData, this.client) + (groupData) => new Group(groupData, this.client) ) })); } @@ -242,9 +242,9 @@ export class GroupBase { .getUserGroups({ userId }) - .then(response => { + .then((response) => { const foundGroup = response.data.find( - groupData => groupData.group.id === this.id + (groupData) => groupData.group.id === this.id ); if (foundGroup) { @@ -324,7 +324,7 @@ export class GroupBase { ...options }) .then( - response => + (response) => new CursorPageClass( this.client, options, @@ -375,9 +375,9 @@ export class GroupBase { .getGroupRoles({ groupId: this.id }) - .then(response => + .then((response) => response.roles.map( - roleData => + (roleData) => new GroupRole( { group: { @@ -403,7 +403,7 @@ export class GroupBase { ...options }) .then( - response => + (response) => new CursorPageClass( this.client, options, @@ -424,7 +424,7 @@ export class GroupBase { ...options }) .then( - response => + (response) => new CursorPageClass(this.client, options, response, this.getMembers) ); } @@ -441,8 +441,8 @@ export class GroupBase { return this.client.apis.groupsAPI .getSelfPendingGroupJoins() .then( - response => - (response.data.find(groupData => groupData.id === this.id) && + (response) => + (response.data.find((groupData) => groupData.id === this.id) && true) || false ); @@ -648,7 +648,7 @@ export class GroupBase { ...options }) .then( - response => + (response) => new CursorPageClass(this.client, options, response, this.getWallPosts) ); } @@ -676,7 +676,7 @@ export class GroupBase { userId }) // eslint-disable-next-line @typescript-eslint/no-use-before-define - .then(response => + .then((response) => response && response.group && response.role ? new GroupMember( { diff --git a/src/structures/User.ts b/src/structures/User.ts index 7bee3d361..80a9cec73 100644 --- a/src/structures/User.ts +++ b/src/structures/User.ts @@ -109,7 +109,7 @@ export class UserBase { .getUserStatus({ userId: this.id }) - .then(response => response.status); + .then((response) => response.status); } getAvatar (): Promise { @@ -144,7 +144,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, options || {}, @@ -162,8 +162,8 @@ export class UserBase { badgeIds: badges, userId: this.id }) - .then(response => - response.data.map(badgeAwarded => ({ + .then((response) => + response.data.map((badgeAwarded) => ({ id: badgeAwarded.badgeId, awardedAt: new Date(badgeAwarded.awardedDate) })) @@ -188,7 +188,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, options || {}, @@ -211,7 +211,7 @@ export class UserBase { bundleType }) .then( - response => + (response) => new CursorPageClass( this.client, options || {}, @@ -250,7 +250,7 @@ export class UserBase { .getUsersTags({ targetUserIds: [this.id] }) - .then(response => response[0]); + .then((response) => response[0]); } setPendingTag (tag: string): Promise { @@ -296,7 +296,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, options || {}, @@ -311,7 +311,7 @@ export class UserBase { .getUserFollowersCount({ userId: this.id }) - .then(response => response.count); + .then((response) => response.count); } getFollowing ( @@ -325,7 +325,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, options || {}, @@ -340,7 +340,7 @@ export class UserBase { .getUserFollowingCount({ userId: this.id }) - .then(response => response.count); + .then((response) => response.count); } getFriends (): Promise { @@ -348,9 +348,9 @@ export class UserBase { .getUserFriends({ userId: this.id }) - .then(response => + .then((response) => response.data.map( - friendRequest => new FriendRequest(friendRequest, this.client) + (friendRequest) => new FriendRequest(friendRequest, this.client) ) ); } @@ -360,7 +360,7 @@ export class UserBase { .getUserFriendsCount({ userId: this.id }) - .then(data => data.count); + .then((data) => data.count); } getFriendsWithStatuses ( @@ -414,7 +414,7 @@ export class UserBase { .canSelfInviteUserToVIPServer({ userId: this.id }) - .then(response => response.canInvite); + .then((response) => response.canInvite); } awardBadge (badgeId: number, placeId: number): Promise { @@ -424,7 +424,7 @@ export class UserBase { placeId, userId: this.id }) - .then(response => response as unknown as string); + .then((response) => response as unknown as string); } isFollowedByUser (userId: number): Promise { @@ -550,7 +550,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, options || {}, @@ -573,7 +573,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, {}, @@ -594,7 +594,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass(this.client, options, response, this.getInventory) ); } @@ -610,7 +610,7 @@ export class UserBase { userId: this.id }) .then( - response => + (response) => new CursorPageClass( this.client, options, @@ -644,7 +644,7 @@ export class UserBase { .getUsersPresences({ userIds: [this.id] }) - .then(response => response.userPresences[0]); + .then((response) => response.userPresences[0]); } sendMessage ( @@ -664,7 +664,7 @@ export class UserBase { ...options, userIds: [this.id] }) - .then(response => response.data[0]); + .then((response) => response.data[0]); } getAvatarBustImage ( @@ -675,7 +675,7 @@ export class UserBase { ...options, userIds: [this.id] }) - .then(response => response.data[0]); + .then((response) => response.data[0]); } getAvatarHeadShotImage ( @@ -686,7 +686,7 @@ export class UserBase { ...options, userIds: [this.id] }) - .then(response => response.data[0]); + .then((response) => response.data[0]); } getCanTrade (): Promise { @@ -694,14 +694,14 @@ export class UserBase { .canTradeWith({ userId: this.id }) - .then(response => response.canTrade); + .then((response) => response.canTrade); } sendTrade ( offers: Omit[] ): Promise { return this.client.apis.tradesAPI.sendTrade({ - offers: offers.map(offerData => ({ + offers: offers.map((offerData) => ({ userId: this.id, robux: offerData.robux, userAssetIds: offerData.userAssetIds diff --git a/src/util/errors/errors.ts b/src/util/errors/errors.ts index dbb621554..c306c4f02 100644 --- a/src/util/errors/errors.ts +++ b/src/util/errors/errors.ts @@ -25,7 +25,7 @@ export class BloxyHttpError extends Error { }, status message: ${options.statusMessage}. ${ options.possibleReasons.length > 0 ? `Possible reasons:\n${options.possibleReasons - .map(r => `- ${r}`) + .map((r) => `- ${r}`) .join("\n")}\n\n` : "" }`; From 8e3a4c76fdee546ab75545b79ebc874340d3aa16 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 02:15:29 +0100 Subject: [PATCH 12/24] Update `typescript` devDependency, remove `jest` devDependency --- package-lock.json | 21901 ++++++++++++++++++-------------------------- package.json | 3 +- 2 files changed, 8888 insertions(+), 13016 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7468f162d..4c74220bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13065 +1,8938 @@ { - "name": "bloxy", - "version": "6.0.0-alpha", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "bloxy", - "version": "6.0.0-alpha", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.1", - "got": "^11.8.3", - "signalr-client": "0.0.20", - "tough-cookie": "^4.0.0", - "tslib": "^2.1.0" - }, - "devDependencies": { - "@types/chai": "^4.3.0", - "@types/debug": "^4.1.5", - "@types/lodash": "^4.14.167", - "@types/mocha": "^9.0.0", - "@types/node": "^16.11.19", - "@types/tough-cookie": "^4.0.0", - "@types/websocket": "^1.0.1", - "@typescript-eslint/eslint-plugin": "^5.9.0", - "@typescript-eslint/parser": "^5.9.0", - "chai": "^4.3.4", - "codacy-coverage": "^3.4.0", - "eslint": "^8.6.0", - "eslint-plugin-security": "^1.4.0", - "faker": "^5.1.0", - "fast-check": "^2.13.0", - "jest": "^27.4.7", - "joi": "^17.3.0", - "mocha": "^9.1.3", - "nyc": "^15.1.0", - "ts-node": "^10.4.0", - "typedoc": "^0.22.10", - "typedoc-plugin-markdown": "^3.5.0", - "typedoc-plugin-markdown-pages": "^0.3.0", - "typescript": "^4.1.3" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", - "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", - "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.6", - "@jest/reporters": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.7", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-resolve-dependencies": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "jest-watcher": "^27.4.6", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", - "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", - "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", - "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/types": "^27.4.2", - "expect": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", - "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", - "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", - "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-runtime": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", - "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", - "dev": true - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" - }, - "node_modules/@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", - "dev": true - }, - "node_modules/@types/websocket": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", - "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", - "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.9.0", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/type-utils": "5.9.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", - "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", - "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", - "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.9.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.9.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", - "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/codacy-coverage": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", - "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", - "deprecated": "Package being deprecated in favor of https://github.com/codacy/codacy-coverage-reporter", - "dev": true, - "dependencies": { - "bluebird": "^3.5.x", - "commander": "^2.x", - "jacoco-parse": "^2.x", - "joi": "^13.x", - "lcov-parse": "^1.x", - "lodash": "^4.17.4", - "log-driver": "^1.x", - "request": "^2.88.0", - "request-promise": "^4.x" - }, - "bin": { - "codacy-coverage": "bin/codacy-coverage.js" - }, - "engines": { - "node": ">= 8.12.0" - } - }, - "node_modules/codacy-coverage/node_modules/joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "dependencies": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "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", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", - "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "dependencies": { - "safe-regex": "^1.1.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", - "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", - "dev": true - }, - "node_modules/fast-check": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", - "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", - "dev": true, - "dependencies": { - "pure-rand": "^5.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "dependencies": { - "punycode": "2.x.x" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jacoco-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", - "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", - "dev": true, - "dependencies": { - "mocha": "^5.2.0", - "xml2js": "^0.4.9" - } - }, - "node_modules/jacoco-parse/node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "node_modules/jacoco-parse/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/jacoco-parse/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/jacoco-parse/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/jacoco-parse/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jacoco-parse/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/jacoco-parse/node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/jacoco-parse/node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/jacoco-parse/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/jacoco-parse/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", - "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.4.7", - "import-local": "^3.0.2", - "jest-cli": "^27.4.7" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", - "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", - "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", - "dev": true, - "dependencies": { - "@jest/core": "^27.4.7", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.7", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", - "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.4.6", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.6", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.6", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", - "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", - "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", - "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", - "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", - "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", - "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", - "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", - "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", - "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", - "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", - "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", - "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", - "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", - "dev": true, - "dependencies": { - "@jest/console": "^27.4.6", - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-haste-map": "^27.4.6", - "jest-leak-detector": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", - "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/globals": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", - "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.4.6", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", - "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "leven": "^3.1.0", - "pretty-format": "^27.4.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", - "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.4.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true, - "bin": { - "lcov-parse": "bin/cli.js" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true, - "engines": { - "node": ">=0.8.6" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marked": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", - "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "node_modules/mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nyc/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-format": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", - "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", - "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", - "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/signalr-client": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", - "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", - "deprecated": "This is no longer active", - "dependencies": { - "websocket": "^1.0.28" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dev": true, - "dependencies": { - "hoek": "6.x.x" - } - }, - "node_modules/topo/node_modules/hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dev": true - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typedoc": { - "version": "0.22.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", - "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", - "dev": true, - "dependencies": { - "glob": "^7.2.0", - "lunr": "^2.3.9", - "marked": "^3.0.8", - "minimatch": "^3.0.4", - "shiki": "^0.9.12" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 12.10.0" - }, - "peerDependencies": { - "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x" - } - }, - "node_modules/typedoc-plugin-markdown": { - "version": "3.11.9", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", - "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", - "dev": true, - "dependencies": { - "handlebars": "^4.7.7" - }, - "peerDependencies": { - "typedoc": ">=0.22.0" - } - }, - "node_modules/typedoc-plugin-markdown-pages": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", - "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", - "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vscode-oniguruma": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", - "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "node_modules/workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "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": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true - }, - "@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", - "dev": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", - "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", - "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", - "dev": true, - "requires": { - "@jest/console": "^27.4.6", - "@jest/reporters": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.7", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-resolve-dependencies": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "jest-watcher": "^27.4.6", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", - "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6" - } - }, - "@jest/fake-timers": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", - "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - } - }, - "@jest/globals": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", - "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/types": "^27.4.2", - "expect": "^27.4.6" - } - }, - "@jest/reporters": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", - "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - } - }, - "@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", - "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", - "dev": true, - "requires": { - "@jest/console": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", - "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-runtime": "^27.4.6" - } - }, - "@jest/transform": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", - "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "dev": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", - "dev": true - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", - "dev": true - }, - "@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "dev": true - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "@types/node": { - "version": "16.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" - }, - "@types/prettier": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", - "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/tough-cookie": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", - "dev": true - }, - "@types/websocket": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", - "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", - "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.9.0", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/type-utils": "5.9.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", - "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", - "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.9.0", - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/typescript-estree": "5.9.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", - "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", - "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.9.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", - "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", - "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.0", - "@typescript-eslint/visitor-keys": "5.9.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", - "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.9.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-jest": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", - "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", - "dev": true, - "requires": { - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.4.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.4.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001296", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", - "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "codacy-coverage": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", - "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.x", - "commander": "^2.x", - "jacoco-parse": "^2.x", - "joi": "^13.x", - "lcov-parse": "^1.x", - "lodash": "^4.17.4", - "log-driver": "^1.x", - "request": "^2.88.0", - "request-promise": "^4.x" - }, - "dependencies": { - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "dev": true, - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - } - } - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.4.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", - "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "requires": { - "safe-regex": "^1.1.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true - }, - "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", - "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", - "dev": true - }, - "fast-check": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", - "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", - "dev": true, - "requires": { - "pure-rand": "^5.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jacoco-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", - "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", - "dev": true, - "requires": { - "mocha": "^5.2.0", - "xml2js": "^0.4.9" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", - "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", - "dev": true, - "requires": { - "@jest/core": "^27.4.7", - "import-local": "^3.0.2", - "jest-cli": "^27.4.7" - } - }, - "jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", - "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-cli": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", - "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", - "dev": true, - "requires": { - "@jest/core": "^27.4.7", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.7", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "jest-config": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", - "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.4.6", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.6", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.6", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0" - } - }, - "jest-diff": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", - "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - } - }, - "jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", - "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6" - } - }, - "jest-environment-jsdom": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", - "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", - "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" - } - }, - "jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true - }, - "jest-haste-map": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", - "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", - "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.4.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", - "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", - "dev": true, - "requires": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - } - }, - "jest-matcher-utils": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", - "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" - } - }, - "jest-message-util": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", - "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", - "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", - "dev": true - }, - "jest-resolve": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", - "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", - "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.6" - } - }, - "jest-runner": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", - "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", - "dev": true, - "requires": { - "@jest/console": "^27.4.6", - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-haste-map": "^27.4.6", - "jest-leak-detector": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", - "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/globals": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", - "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.4.6", - "semver": "^7.3.2" - } - }, - "jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", - "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", - "dev": true, - "requires": { - "@jest/types": "^27.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "leven": "^3.1.0", - "pretty-format": "^27.4.6" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", - "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.4.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", - "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "marked": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", - "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-format": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", - "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pure-rand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", - "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "requires": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, + "name": "bloxy", + "version": "6.0.0-alpha", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "bloxy", + "version": "6.0.0-alpha", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "got": "^11.8.3", + "signalr-client": "0.0.20", + "tough-cookie": "^4.0.0", + "tslib": "^2.1.0" + }, + "devDependencies": { + "@types/chai": "^4.3.0", + "@types/debug": "^4.1.5", + "@types/lodash": "^4.14.167", + "@types/mocha": "^9.0.0", + "@types/node": "^16.11.19", + "@types/tough-cookie": "^4.0.0", + "@types/websocket": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "chai": "^4.3.4", + "codacy-coverage": "^3.4.0", + "eslint": "^8.6.0", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "fast-check": "^2.13.0", + "joi": "^17.3.0", + "mocha": "^9.1.3", + "nyc": "^15.1.0", + "ts-node": "^10.4.0", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.5.0", + "typedoc-plugin-markdown-pages": "^0.3.0", + "typescript": "^4.5.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", + "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/codacy-coverage": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", + "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", + "deprecated": "Package being deprecated in favor of https://github.com/codacy/codacy-coverage-reporter", + "dev": true, + "dependencies": { + "bluebird": "^3.5.x", + "commander": "^2.x", + "jacoco-parse": "^2.x", + "joi": "^13.x", + "lcov-parse": "^1.x", + "lodash": "^4.17.4", + "log-driver": "^1.x", + "request": "^2.88.0", + "request-promise": "^4.x" + }, + "bin": { + "codacy-coverage": "bin/codacy-coverage.js" + }, + "engines": { + "node": ">= 8.12.0" + } + }, + "node_modules/codacy-coverage/node_modules/joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "dependencies": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "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", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-security": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", + "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "dev": true, + "dependencies": { + "safe-regex": "^1.1.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "node_modules/fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "dependencies": { + "pure-rand": "^5.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "11.8.3", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", + "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dev": true, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "dependencies": { + "punycode": "2.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jacoco-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", + "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", + "dev": true, + "dependencies": { + "mocha": "^5.2.0", + "xml2js": "^0.4.9" + } + }, + "node_modules/jacoco-parse/node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "node_modules/jacoco-parse/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/jacoco-parse/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/jacoco-parse/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/jacoco-parse/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jacoco-parse/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jacoco-parse/node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/jacoco-parse/node_modules/mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "dependencies": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jacoco-parse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/jacoco-parse/node_modules/supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true, + "bin": { + "lcov-parse": "bin/cli.js" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true, + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/marked": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "node_modules/mocha": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/signalr-client": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", + "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", + "deprecated": "This is no longer active", + "dependencies": { + "websocket": "^1.0.28" + }, + "engines": { + "node": "*" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dev": true, + "dependencies": { + "hoek": "6.x.x" + } + }, + "node_modules/topo/node_modules/hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", + "dev": true, + "dependencies": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.22.0" + } + }, + "node_modules/typedoc-plugin-markdown-pages": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", + "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shiki": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", - "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", - "dev": true, - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "signalr-client": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", - "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", - "requires": { - "websocket": "^1.0.28" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", + "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "dev": true - } - } + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", + "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "dev": true + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", + "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", + "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/node": { + "version": "16.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, + "@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true + }, + "@types/websocket": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", + "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz", + "integrity": "sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.0", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/type-utils": "5.9.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz", + "integrity": "sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.0.tgz", + "integrity": "sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.9.0", + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/typescript-estree": "5.9.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz", + "integrity": "sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz", + "integrity": "sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.0.tgz", + "integrity": "sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz", + "integrity": "sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "@typescript-eslint/visitor-keys": "5.9.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz", + "integrity": "sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001296", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz", + "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "codacy-coverage": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", + "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.x", + "commander": "^2.x", + "jacoco-parse": "^2.x", + "joi": "^13.x", + "lcov-parse": "^1.x", + "lodash": "^4.17.4", + "log-driver": "^1.x", + "request": "^2.88.0", + "request-promise": "^4.x" + }, + "dependencies": { + "joi": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "dev": true, + "requires": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz", + "integrity": "sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-plugin-security": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", + "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "dev": true, + "requires": { + "safe-regex": "^1.1.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "requires": { + "pure-rand": "^5.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "got": { + "version": "11.8.3", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", + "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typedoc": { - "version": "0.22.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", - "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", - "dev": true, - "requires": { - "glob": "^7.2.0", - "lunr": "^2.3.9", - "marked": "^3.0.8", - "minimatch": "^3.0.4", - "shiki": "^0.9.12" - } - }, - "typedoc-plugin-markdown": { - "version": "3.11.9", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", - "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", - "dev": true, - "requires": { - "handlebars": "^4.7.7" - } - }, - "typedoc-plugin-markdown-pages": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", - "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", - "dev": true - }, - "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", - "dev": true - }, - "uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", - "dev": true, - "optional": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "requires": { + "punycode": "2.x.x" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jacoco-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.1.tgz", + "integrity": "sha512-YGhIb2iXuQ4/zNh2zgHd6Z6dqlYwLYH1wfsxtTNQ+jnHH9PhhuMwqOFihXymSI41trxok48LdKkSeDIWs28tYg==", + "dev": true, + "requires": { + "mocha": "^5.2.0", + "xml2js": "^0.4.9" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "utf-8-validate": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", - "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", - "requires": { - "node-gyp-build": "^4.3.0" - } + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true }, - "vscode-oniguruma": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", - "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", - "dev": true + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + } }, - "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "marked": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "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": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "signalr-client": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", + "integrity": "sha512-4gscZW3jcrbwXb2dZJL0N40qHQyK08ejH6JYE35nNm+aM2eUu56vKtcEq44zTGIdwoRGJ/SO4TO3nwfZ0LFj3A==", + "requires": { + "websocket": "^1.0.28" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "dev": true, + "requires": { + "hoek": "6.x.x" + }, + "dependencies": { + "hoek": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", + "dev": true + } + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typedoc": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", + "dev": true, + "requires": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" + } + }, + "typedoc-plugin-markdown": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typedoc-plugin-markdown-pages": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown-pages/-/typedoc-plugin-markdown-pages-0.3.0.tgz", + "integrity": "sha512-QVWs6eL0BEOiRgJm6wRRgE8kESFv85HlefLv14ZbMM2VQ1HqErVeT9ukbhkYMznsD/juAsX3Xc5M+Ju7/ZDq4Q==", + "dev": true + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true + }, + "uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "optional": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } + } } diff --git a/package.json b/package.json index 4131c200f..78303ea5a 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ "eslint-plugin-security": "^1.4.0", "faker": "^5.1.0", "fast-check": "^2.13.0", - "jest": "^27.4.7", "joi": "^17.3.0", "mocha": "^9.1.3", "nyc": "^15.1.0", @@ -63,7 +62,7 @@ "typedoc": "^0.22.10", "typedoc-plugin-markdown": "^3.5.0", "typedoc-plugin-markdown-pages": "^0.3.0", - "typescript": "^4.1.3" + "typescript": "^4.5.4" }, "dependencies": { "debug": "^4.3.1", From 67e09aec5433b0997561348dd7df2d61cc948095 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 06:19:13 +0100 Subject: [PATCH 13/24] Update the first few APIs to a newer state --- .eslintrc.json | 4 +- .vscode/settings.json | 4 + src/client/apis/AccountInformationAPI.ts | 252 ++++++-------- src/client/apis/AccountSettingsAPI.ts | 401 +++++------------------ src/client/apis/AdConfigurationAPI.ts | 163 ++++----- src/client/apis/AdsAPI.ts | 84 ----- src/interfaces/RESTInterfaces.ts | 2 +- src/types/GeneralTypes.ts | 8 + 8 files changed, 291 insertions(+), 627 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 src/client/apis/AdsAPI.ts create mode 100644 src/types/GeneralTypes.ts diff --git a/.eslintrc.json b/.eslintrc.json index aaeb00bae..7530a4fc9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,7 +24,7 @@ "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/indent": ["error", 2], + "@typescript-eslint/indent": "off", "no-await-in-loop": "warn", "no-compare-neg-zero": "error", "no-template-curly-in-string": "error", @@ -56,7 +56,7 @@ "no-useless-escape": "error", "no-useless-return": "error", "no-void": "error", - "no-warning-comments": "warn", + "no-warning-comments": "off", "prefer-promise-reject-errors": "error", "require-await": "warn", "yoda": "error", diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..a9bca6dbc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.autoClosingTags": false, + "javascript.autoClosingTags": false +} diff --git a/src/client/apis/AccountInformationAPI.ts b/src/client/apis/AccountInformationAPI.ts index 0c8fcd40d..16313964e 100644 --- a/src/client/apis/AccountInformationAPI.ts +++ b/src/client/apis/AccountInformationAPI.ts @@ -1,97 +1,88 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +import { Privacy } from "../../types/GeneralTypes"; -export declare type UpdateUserBirthdateOptions = GetUserBirthdate; -export declare type UpdateUserDescriptionOptions = { - description: string; -}; -export declare type UpdateUserGenderOptions = { - gender: number; -}; -export declare type SetPhoneNumberOptions = { - countryCode: string; - prefix: string; - phone: string; - password: string; -}; -export declare type DeletePhoneOptions = SetPhoneNumberOptions; -export declare type ResendPhoneCodeOptions = SetPhoneNumberOptions; -export declare type VerifyPhoneOptions = SetPhoneNumberOptions; -export declare type AddStarCodeAffiliateOptions = { - code: string; -}; -export declare type UpdateUserPromotionChannelsOptions = { - facebook: string; - twitter: string; - youtube: string; - twitch: string; - promotionChannelsVisibilityPrivacy: string; -}; - -export declare type GetUserBirthdate = { - birthMonth: number; +// AccountInformation +export declare interface UserAccountBirthdate { birthDay: number; + birthMonth: number; birthYear: number; -}; -export declare type UpdateUserBirthdate = boolean; -export declare type GetUserDescription = { +} +export declare interface UserAccountDescription { description: string; -}; -export declare type UpdateUserDescription = boolean; -export declare type GetUserGender = { +} +export declare interface UserAccountGender { gender: number; -}; -export declare type UpdateUserGender = unknown; -export declare type GetConsecutiveXboxLoginDays = { +} +export declare interface UserAccountXboxConsecutiveLoginDays { count: number; -}; -export declare type GetMetaData = { +} + +// Metadata +export declare interface UserAccountMetaData { isAllowedNotificationsEndpointDisabled: boolean; isAccountSettingsPolicyEnabled: boolean; isPhoneNumberEnabled: boolean; -}; -export declare type GetVerifiedPhoneNumber = SetPhoneNumberOptions; -export declare type SetPhoneNumber = unknown; -export declare type DeletePhone = unknown; -export declare type ResendPhoneCode = unknown; -export declare type VerifyPhone = unknown; -export declare type GetSelfPromotionChannels = - UpdateUserPromotionChannelsOptions; -export declare type GetUserPromotionChannelsOptions = { userId: number }; -export declare type GetUserPromotionChannels = Omit< -GetSelfPromotionChannels, -"promotionChannelsVisibilityPrivacy" + MaxUserDescriptionLength: number; + isUserDescriptionEnabled: boolean; + isUserBlockEndpointsUpdated: boolean; + isIDVerificationEnabled: boolean; + isPasswordRequiredForAgingDown: boolean; + homePageUpsellCardVariation: string; +} + +// PromotionChannel +export declare interface UserAccountOwnPromotionChannels { + promotionChannelsVisibilityPrivacy: Privacy; + facebook: string; + twitter: string; + youtube: string; + twitch: string; + guilded: string; +} +export declare type UserAccountPromotionChannels = Omit< + UserAccountOwnPromotionChannels, + "promotionChannelsVisibilityPrivacy" >; -export declare type UpdateUserPromotionChannels = unknown; -export declare type RemoveStarCodeAffiliate = unknown; -export declare type GetStarCodeAffiliate = { + +// StarCodeAffiliate +export declare interface UserAccountStarCodeAffiliate { userId: number; name: string; code: string; -}; -export declare type AddStarCodeAffiliate = GetStarCodeAffiliate; +} +export declare interface UserAccountSetStarCodeAffiliate { + code: string; +} + +// RobloxBadges +export declare interface UserAccountRobloxBadge { + id: number; + name: string; + description: string; + imageUrl: string; +} +export declare type UserAccountRobloxBadges = UserAccountRobloxBadge[]; export default class AccountInformationAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ baseUrl: "https://accountinformation.roblox.com/", client }); } - getUserBirthdate (): Promise { + getUserBirthdate(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/birthdate" }, json: true - }).then((response) => response.body as GetUserBirthdate); + }).then((response) => response.body); } - updateUserBirthdate ( - options: UpdateUserBirthdateOptions - ): Promise { + updateUserBirthdate(options: UserAccountBirthdate): Promise { return this.request({ requiresAuth: true, request: { @@ -100,22 +91,20 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then(() => true as UpdateUserBirthdate); + }).then(() => true); } - getUserDescription (): Promise { + getUserDescription(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/description" }, json: true - }).then((response) => response.body as GetUserDescription); + }).then((response) => response.body); } - updateUserDescription ( - options: UpdateUserDescriptionOptions - ): Promise { + updateUserDescription(options: UserAccountDescription): Promise { return this.request({ requiresAuth: true, request: { @@ -124,22 +113,20 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then(() => true as UpdateUserDescription); + }).then(() => true); } - getUserGender (): Promise { + getUserGender(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/gender" }, json: true - }).then((response) => response.body as GetUserGender); + }).then((response) => response.body); } - updateUserGender ( - options: UpdateUserGenderOptions - ): Promise { + updateUserGender(options: UserAccountGender): Promise { return this.request({ requiresAuth: true, request: { @@ -148,100 +135,42 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then(() => true as UpdateUserGender); + }).then(() => true); } - getConsecutiveXboxLoginDays (): Promise { + getConsecutiveXboxLoginDays(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/xbox-live/consecutive-login-days" }, json: true - }).then((response) => response.body as GetConsecutiveXboxLoginDays); + }).then((response) => response.body); } - getMetaData () { + getMetaData(): Promise { return this.request({ requiresAuth: false, request: { path: "v1/metadata" }, json: true - }).then((response) => response.body as GetMetaData); - } - - getVerifiedPhoneNumber (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone" - }, - json: true - }).then((response) => response.body as GetVerifiedPhoneNumber); - } - - setPhoneNumber (options: SetPhoneNumberOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone", - method: "POST", - json: options - }, - json: true - }).then(() => true as SetPhoneNumber); - } - - deletePhone (options: DeletePhoneOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone/delete", - method: "POST", - json: options - }, - json: true - }).then(() => true as DeletePhone); - } - - resendPhoneCode (options: ResendPhoneCodeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone/resend", - method: "POST", - json: options - }, - json: true - }).then(() => true as ResendPhoneCode); - } - - verifyPhone (options: VerifyPhoneOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/phone/verify", - method: "POST", - json: options - }, - json: true - }).then(() => true as VerifyPhone); + }).then((response) => response.body); } - getSelfPromotionChannels (): Promise { + getSelfPromotionChannels(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/promotion-channels" }, json: true - }).then((response) => response.body as GetSelfPromotionChannels); + }).then((response) => response.body); } - getUserPromotionChannels ( - options: GetUserPromotionChannelsOptions - ): Promise { + getUserPromotionChannels(options: { + userId: number; + }): Promise { return this.request({ requiresAuth: false, request: { @@ -251,9 +180,9 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - updateUserPromotionChannels ( - options: UpdateUserPromotionChannelsOptions - ): Promise { + updateUserPromotionChannels( + options: UserAccountOwnPromotionChannels + ): Promise { return this.request({ requiresAuth: true, request: { @@ -262,10 +191,10 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then((response) => response.body as UpdateUserPromotionChannels); + }).then(() => true); } - removeStarCodeAffiliate (): Promise { + removeStarCodeAffiliate(): Promise { return this.request({ requiresAuth: true, request: { @@ -273,22 +202,22 @@ export default class AccountInformationAPI extends BaseAPI { method: "DELETE" }, json: true - }).then(() => true as RemoveStarCodeAffiliate); + }).then(() => true); } - getStarCodeAffiliate (): Promise { + getStarCodeAffiliate(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/star-code-affiliates" }, json: true - }).then((response) => response.body as GetStarCodeAffiliate); + }).then((response) => response.body); } - addStarCodeAffiliate ( - options: AddStarCodeAffiliateOptions - ): Promise { + addStarCodeAffiliate( + options: UserAccountSetStarCodeAffiliate + ): Promise { return this.request({ requiresAuth: true, request: { @@ -297,6 +226,19 @@ export default class AccountInformationAPI extends BaseAPI { json: options }, json: true - }).then((response) => response.body as AddStarCodeAffiliate); + }).then((response) => response.body); + } + + getRobloxBadges(options: { + userId: number; + }): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/roblox-badges`, + method: "GET" + }, + json: true + }).then((response) => response.body); } } diff --git a/src/client/apis/AccountSettingsAPI.ts b/src/client/apis/AccountSettingsAPI.ts index fb841ee37..9608f0ad1 100644 --- a/src/client/apis/AccountSettingsAPI.ts +++ b/src/client/apis/AccountSettingsAPI.ts @@ -1,132 +1,77 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { UpdateUserPromotionChannelsOptions as AccountInformationUpdateUserPromotionChannelsOptions } from "./AccountInformationAPI"; - -export type GetSettingsGroups = { +import { Privacy } from "../../types/GeneralTypes"; + +// Accounts +export interface AccountSettingsMetaData { + isAccountsRestrictionsSpamBugFixEnabled: boolean; + maximumParentalControlsMonthlySpendLimitInUSD: number; + isParentalMonthlyLimitInUIEnabled: boolean; + isParentalNotificationSettingsInUIEnabled: boolean; +} +export interface AccountSettingsGroup { title: string; url: string; suffix: string; -}[]; -export type GetAppChatPrivacy = { - appChatPrivacy: string; -}; -export type UpdateAppChatPrivacyOptions = { - appChatPrivacy: string; -}; -export type UpdateAppChatPrivacy = boolean; -export type GetGameChatPrivacy = { - gameChatPrivacy: string; -}; -export type UpdateGameChatPrivacyOptions = { - gameChatPrivacy: string; -}; -export type UpdateGameChatPrivacy = boolean; -export type GetInventoryPrivacy = { - inventoryPrivacy: string; -}; -export type UpdateInventoryPrivacyOptions = { - inventoryPrivacy: string; -}; -export type UpdateInventoryPrivacy = { - inventoryPrivacy: string; - tradePrivacy: string; - privacySettingResponse: string; -}; -export type GetUserPrivacy = { - phoneDiscovery: string; -}; -export type UpdateUserPrivacyOptions = { - phoneDiscovery: string; -}; -export type UpdateUserPrivacy = { - phoneDiscovery: string; -}; -export type GetUserPrivacySettingsInfo = { +} +export type AccountSettingsGroups = AccountSettingsGroup[]; + +// PrivacySettings +export interface AccountSettingsAppChatPrivacy { + appChatPrivacy: Omit | "All"; +} +export interface AccountSettingsGameChatPrivacy { + gameChatPrivacy: Omit; +} +export interface AccountSettingsInventoryPrivacy { + inventoryPrivacy: Privacy; +} +export interface AccountSettingsPrivacy { + phoneDiscovery: Omit; +} +export interface AccountSettingsPrivacyInfo { isPhoneDiscoveryEnabled: boolean; -}; -export type GetUserPrivateMessagePrivacy = { - privateMessagePrivacy: string; -}; -export type UpdateUserPrivateMessagePrivacyOptions = { - privateMessagePrivacy: string; -}; -export type UpdateUserPrivateMessagePrivacy = boolean; -export type GetUserEmailStatus = { - email: string; - verified: boolean; -}; -export type UpdateUserEmailOptions = { - password: string; - emailAddress: string; -}; -export type UpdateUserEmail = boolean; -export type SendEmailVerification = boolean; -export type GetWebsiteTheme = { - themeType: string; -}; -export type UpdateWebsiteThemeOptions = { - themeType: string; -}; -export type UpdateWebsiteTheme = boolean; -export type GetWebsiteThemes = { - data: string[]; -}; -export type GetUserTradePrivacy = { - tradePrivacy: string; -}; -export type UpdateUserTradePrivacyOptions = { - tradePrivacy: string; -}; -export type UpdateUserTradePrivacy = { - tradePrivacy: string; - inventoryPrivacy: string; - privacySettingResponse: string; -}; -export type GetUserTradeQualityFilter = { - tradeValue: string; -}; -export type UpdateUserTradeQualityFilterOptions = { - tradeValue: string; -}; -export type UpdateUserTradeQualityFilter = boolean; -export type UpdateTwoStepStatusOptions = { - enabled: boolean; - password: string; -}; -export type UpdateTwoStepStatus = { - enabled: boolean; - password: string; -}; -export type GetContactUpsell = { - upsellScreenType: string; -}; -export type UpdateContactUpsellSuppressionOptions = { - suppress: boolean; -}; -export type UpdateContactUpsellSuppression = boolean; -export type GetIsXboxUsernameValidOptions = { - authorization: string; - signature: string; - username: string; -}; -export type GetIsXboxUsernameValid = { - isValid: boolean; - errorMessage?: string; - errorCode?: string; -}; -export type UpdateUserPromotionChannelsOptions = - AccountInformationUpdateUserPromotionChannelsOptions; -export type UpdateUserPromotionChannels = boolean; +} +export interface AccountSettingsPrivateMessagePrivacy { + privateMessagePrivacy: Privacy; +} +export interface AccountSettingsVisibilityPrivacy { + visibilityPrivacy: number; +} + +// BlockUser +export interface AccountSettingsBlockUser { + userId: number; +} export default class AccountSettingsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ baseUrl: "https://accountsettings.roblox.com/", client }); } - getSettingsGroups (): Promise { + getMetaData(): Promise { + return this.request({ + requiresAuth: true, + request: { + path: "v1/account/settings/metadata" + }, + json: true + }).then((response) => ({ + isAccountsRestrictionsSpamBugFixEnabled: + response.body.IsAccountsRestrictionsSpamBugFixEnabled, + isParentalMonthlyLimitInUIEnabled: + response.body.IsParentalMonthlyLimitInUIEnabled, + isParentalNotificationSettingsInUIEnabled: + response.body.IsParentalNotificationSettingsInUIEnabled, + maximumParentalControlsMonthlySpendLimitInUSD: + response.body.MaximumParentalControlsMonthlySpendLimitInUSD + })); + } + + getSettingsGroups(): Promise { return this.request({ requiresAuth: false, request: { @@ -142,7 +87,7 @@ export default class AccountSettingsAPI extends BaseAPI { ); } - getAppChatPrivacy (): Promise { + getAppChatPrivacy(): Promise { return this.request({ requiresAuth: true, request: { @@ -152,9 +97,9 @@ export default class AccountSettingsAPI extends BaseAPI { }).then((response) => response.body); } - updateAppChatPrivacy ( - options: UpdateAppChatPrivacyOptions - ): Promise { + updateAppChatPrivacy( + options: AccountSettingsAppChatPrivacy + ): Promise { return this.request({ requiresAuth: true, request: { @@ -163,10 +108,10 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then((response) => response.body); + }).then(() => true); } - getGameChatPrivacy (): Promise { + getGameChatPrivacy(): Promise { return this.request({ requiresAuth: true, request: { @@ -176,9 +121,9 @@ export default class AccountSettingsAPI extends BaseAPI { }).then((response) => response.body); } - updateGameChatPrivacy ( - options: UpdateGameChatPrivacyOptions - ): Promise { + updateGameChatPrivacy( + options: AccountSettingsGameChatPrivacy + ): Promise { return this.request({ requiresAuth: true, request: { @@ -187,10 +132,10 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then((response) => response.body); + }).then(() => true); } - getInventoryPrivacy (): Promise { + getInventoryPrivacy(): Promise { return this.request({ requiresAuth: true, request: { @@ -200,9 +145,9 @@ export default class AccountSettingsAPI extends BaseAPI { }).then((response) => response.body); } - updateInventoryPrivacy ( - options: UpdateInventoryPrivacyOptions - ): Promise { + updateInventoryPrivacy( + options: AccountSettingsInventoryPrivacy + ): Promise { return this.request({ requiresAuth: true, request: { @@ -211,10 +156,10 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then((response) => response.body); + }).then(() => true); } - getUserPrivacy (): Promise { + getUserPrivacy(): Promise { return this.request({ requiresAuth: true, request: { @@ -224,9 +169,7 @@ export default class AccountSettingsAPI extends BaseAPI { }).then((response) => response.body); } - updateUserPrivacy ( - options: UpdateUserPrivacyOptions - ): Promise { + updateUserPrivacy(options: AccountSettingsPrivacy): Promise { return this.request({ requiresAuth: true, request: { @@ -235,32 +178,32 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then((response) => response.body); + }).then(() => true); } - getUserPrivacySettingsInfo (): Promise { + getUserPrivacySettingsInfo(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/privacy/info" }, json: true - }).then((response) => response.body as GetUserPrivacySettingsInfo); + }).then((response) => response.body); } - getUserPrivateMessagePrivacy (): Promise { + getUserPrivateMessagePrivacy(): Promise { return this.request({ requiresAuth: true, request: { path: "v1/private-message-privacy" }, json: true - }).then((response) => response.body as GetUserPrivateMessagePrivacy); + }).then((response) => response.body); } - updateUserPrivateMessagePrivacy ( - options: UpdateUserPrivateMessagePrivacyOptions - ): Promise { + updateUserPrivateMessagePrivacy( + options: AccountSettingsPrivateMessagePrivacy + ): Promise { return this.request({ requiresAuth: true, request: { @@ -269,190 +212,26 @@ export default class AccountSettingsAPI extends BaseAPI { json: options }, json: true - }).then(() => true as UpdateUserPrivateMessagePrivacy); - } - - getUserEmailStatus (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email" - }, - json: true - }).then((response) => response.body as GetUserEmailStatus); - } - - updateUserEmail (options: UpdateUserEmailOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email", - method: "PATCH", - json: options - }, - json: true }).then(() => true); } - sendEmailVerification (): Promise { + blockUser(options: AccountSettingsBlockUser): Promise { return this.request({ requiresAuth: true, request: { - path: "v1/email/verify", + path: `v1/users/${options.userId}/block`, method: "POST" }, json: true }).then(() => true); } - getWebsiteTheme (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/themes/User/${this.client.user!.id}` - }, - json: true - }).then((response) => response.body as GetWebsiteTheme); - } - - updateWebsiteTheme ( - options: UpdateWebsiteThemeOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/themes/User/${this.client.user!.id}`, - method: "PATCH", - json: { - themeType: options.themeType - } - }, - json: true - }).then(() => true); - } - - getWebsiteThemes (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/themes/types" - }, - json: true - }).then((response) => response.body as GetWebsiteThemes); - } - - getUserTradePrivacy (): Promise { + unblockUser(options: AccountSettingsBlockUser): Promise { return this.request({ requiresAuth: true, request: { - path: "v1/trade-privacy" - }, - json: true - }).then((response) => response.body as GetUserTradePrivacy); - } - - updateUserTradePrivacy ( - options: UpdateUserTradePrivacyOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-privacy", - method: "POST", - json: options - }, - json: true - }).then((response) => response.body as UpdateUserTradePrivacy); - } - - getUserTradeQualityFilter (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-value" - }, - json: true - }).then((response) => response.body as GetUserTradeQualityFilter); - } - - updateUserTradeQualityFilter ( - options: UpdateUserTradeQualityFilterOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/trade-value", - method: "POST", - json: options - }, - json: true - }).then(() => true); - } - - updateTwoStepStatus ( - options: UpdateTwoStepStatusOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/email", - method: "PATCH", - json: options - }, - json: true - }).then((response) => response.body as UpdateTwoStepStatus); - } - - getContactUpsell (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user/screens/contact-upsell" - }, - json: true - }).then((response) => response.body as GetContactUpsell); - } - - updateContactUpsellSuppression ( - options: UpdateContactUpsellSuppressionOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - method: "POST", - path: "v1/user/screens/contact-upsell/suppress", - json: options - }, - json: true - }).then(() => true as UpdateContactUpsellSuppression); - } - - getIsXboxUsernameValid ( - options: GetIsXboxUsernameValidOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/xbox/is-username-valid", - qs: { - Authorization: options.authorization, - signature: options.signature, - "request.username": options.username - } - }, - json: true - }).then((response) => response.body as GetIsXboxUsernameValid); - } - - updateUserPromotionChannels ( - options: UpdateUserPromotionChannelsOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/promotion-channels", - method: "POST", - json: options + path: `v1/users/${options.userId}/unblock`, + method: "POST" }, json: true }).then(() => true); diff --git a/src/client/apis/AdConfigurationAPI.ts b/src/client/apis/AdConfigurationAPI.ts index 69fa3299f..3b6936445 100644 --- a/src/client/apis/AdConfigurationAPI.ts +++ b/src/client/apis/AdConfigurationAPI.ts @@ -1,120 +1,135 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +import { ISOString } from "../../types/GeneralTypes"; -export declare type GetSponsoredGamesOptions = { - groupId?: number; - startRowIndex?: number; - count?: number; -}; +// Utility types +export declare type AdConfigurationTargetGender = unknown; +export declare type AdConfigurationTargetAgeBracket = unknown; +export declare type AdConfigurationTargetDeviceType = unknown; -export declare type CreateAdOptions = unknown; -export declare type RunAdOptions = unknown; -export declare type StopAdOptions = unknown; +// SponsoredGames +export declare interface AdConfigurationSponsoredGame { + adId: number; + adSetId: number; + adName: string; + adStatus: unknown; + creativeType: unknown; + creativeTargetId: number; + creativeUrl: string; + bidAmountInRobux: number; + budgetInRobux: number; + adSetStatus: unknown; + startDate: ISOString; + endDate: ISOString; + targetGender: AdConfigurationTargetGender; + targetAgeBracket: AdConfigurationTargetAgeBracket; + targetDeviceType: AdConfigurationTargetDeviceType; + campaignTargetType: unknown; + campaignTargetId: number; + totalSpendInRobux: number; + totalImpressions: number; + totalClicks: number; + totalConversions: number; + impressionConversions: number; + clickConversions: number; +} +export declare interface AdConfigurationSponsoredGames { + sponsoredGames: AdConfigurationSponsoredGame[]; + previousPageCursor: string; + nextPageCursor: string; +} -export declare type GetCreateAdMetaData = { +export declare interface AdConfigurationUniverse { + id: number; + name: string; +} +export declare interface AdConfigurationUniverses { + universes: AdConfigurationUniverse[]; +} +export declare interface AdConfigurationCreateSponsoredGameAd { universeId: number; - universeCreatorType: string; - universeCreatorTargetId: number; - areNativeAdsForPhoneEnabled: boolean; - areNativeAdsForTabletEnabled: boolean; - areNativeAdsForDesktopEnabled: boolean; - areNativeAdsForConsoleEnabled: boolean; -}; -export declare type GetSponsoredGames = { - sponsoredGames: { - adId: number; - universeName: string; - universeRootPlaceId: number; - targetDeviceType: string; - totalBid: number; - totalImpressions: number; - totalClicks: number; - campaign: { - bid: number; - clicks: number; - impressions: 0; - isRunning: boolean; - }; - gameIconUrl: string; - costPerImpressionEstimate: number; - }; - nextPageStartRowIndex: number; - creatorType: "User" | "Group"; - isErroneous: boolean; - minimumBidAmount: number; -}; -export declare type CreateAd = unknown; -export declare type RunAd = unknown; -export declare type StopAd = unknown; + targetGender: AdConfigurationTargetGender; + targetAgeBracket: AdConfigurationTargetAgeBracket; + targetDeviceType: AdConfigurationTargetDeviceType; + budgetInRobux: number; + startDate: ISOString; + endDate: ISOString; + adName: string; + bidAmountInRobux: number; +} +export declare interface AdConfigurationStopSponsoredGameAd { + adSetId: number; +} export default class AdConfigurationAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ baseUrl: "https://adconfiguration.roblox.com/", client }); } - getCreateAdMetaData (): Promise { - return this.request({ - requiresAuth: false, - request: { - path: "/v1/sponsored-games/create-ad/metadata" - }, - json: true - }).then((response) => response.body as GetCreateAdMetaData); - } - - getSponsoredGames ( - options: GetSponsoredGamesOptions - ): Promise { + getSponsoredGames(options: { + universeId: number; + includeReportingStats?: boolean; + isArchived?: boolean; + pageCursor?: string; + }): Promise { return this.request({ requiresAuth: true, request: { - path: "/v1/sponsored-games/sponsored-games", + url: "v2/sponsored-games", + method: "GET", qs: { - groupId: options.groupId || null, - startRowIndex: options.startRowIndex || 0, - count: options.count || 50 + universeId: options.universeId, + includeReportingStats: options.includeReportingStats, + isArchived: options.isArchived, + pageCursor: options.pageCursor } }, json: true - }).then((response) => response.body as GetSponsoredGames); + }).then((response) => response.body); } - createAd (options: CreateAdOptions): Promise { + getUniverses(options: { + groupId?: number; + }): Promise { return this.request({ requiresAuth: true, request: { - path: "/v1/sponsored-games/create-ad", - method: "POST", - json: options as any + url: "v2/sponsored-games/universes", + method: "GET", + qs: { + groupId: options.groupId + } }, json: true - }).then((response) => response.body as CreateAd); + }).then((response) => response.body); } - runAd (options: RunAdOptions): Promise { + createSponsor( + options: AdConfigurationCreateSponsoredGameAd + ): Promise { return this.request({ requiresAuth: true, request: { - path: "/v1/sponsored-games/run", + url: "v2/sponsored-games/create", method: "POST", - json: options as any + json: options }, json: true - }).then((response) => response.body as RunAd); + }).then(() => true); } - stopAd (options: StopAdOptions): Promise { + stopSponsor(options: AdConfigurationStopSponsoredGameAd): Promise { return this.request({ requiresAuth: true, request: { - path: "/v1/sponsored-games/stop", + url: "v2/sponsored-games/stop", method: "POST", - json: options as any + json: options }, json: true - }).then((response) => response.body as StopAd); + }).then(() => true); } } diff --git a/src/client/apis/AdsAPI.ts b/src/client/apis/AdsAPI.ts deleted file mode 100644 index a07507c84..000000000 --- a/src/client/apis/AdsAPI.ts +++ /dev/null @@ -1,84 +0,0 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; - -export declare type CreateAssetAdOptions = { - assetId: number; - name: string; - file: unknown; -}; -export declare type CreateGamePassAdOptions = { - gamePassId: number; - name: string; - file: unknown; -}; -export declare type CreateGroupAdOptions = { - groupId: number; - name: string; - file: unknown; -}; - -export declare type CreateAssetAd = unknown; -export declare type CreateGamePassAd = unknown; -export declare type CreateGroupAd = unknown; - -export default class AdsAPI extends BaseAPI { - constructor (client: Client) { - super({ - baseUrl: "https://ads.roblox.com/", - client - }); - } - - createAssetAd (options: CreateAssetAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user-ads/assets/create", - method: "POST", - formData: { - name: options.name, - files: options.file - }, - qs: { - assetId: options.assetId - } - } - }).then((response) => response.body as CreateAssetAd); - } - - createGamePassAd ( - options: CreateGamePassAdOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user-ads/game-pass/create", - method: "POST", - formData: { - name: options.name, - files: options.file - }, - qs: { - gamePassId: options.gamePassId - } - } - }).then((response) => response.body as CreateGamePassAd); - } - - createGroupAd (options: CreateGroupAdOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: "v1/user-ads/groups/create", - method: "POST", - formData: { - name: options.name, - files: options.file - }, - qs: { - groupId: options.groupId - } - } - }).then((response) => response.body as CreateGroupAd); - } -} diff --git a/src/interfaces/RESTInterfaces.ts b/src/interfaces/RESTInterfaces.ts index 504979a7f..3b0c54a4b 100644 --- a/src/interfaces/RESTInterfaces.ts +++ b/src/interfaces/RESTInterfaces.ts @@ -82,7 +82,7 @@ export declare type RESTRequestOptions = { /** * The JSON body */ - json?: unknown[] | { [key: string]: unknown } | string; + json?: unknown[] | { [key: string]: unknown } | string | any; body?: unknown; /** * The form body diff --git a/src/types/GeneralTypes.ts b/src/types/GeneralTypes.ts new file mode 100644 index 000000000..21a644ae1 --- /dev/null +++ b/src/types/GeneralTypes.ts @@ -0,0 +1,8 @@ +export declare type Privacy = + | "NoOne" + | "Friends" + | "Following" + | "Followers" + | "AllUsers"; + +export declare type ISOString = string; From c12e6853dc059cc9c31d282755f1531a79dc4a63 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 09:05:45 +0100 Subject: [PATCH 14/24] Update all APIs to a certain extend, strip all structures for the next step --- .eslintrc.json | 10 +- src/client/Client.ts | 4 +- src/client/ClientBase.ts | 12 +- src/client/apis/AccountInformationAPI.ts | 36 +- src/client/apis/AccountSettingsAPI.ts | 40 +- src/client/apis/AdConfigurationAPI.ts | 28 +- src/client/apis/AssetDeliveryAPI.ts | 20 +- src/client/apis/AuthAPI.ts | 168 ++-- src/client/apis/BadgesAPI.ts | 32 +- src/client/apis/CatalogAPI.ts | 42 +- src/client/apis/ChatAPI.ts | 48 +- src/client/apis/ContactsAPI.ts | 11 +- src/client/apis/DevelopAPI.ts | 323 ++++++-- src/client/apis/GroupsAPI.ts | 224 +++--- src/client/apis/InventoryAPI.ts | 180 +++-- src/client/apis/LocaleAPI.ts | 24 +- src/client/apis/MetricsAPI.ts | 18 +- src/client/apis/PrivateMessagesAPI.ts | 32 +- src/client/apis/PublishAPI.ts | 22 +- src/client/apis/UsersAPI.ts | 40 +- src/client/apis/index.ts | 5 +- src/client/lib/ClientSocket/ClientSocket.ts | 20 +- .../structures/DataStoreHttpRequest.ts | 4 +- .../structures/GenericDataStore.ts | 36 +- .../structures/OrderedDataStore.ts | 4 +- .../lib/DataStoreManager/util/checks.ts | 16 +- src/controllers/rest/RESTController.ts | 8 +- src/controllers/rest/lib/getRequester.ts | 6 +- src/controllers/rest/request/prepare.ts | 18 +- src/controllers/rest/response/RESTResponse.ts | 10 +- .../rest/response/handlers/validStatusCode.ts | 24 +- .../response/handlers/validStatusMessage.ts | 22 +- src/index.ts | 123 +-- src/structures/ClientUser.ts | 265 +------ src/structures/Game.ts | 112 +-- src/structures/Group.ts | 258 ++++--- src/structures/User.ts | 715 +----------------- src/util/errors/errors.ts | 14 +- 38 files changed, 1117 insertions(+), 1857 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 7530a4fc9..4a4b6872d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -100,13 +100,7 @@ "allowArrowFunctions": true } ], - "indent": [ - "error", - 2, - { - "SwitchCase": 1 - } - ], + "indent": "off", "key-spacing": "error", "keyword-spacing": "error", "max-depth": "error", @@ -148,7 +142,7 @@ "nonblock-statement-body-position": "error", "object-curly-spacing": ["error", "always"], "operator-assignment": "error", - "operator-linebreak": ["error", "after"], + "operator-linebreak": "off", "padded-blocks": ["error", "never"], "quote-props": ["error", "as-needed"], "quotes": [ diff --git a/src/client/Client.ts b/src/client/Client.ts index 044ab4ec5..42e4f88e5 100644 --- a/src/client/Client.ts +++ b/src/client/Client.ts @@ -68,8 +68,8 @@ export default class Client extends ClientBase { description: `Added cookie to cookie jar, proceeding to fetching authenticated user information..` }); - const getAuthenticationData = - await this.apis.usersAPI.getAuthenticatedUserInformation(); + const getAuthenticationData + = await this.apis.usersAPI.getAuthenticatedUserInformation(); this.user = new ClientUser( { id: getAuthenticationData.id, diff --git a/src/client/ClientBase.ts b/src/client/ClientBase.ts index 7d72148f4..72f568455 100644 --- a/src/client/ClientBase.ts +++ b/src/client/ClientBase.ts @@ -67,12 +67,12 @@ export default class ClientBase extends EventEmitter { } public log (level: "info" | "warn" | "error", data: DebugData): void { - const loggerToUse = - level === "info" ? - this.debugger.info : - level === "error" ? - this.debugger.error : - this.debugger.warn; + const loggerToUse + = level === "info" + ? this.debugger.info + : level === "error" + ? this.debugger.error + : this.debugger.warn; loggerToUse( `[${new Date().toISOString()}] ${data.name}: ${data.description}` diff --git a/src/client/apis/AccountInformationAPI.ts b/src/client/apis/AccountInformationAPI.ts index 16313964e..bcc0fcc92 100644 --- a/src/client/apis/AccountInformationAPI.ts +++ b/src/client/apis/AccountInformationAPI.ts @@ -3,23 +3,23 @@ import Client from "../Client"; import { Privacy } from "../../types/GeneralTypes"; // AccountInformation -export declare interface UserAccountBirthdate { +export type UserAccountBirthdate = { birthDay: number; birthMonth: number; birthYear: number; -} -export declare interface UserAccountDescription { +}; +export type UserAccountDescription = { description: string; -} -export declare interface UserAccountGender { +}; +export type UserAccountGender = { gender: number; -} -export declare interface UserAccountXboxConsecutiveLoginDays { +}; +export type UserAccountXboxConsecutiveLoginDays = { count: number; -} +}; // Metadata -export declare interface UserAccountMetaData { +export type UserAccountMetaData = { isAllowedNotificationsEndpointDisabled: boolean; isAccountSettingsPolicyEnabled: boolean; isPhoneNumberEnabled: boolean; @@ -29,39 +29,39 @@ export declare interface UserAccountMetaData { isIDVerificationEnabled: boolean; isPasswordRequiredForAgingDown: boolean; homePageUpsellCardVariation: string; -} +}; // PromotionChannel -export declare interface UserAccountOwnPromotionChannels { +export type UserAccountOwnPromotionChannels = { promotionChannelsVisibilityPrivacy: Privacy; facebook: string; twitter: string; youtube: string; twitch: string; guilded: string; -} +}; export declare type UserAccountPromotionChannels = Omit< UserAccountOwnPromotionChannels, "promotionChannelsVisibilityPrivacy" >; // StarCodeAffiliate -export declare interface UserAccountStarCodeAffiliate { +export type UserAccountStarCodeAffiliate = { userId: number; name: string; code: string; -} -export declare interface UserAccountSetStarCodeAffiliate { +}; +export type UserAccountSetStarCodeAffiliate = { code: string; -} +}; // RobloxBadges -export declare interface UserAccountRobloxBadge { +export type UserAccountRobloxBadge = { id: number; name: string; description: string; imageUrl: string; -} +}; export declare type UserAccountRobloxBadges = UserAccountRobloxBadge[]; export default class AccountInformationAPI extends BaseAPI { diff --git a/src/client/apis/AccountSettingsAPI.ts b/src/client/apis/AccountSettingsAPI.ts index 9608f0ad1..0ffa163a4 100644 --- a/src/client/apis/AccountSettingsAPI.ts +++ b/src/client/apis/AccountSettingsAPI.ts @@ -3,46 +3,46 @@ import Client from "../Client"; import { Privacy } from "../../types/GeneralTypes"; // Accounts -export interface AccountSettingsMetaData { +export type AccountSettingsMetaData = { isAccountsRestrictionsSpamBugFixEnabled: boolean; maximumParentalControlsMonthlySpendLimitInUSD: number; isParentalMonthlyLimitInUIEnabled: boolean; isParentalNotificationSettingsInUIEnabled: boolean; -} -export interface AccountSettingsGroup { +}; +export type AccountSettingsGroup = { title: string; url: string; suffix: string; -} +}; export type AccountSettingsGroups = AccountSettingsGroup[]; // PrivacySettings -export interface AccountSettingsAppChatPrivacy { +export type AccountSettingsAppChatPrivacy = { appChatPrivacy: Omit | "All"; -} -export interface AccountSettingsGameChatPrivacy { +}; +export type AccountSettingsGameChatPrivacy = { gameChatPrivacy: Omit; -} -export interface AccountSettingsInventoryPrivacy { +}; +export type AccountSettingsInventoryPrivacy = { inventoryPrivacy: Privacy; -} -export interface AccountSettingsPrivacy { +}; +export type AccountSettingsPrivacy = { phoneDiscovery: Omit; -} -export interface AccountSettingsPrivacyInfo { +}; +export type AccountSettingsPrivacyInfo = { isPhoneDiscoveryEnabled: boolean; -} -export interface AccountSettingsPrivateMessagePrivacy { +}; +export type AccountSettingsPrivateMessagePrivacy = { privateMessagePrivacy: Privacy; -} -export interface AccountSettingsVisibilityPrivacy { +}; +export type AccountSettingsVisibilityPrivacy = { visibilityPrivacy: number; -} +}; // BlockUser -export interface AccountSettingsBlockUser { +export type AccountSettingsBlockUser = { userId: number; -} +}; export default class AccountSettingsAPI extends BaseAPI { constructor(client: Client) { diff --git a/src/client/apis/AdConfigurationAPI.ts b/src/client/apis/AdConfigurationAPI.ts index 3b6936445..d4ad5b1d1 100644 --- a/src/client/apis/AdConfigurationAPI.ts +++ b/src/client/apis/AdConfigurationAPI.ts @@ -3,12 +3,12 @@ import Client from "../Client"; import { ISOString } from "../../types/GeneralTypes"; // Utility types -export declare type AdConfigurationTargetGender = unknown; -export declare type AdConfigurationTargetAgeBracket = unknown; -export declare type AdConfigurationTargetDeviceType = unknown; +export type AdConfigurationTargetGender = unknown; +export type AdConfigurationTargetAgeBracket = unknown; +export type AdConfigurationTargetDeviceType = unknown; // SponsoredGames -export declare interface AdConfigurationSponsoredGame { +export type AdConfigurationSponsoredGame = { adId: number; adSetId: number; adName: string; @@ -32,21 +32,21 @@ export declare interface AdConfigurationSponsoredGame { totalConversions: number; impressionConversions: number; clickConversions: number; -} -export declare interface AdConfigurationSponsoredGames { +}; +export type AdConfigurationSponsoredGames = { sponsoredGames: AdConfigurationSponsoredGame[]; previousPageCursor: string; nextPageCursor: string; -} +}; -export declare interface AdConfigurationUniverse { +export type AdConfigurationUniverse = { id: number; name: string; -} -export declare interface AdConfigurationUniverses { +}; +export type AdConfigurationUniverses = { universes: AdConfigurationUniverse[]; -} -export declare interface AdConfigurationCreateSponsoredGameAd { +}; +export type AdConfigurationCreateSponsoredGameAd = { universeId: number; targetGender: AdConfigurationTargetGender; targetAgeBracket: AdConfigurationTargetAgeBracket; @@ -56,8 +56,8 @@ export declare interface AdConfigurationCreateSponsoredGameAd { endDate: ISOString; adName: string; bidAmountInRobux: number; -} -export declare interface AdConfigurationStopSponsoredGameAd { +}; +export interface AdConfigurationStopSponsoredGameAd { adSetId: number; } diff --git a/src/client/apis/AssetDeliveryAPI.ts b/src/client/apis/AssetDeliveryAPI.ts index d3b46630b..1925b4615 100644 --- a/src/client/apis/AssetDeliveryAPI.ts +++ b/src/client/apis/AssetDeliveryAPI.ts @@ -32,22 +32,22 @@ export type BaseAssetRaw = { const convertToBaseAsset = (options: BaseAssetRaw): BaseAsset => ({ errors: - typeof options.Errors !== "undefined" ? - options.Errors.map((v) => ({ + typeof options.Errors !== "undefined" + ? options.Errors.map((v) => ({ message: v.Message, code: v.Code - })) : - undefined, + })) + : undefined, isArchived: typeof options.IsArchived !== "undefined" ? options.IsArchived : undefined, isCopyrightProtected: - typeof options.IsCopyrightProtected !== "undefined" ? - options.IsCopyrightProtected : - undefined, + typeof options.IsCopyrightProtected !== "undefined" + ? options.IsCopyrightProtected + : undefined, isHashDynamic: - typeof options.IsHashDynamic !== "undefined" ? - options.IsHashDynamic : - undefined, + typeof options.IsHashDynamic !== "undefined" + ? options.IsHashDynamic + : undefined, location: typeof options.Location !== "undefined" ? options.Location : undefined, requestId: diff --git a/src/client/apis/AuthAPI.ts b/src/client/apis/AuthAPI.ts index 82c71542a..3831117a0 100644 --- a/src/client/apis/AuthAPI.ts +++ b/src/client/apis/AuthAPI.ts @@ -1,7 +1,27 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetAuthTicket = { +// AccountPin +export type AuthPin = { + pin: string; +}; + +// Metadata +export type AuthMetaData = { + isUpdateUsernameEnabled: boolean; + ftuxAvatarAssetMap: string; + isEmailUpsellAtLogoutEnabled: boolean; + shouldFetchEmailUpsellIXPValuesAtLogout: boolean; + isAccountRecoveryPromptEnabled: boolean; + isContactMethodRequiredAtSignup: boolean; + isUserAgreementsSignupIntegrationEnabled: boolean; + isRetypePasswordRequired: boolean; + arePasswordFieldsPlaintext: boolean; + isKoreaIdVerificationEnabled: boolean; + isSignupButtonGreenColorEnabled: boolean; +}; + +export type AuthTicket = { authTicket: string; }; export type GetAuthMetaData = { @@ -204,105 +224,81 @@ export type ChangeUsernameOptions = { export type ChangeUsername = unknown; export default class AuthAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://auth.roblox.com/" }); } - getAuthTicket (): Promise { + unlockPin(options: AuthPin): Promise { return this.request({ - json: true, requiresAuth: true, request: { - path: "v1/authentication-ticket", - method: "POST", - headers: { - referer: "https://www.roblox.com/", - origin: "roblox.com" - } - } - }).then((response) => ({ - authTicket: response.headers["rbx-authentication-ticket"] - })); - } - - getAuthMetaData (): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/auth/metadata" - } - }).then((response) => response.body as GetAuthMetaData); - } - - login (options: LoginOptions): Promise { - return this.request({ - json: true, - requiresAuth: false, - request: { - path: "v2/login", + path: "v1/account/pin/unlock", method: "POST", json: options - } - }).then((response) => response.body as Login); + }, + json: true + }).then(() => true); } - logout (): Promise { + lockPin(): Promise { return this.request({ - json: true, - requiresAuth: false, + requiresAuth: true, request: { - path: "v2/logout", + path: "v1/account/pin/lock", method: "POST" - } - }).then((response) => response.body as Logout); + }, + json: true + }).then(() => true); } - getCredentialsVerificationStatus ( - options: GetCredentialsVerificationStatusOptions - ): Promise { + getAuthTicket(): Promise { return this.request({ json: true, - requiresAuth: false, - request: { - path: "v2/credentials/verification", - qs: { - "request.credentialType": options.credentialType, - "request.credentialValue": options.credentialValue, - "request.password": options.password - } - } - }).then((response) => response.body as GetCredentialsVerificationStatus); - } - - sendCredentialsVerificationMessage ( - options: SendCredentialsVerificationMessageOptions - ): Promise { - return this.request({ - json: true, - requiresAuth: false, + requiresAuth: true, request: { - path: "v2/credentials/verification/send", + path: "v1/authentication-ticket", method: "POST", - json: options + headers: { + referer: "https://www.roblox.com/", + origin: "roblox.com" + } } - }).then((response) => response.body as SendCredentialsVerificationMessage); + }).then((response) => ({ + authTicket: response.headers["rbx-authentication-ticket"] + })); } - getMetaData (): Promise { + getMetaData(): Promise { return this.request({ json: true, requiresAuth: false, request: { path: "v2/metadata" } - }).then((response) => response.body as GetMetaData); + }).then((response) => ({ + isUpdateUsernameEnabled: response.body.isUpdateUsernameEnabled, + ftuxAvatarAssetMap: response.body.ftuxAvatarAssetMap, + isEmailUpsellAtLogoutEnabled: response.body.IsEmailUpsellAtLogoutEnabled, + shouldFetchEmailUpsellIXPValuesAtLogout: + response.body.ShouldFetchEmailUpsellIXPValuesAtLogout, + isAccountRecoveryPromptEnabled: + response.body.IsAccountRecoveryPromptEnabled, + isContactMethodRequiredAtSignup: + response.body.IsContactMethodRequiredAtSignup, + isUserAgreementsSignupIntegrationEnabled: + response.body.IsUserAgreementsSignupIntegrationEnabled, + isRetypePasswordRequired: response.body.IsRetypePasswordRequired, + arePasswordFieldsPlaintext: response.body.ArePasswordFieldsPlaintext, + isKoreaIdVerificationEnabled: response.body.IsKoreaIdVerificationEnabled, + isSignupButtonGreenColorEnabled: + response.body.IsSignupButtonGreenColorEnabled + })); } - getCurrentUserPasswordStatus (): Promise { + getCurrentUserPasswordStatus(): Promise { return this.request({ json: true, requiresAuth: true, @@ -312,7 +308,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as GetCurrentPasswordStatus); } - getPasswordResetMetaData ( + getPasswordResetMetaData( options: GetPasswordResetMetaDataOptions ): Promise { return this.request({ @@ -328,7 +324,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as GetPasswordResetMetaData); } - resetPassword (options: ResetPasswordOptions): Promise { + resetPassword(options: ResetPasswordOptions): Promise { return this.request({ json: true, requiresAuth: false, @@ -340,7 +336,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as ResetPassword); } - validatePassword ( + validatePassword( options: ValidatePasswordOptions ): Promise { return this.request({ @@ -356,7 +352,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as ValidatePassword); } - sendPasswordReset ( + sendPasswordReset( options: SendPasswordResetOptions ): Promise { return this.request({ @@ -370,7 +366,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as SendPasswordReset); } - verifyPasswordReset ( + verifyPasswordReset( options: VerifyPasswordResetOptions ): Promise { return this.request({ @@ -384,7 +380,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as VerifyPasswordReset); } - changeUserPassword ( + changeUserPassword( options: ChangeUserPasswordOptions ): Promise { return this.request({ @@ -398,7 +394,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as ChangeUserPassword); } - getRecoveryMetaData (): Promise { + getRecoveryMetaData(): Promise { return this.request({ json: true, requiresAuth: false, @@ -408,7 +404,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as GetRecoveryMetaData); } - getRevertAccountInfo ( + getRevertAccountInfo( options: RevertAccountInfoOptions ): Promise { return this.request({ @@ -423,7 +419,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as RevertAccountInfo); } - revertAccount (options: RevertAccountOptions): Promise { + revertAccount(options: RevertAccountOptions): Promise { return this.request({ json: true, requiresAuth: false, @@ -435,7 +431,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as RevertAccount); } - getSAMLMetaData (): Promise { + getSAMLMetaData(): Promise { return this.request({ json: true, requiresAuth: false, @@ -445,7 +441,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as GetSAMLMetaData); } - samlAuthenticate (): Promise { + samlAuthenticate(): Promise { return this.request({ json: true, requiresAuth: false, @@ -456,7 +452,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as SAMLRequest); } - getTwoStepVerificationMetaData (): Promise { + getTwoStepVerificationMetaData(): Promise { return this.request({ json: true, requiresAuth: false, @@ -466,7 +462,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as GetTwoStepVerificationMetaData); } - resendTwoStepVerificationCode ( + resendTwoStepVerificationCode( options: ResendTwoStepVerificationOptions ): Promise { return this.request({ @@ -480,7 +476,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as ResendTwoStepVerification); } - verifyTwoStepCode ( + verifyTwoStepCode( options: VerifyTwoStepVerificationOptions ): Promise { return this.request({ @@ -494,7 +490,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as VerifyTwoStepVerification); } - getExistingUsernames ( + getExistingUsernames( options: GetExistingUsernamesOptions ): Promise { return this.request({ @@ -509,7 +505,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as GetExistingUsernames); } - validateUsername ( + validateUsername( options: ValidateUsernameOptions ): Promise { return this.request({ @@ -526,7 +522,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as ValidateUsername); } - recoverUsernames ( + recoverUsernames( options: RecoverUsernamesOptions ): Promise { return this.request({ @@ -539,7 +535,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as RecoverUsernames); } - signUp (options: SignUpOptions): Promise { + signUp(options: SignUpOptions): Promise { return this.request({ json: true, requiresAuth: false, @@ -551,7 +547,7 @@ export default class AuthAPI extends BaseAPI { }).then((response) => response.body as SignUp); } - changeUserUsername (options: ChangeUsernameOptions): Promise { + changeUserUsername(options: ChangeUsernameOptions): Promise { return this.request({ json: true, requiresAuth: true, diff --git a/src/client/apis/BadgesAPI.ts b/src/client/apis/BadgesAPI.ts index 1396d167a..973bd9be9 100644 --- a/src/client/apis/BadgesAPI.ts +++ b/src/client/apis/BadgesAPI.ts @@ -2,6 +2,12 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { GameBadgeOptions } from "../../structures/Game"; +export type BadgeMetaData = { + badgeCreationPrice: number; + maxBadgeNameLength: number; + maxBadgeDescriptionLength: number; +}; + export type GetBadgeOptions = { badgeId: number; }; @@ -52,14 +58,24 @@ export type DeleteBadgeFromSelfOptions = { export type DeleteBadgeFromSelf = DeleteBadgeFromUser; export default class AvatarAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://badges.roblox.com/" }); } - getBadge (options: GetBadgeOptions): Promise { + getMetaData(): Promise { + return this.request({ + requiresAuth: false, + request: { + path: "v1/badges/metadata" + }, + json: true + }).then((response) => response.body); + } + + getBadge(options: GetBadgeOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -69,7 +85,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - updateBadge (options: UpdateBadgeOptions): Promise { + updateBadge(options: UpdateBadgeOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -80,7 +96,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseBadges ( + getUniverseBadges( options: GetUniverseBadgesOptions ): Promise { return this.request({ @@ -93,7 +109,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUserBadges (options: GetUserBadgesOptions): Promise { + getUserBadges(options: GetUserBadgesOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -104,7 +120,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUserBadgesAwardedDates ( + getUserBadgesAwardedDates( options: GetUserBadgesAwardedDatesOptions ): Promise { return this.request({ @@ -119,7 +135,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - deleteBadgeFromUser ( + deleteBadgeFromUser( options: DeleteBadgeFromUserOptions ): Promise { return this.request({ @@ -132,7 +148,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - deleteBadgeFromSelf ( + deleteBadgeFromSelf( options: DeleteBadgeFromSelfOptions ): Promise { return this.request({ diff --git a/src/client/apis/CatalogAPI.ts b/src/client/apis/CatalogAPI.ts index 3f887ade0..9c0634c2f 100644 --- a/src/client/apis/CatalogAPI.ts +++ b/src/client/apis/CatalogAPI.ts @@ -129,14 +129,14 @@ export type FavoriteBundleOptions = { export type FavoriteBundle = unknown; export default class CatalogAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://catalog.roblox.com/" }); } - getAssetBundles (options: GetAssetBundlesOptions): Promise { + getAssetBundles(options: GetAssetBundlesOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -147,7 +147,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getBundleDetails ( + getBundleDetails( options: GetBundleDetailsOptions ): Promise { return this.request({ @@ -160,7 +160,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getBundleRecommendationsByBundleId ( + getBundleRecommendationsByBundleId( options: GetBundleRecommendationsByBundleIdOptions ): Promise { return this.request({ @@ -173,7 +173,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getMultiBundleDetails ( + getMultiBundleDetails( options: GetMultiBundleDetailsOptions ): Promise { return this.request({ @@ -188,7 +188,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getUserBundles (options: GetUserBundlesOptions): Promise { + getUserBundles(options: GetUserBundlesOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -199,7 +199,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getUserBundlesByType ( + getUserBundlesByType( options: GetUserBundlesByTypeOptions ): Promise { return this.request({ @@ -211,7 +211,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - unpackBundle (options: UnpackBundleOptions): Promise { + unpackBundle(options: UnpackBundleOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -222,7 +222,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getAssetToCategory (): Promise { + getAssetToCategory(): Promise { return this.request({ requiresAuth: false, request: { @@ -232,7 +232,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getAssetToSubCategory (): Promise { + getAssetToSubCategory(): Promise { return this.request({ requiresAuth: false, request: { @@ -242,7 +242,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getCategories (): Promise { + getCategories(): Promise { return this.request({ requiresAuth: false, request: { @@ -252,7 +252,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getSubCategories (): Promise { + getSubCategories(): Promise { return this.request({ requiresAuth: false, request: { @@ -262,7 +262,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getAppStoreExclusiveBundles ( + getAppStoreExclusiveBundles( options: GetAppStoreExclusiveBundlesOptions ): Promise { return this.request({ @@ -274,7 +274,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getAssetFavoriteCount ( + getAssetFavoriteCount( options: GetAssetFavoriteCountOptions ): Promise { return this.request({ @@ -286,7 +286,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getBundleFavoriteCount ( + getBundleFavoriteCount( options: GetBundleFavoriteCountOptions ): Promise { return this.request({ @@ -298,7 +298,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - removeAssetFavorite ( + removeAssetFavorite( options: RemoveSelfAssetFavoriteOptions ): Promise { return this.request({ @@ -311,7 +311,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getUserFavoriteAsset ( + getUserFavoriteAsset( options: GetUserFavoriteAssetOptions ): Promise { return this.request({ @@ -323,7 +323,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - favoriteAsset (options: FavoriteAssetOptions): Promise { + favoriteAsset(options: FavoriteAssetOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -334,7 +334,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - removeBundleFavorite ( + removeBundleFavorite( options: RemoveFavoriteBundleOptions ): Promise { return this.request({ @@ -347,7 +347,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getUserFavoriteBundle ( + getUserFavoriteBundle( options: GetSelfFavoriteBundleOptions ): Promise { return this.request({ @@ -359,7 +359,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - favoriteBundle (options: FavoriteBundleOptions): Promise { + favoriteBundle(options: FavoriteBundleOptions): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/ChatAPI.ts b/src/client/apis/ChatAPI.ts index 58d1432ff..3971922cf 100644 --- a/src/client/apis/ChatAPI.ts +++ b/src/client/apis/ChatAPI.ts @@ -184,14 +184,14 @@ export type UpdateUserTypingStatus = { }; export default class ChatAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://chat.roblox.com/" }); } - getChatSettings (): Promise { + getChatSettings(): Promise { return this.request({ requiresAuth: true, request: { @@ -201,7 +201,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getConversations ( + getConversations( options: GetConversationsOptions ): Promise { return this.request({ @@ -216,7 +216,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getConversationMessages ( + getConversationMessages( options: GetConversationMessagesOptions ): Promise { return this.request({ @@ -229,7 +229,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getRolloutSettings ( + getRolloutSettings( options: GetRolloutSettingsOptions ): Promise { return this.request({ @@ -244,17 +244,17 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getUnreadConversationCount (): Promise { + getUnreadConversationCount(): Promise { return this.request({ requiresAuth: true, request: { - path: `v2/get-conversations` + path: `v2/get-conversation-count` }, json: true }).then((response) => response.body); } - getUnreadMessagesInConversations ( + getUnreadMessagesInConversations( options: GetUnreadMessagesInConversationsOptions ): Promise { return this.request({ @@ -270,7 +270,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getUserConversations ( + getUserConversations( options: GetUserConversationsOptions ): Promise { return this.request({ @@ -283,7 +283,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getMetaData (): Promise { + getMetaData(): Promise { return this.request({ requiresAuth: true, request: { @@ -293,7 +293,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getMultiLatestConversationMessages ( + getMultiLatestConversationMessages( options: GetMultiLatestConversationMessagesOptions ): Promise { return this.request({ @@ -306,7 +306,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - addUsersToConversation ( + addUsersToConversation( options: AddUsersToConversationOptions ): Promise { return this.request({ @@ -320,7 +320,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - markConversationMessagesRead ( + markConversationMessagesRead( options: MarkMessageInConversationAsReadOptions ): Promise { return this.request({ @@ -334,7 +334,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - markConversationsSeen ( + markConversationsSeen( options: MarkConversationsAsSeenOptions ): Promise { return this.request({ @@ -348,7 +348,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - removeUserFromConversation ( + removeUserFromConversation( options: RemoveUserFromConversationOptions ): Promise { return this.request({ @@ -362,7 +362,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - renameGroupConversation ( + renameGroupConversation( options: RenameGroupConversationOptions ): Promise { return this.request({ @@ -376,7 +376,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - resetConversationUniverse ( + resetConversationUniverse( options: ResetConversationUniverseOptions ): Promise { return this.request({ @@ -390,7 +390,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - sendGameLinkMessage ( + sendGameLinkMessage( options: SendGameLinkMessageOptions ): Promise { return this.request({ @@ -404,7 +404,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - sendMessage (options: SendMessageOptions): Promise { + sendMessage(options: SendMessageOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -416,7 +416,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - setConversationUniverse ( + setConversationUniverse( options: SetConversationUniverseOptions ): Promise { return this.request({ @@ -430,7 +430,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - startCloudEditConversation ( + startCloudEditConversation( options: StartCloudEditConversationOptions ): Promise { return this.request({ @@ -444,7 +444,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - startGroupConversation ( + startGroupConversation( options: StartGroupConversationOptions ): Promise { return this.request({ @@ -458,7 +458,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - startOneToOneConversation ( + startOneToOneConversation( options: StartOneToOneConversationOptions ): Promise { return this.request({ @@ -472,7 +472,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - updateUserTypingStatus ( + updateUserTypingStatus( options: UpdateUserTypingStatusOptions ): Promise { return this.request({ diff --git a/src/client/apis/ContactsAPI.ts b/src/client/apis/ContactsAPI.ts index 7604ebcc3..9a8c06e35 100644 --- a/src/client/apis/ContactsAPI.ts +++ b/src/client/apis/ContactsAPI.ts @@ -3,6 +3,7 @@ import Client from "../Client"; export type GetContactsMetaData = { multiGetContactsMaxSize: number; + multiGetContactsCacheTTLinMS: number; }; export type GetUsersTagsOptions = { targetUserIds: number[]; @@ -27,14 +28,14 @@ export type SetUserTag = { }; export default class ContactsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://contacts.roblox.com/" }); } - getContactsMetaData (): Promise { + getContactsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -44,7 +45,7 @@ export default class ContactsAPI extends BaseAPI { }).then((response) => response.body); } - getUsersTags (options: GetUsersTagsOptions): Promise { + getUsersTags(options: GetUsersTagsOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -56,7 +57,7 @@ export default class ContactsAPI extends BaseAPI { }).then((response) => response.body); } - setPendingUserTag ( + setPendingUserTag( options: SetPendingUserTagOptions ): Promise { return this.request({ @@ -70,7 +71,7 @@ export default class ContactsAPI extends BaseAPI { }).then((response) => response.body); } - setUserTag (options: SetUserTagOptions): Promise { + setUserTag(options: SetUserTagOptions): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/DevelopAPI.ts b/src/client/apis/DevelopAPI.ts index 894fa3981..2fec647b0 100644 --- a/src/client/apis/DevelopAPI.ts +++ b/src/client/apis/DevelopAPI.ts @@ -2,6 +2,94 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { GameUniverseOptions } from "../../structures/Game"; import { PartialGroupOptions } from "../../structures/Group"; +import { ISOString } from "../../types/GeneralTypes"; + +export type DevelopAgeDataAvailable = { + isAgeDataAvailable: boolean; +}; +export type ProductAggregation = { + developerProductName: string; + revenueAmount: number; +}; +export type DevelopProductAggregation = { + allDevicesDeveloperProductRevenue: ProductAggregation[]; + developerProductRevenueByDevice: { + Computer: ProductAggregation[]; + Phone: ProductAggregation[]; + Tablet: ProductAggregation[]; + Console: ProductAggregation[]; + }; +}; + +export type DevelopTeamCreateSessionMember = { + id: number; + name: string; + displayName: string; +}; +export type DevelopTeamCreateSessionMembers = { + data: DevelopTeamCreateSessionMember[]; +}; +export type DevelopTeamCreateEnabled = { + isEnabled: boolean; +}; +export type DevelopTeamCreateMember = { + buildersClubMembershipType: "None" | "RobloxPremium"; + userId: number; + username: string; + displayName: string; +}; +export type DevelopTeamCreateMembers = { + previousPageCursor: string; + nextPageCursor: string; + data: DevelopTeamCreateMember[]; +}; +export type DevelopInvitedTeamCreatePlace = { + id: number; + name: string; + description: string; + isArchived: boolean; + rootPlaceId: number; + isActive: boolean; + privacyType: "Public" | "FriendsOnly" | "Private"; + creatorType: "User" | "Group"; + creatorTargetId: number; + creatorName: string; + created: ISOString; + updated: ISOString; +}; +export type DevelopInvitedTeamCreatePlaces = { + previousPageCursor: string; + nextPageCursor: string; + data: DevelopInvitedTeamCreatePlace[]; +}; +export type GetUniverseLiveStatsOptions = { + universeId: number; +}; +export type GetUniverseLiveStats = { + totalPlayerCount: number; + playerCountsByDeviceType: Record; + gameCount: number; +}; +export type GetUniverseRevenueReportsOptions = { + universeId: number; +}; +export type GetUniverseRevenueReport = { + month: number; + year: number; + RevenueReportStatus: "NotGenerated" | "ReadyForDownload"; +}; +export type GetUniverseRevenueReports = { + monthlyRevenueReportStatusList: GetUniverseRevenueReport[]; +}; +export type GetUniverseRevenueReportOptions = { + universeId: number; + yearDashMonth: `${number}-${number}`; +}; + +export type DevelopCreatorDashboardMetadata = { + isPlayFabDataSourceChartsEnabled: boolean; + playFabDataSourceChartsAvailableByKPITypes: string[]; +}; export type GetAssetsVoteInformationOptions = { assetIds: number[]; @@ -324,8 +412,8 @@ export type GetUniverseConfiguration = { price: number; }; export type UpdateUniverseConfigurationOptions = Omit< -GetUniverseConfiguration, -"id" + GetUniverseConfiguration, + "id" > & { universeId: number }; export type UpdateUniverseConfiguration = GetUniverseConfiguration; export type GetUniverseVIPServersConfigurationOptions = { @@ -448,14 +536,14 @@ export type UpdateDeveloperProductOptions = { export type UpdateDeveloperProduct = unknown; export default class DevelopAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://develop.roblox.com/" }); } - getGameTemplates (): Promise { + getGameTemplates(): Promise { return this.request({ requiresAuth: false, request: { @@ -465,7 +553,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body.data); } - getGameUpdatesHistory ( + getGameUpdatesHistory( options: GetGameUpdatesHistoryOptions ): Promise { return this.request({ @@ -477,7 +565,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - publishGameUpdateNotification ( + publishGameUpdateNotification( options: PublishGameNotificationOptions ): Promise { return this.request({ @@ -491,7 +579,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - filterGameUpdateNotificationText ( + filterGameUpdateNotificationText( options: FilterPublishGameNotificationOptions ): Promise { return this.request({ @@ -505,7 +593,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getGroupUniverses ( + getGroupUniverses( options: GetGroupUniversesOptions ): Promise { return this.request({ @@ -518,7 +606,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getPlaceCompatibilities ( + getPlaceCompatibilities( options: GetPlaceCompatibilitiesOptions ): Promise { return this.request({ @@ -530,7 +618,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updatePlaceConfiguration ( + updatePlaceConfiguration( options: UpdatePlaceConfigurationOptions ): Promise { return this.request({ @@ -544,7 +632,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getPlaceStatistics ( + getPlaceStatistics( options: GetPlaceStatisticsByTypeOptions ): Promise { return this.request({ @@ -557,7 +645,77 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getMultiPlugins (options: GetPluginsByIdOptions): Promise { + isPlaceAgeDataAvailable(options: { + placeId: number; + }): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/is-age-data-available`, + method: "GET" + }, + json: true + }).then((response) => response.body); + } + + getDeveloperProductAggregation(options: { + placeId: number; + timeFrame: "Hourly" | "Daily" | "Monthly"; + }): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/developer-product-aggregation`, + method: "GET", + qs: options + }, + json: true + }).then((response) => response.body); + } + + getCreatorDashboardMetadata(): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/creator-dashboard-metadata` + }, + json: true + }).then((response) => response.body); + } + + getTeamCreateSessionMembers(options: { + placeId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + }): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/places/${options.placeId}/teamcreate/active_session/members`, + qs: { + limit: options.limit || 10, + cursor: options.cursor + } + }, + json: true + }).then((response) => response.body); + } + + setTeamCreateEnabled( + options: { universeId: number } & DevelopTeamCreateEnabled + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/teamcreate`, + method: "PATCH", + json: { isEnabled: options.isEnabled } + }, + json: true + }).then(() => true); + } + + getMultiPlugins(options: GetPluginsByIdOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -570,7 +728,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updatePlugin (options: UpdatePluginOptions): Promise { + updatePlugin(options: UpdatePluginOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -582,17 +740,17 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - searchUniverses (options: SearchUniversesOptions): Promise { + searchUniverses(options: SearchUniversesOptions): Promise { const encodedQuery = `${options.q.search || ""} creator:${ options.q.creator.slice(0, 1).toUpperCase() + options.q.creator.slice(1) } ${ - typeof options.q.active !== "undefined" ? - `active:${options.q.active ? "True" : "False"}` : - "" + typeof options.q.active !== "undefined" + ? `active:${options.q.active ? "True" : "False"}` + : "" } ${ - options.q.archived ? - `archived:${options.q.archived ? "True" : "False"}` : - "" + options.q.archived + ? `archived:${options.q.archived ? "True" : "False"}` + : "" } ${options.q.groups ? `groups:${options.q.groups.join(",")}` : ""}`; return this.request({ @@ -610,7 +768,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - searchToolbox (options: SearchToolboxOptions): Promise { + searchToolbox(options: SearchToolboxOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -621,7 +779,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverse (options: GetUniverseOptions): Promise { + getUniverse(options: GetUniverseOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -631,11 +789,23 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfUniversePermissions ( + getUniverseLiveStats( + options: GetUniverseLiveStatsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/live-stats` + }, + json: true + }).then((response) => response.body); + } + + getSelfUniversePermissions( options: GetUniversePermissionsOptions ): Promise { return this.request({ - requiresAuth: false, + requiresAuth: true, request: { path: `v1/universes/${options.universeId}/permissions` }, @@ -643,11 +813,11 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getPlacesInUniverse ( + getPlacesInUniverse( options: GetUniversePlacesOptions ): Promise { return this.request({ - requiresAuth: false, + requiresAuth: true, request: { path: `v1/universes/${options.universeId}/places`, qs: options @@ -656,7 +826,44 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseStatisticReports ( + getUniverseRevenueReports( + options: GetUniverseRevenueReportsOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/revenue-reports`, + qs: options + }, + json: true + }).then((response) => response.body); + } + + getUniverseRevenueReport( + options: GetUniverseRevenueReportOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/revenue-reports/${options.yearDashMonth}` + }, + json: true + }).then((response) => response.body); + } + + downloadUniverseRevenueReport( + options: GetUniverseRevenueReportOptions + ): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/revenue-reports/${options.yearDashMonth}/download`, + method: "GET" + } + }).then((response) => response.body); + } + + getUniverseStatisticReports( options: GetUniverseStatisticsReportsOptions ): Promise { return this.request({ @@ -668,7 +875,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseStatisticReportsByTime ( + getUniverseStatisticReportsByTime( options: GetUniverseStatisticsReportsByTimeOptions ): Promise { return this.request({ @@ -680,7 +887,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - downloadUniverseStatisticReportsByTime ( + downloadUniverseStatisticReportsByTime( options: DownloadUniverseStatisticsReportByTimeOptions ): Promise { return this.request({ @@ -692,7 +899,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getMultiUniverses ( + getMultiUniverses( options: MultiGetUniversesOptions ): Promise { return this.request({ @@ -707,7 +914,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getMultiUniversesPermissions ( + getMultiUniversesPermissions( options: MultiGetUniversesPermissionsOptions ): Promise { return this.request({ @@ -722,7 +929,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - activateUniverse ( + activateUniverse( options: ActivateUniverseOptions ): Promise { return this.request({ @@ -735,7 +942,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - deactivateUniverse ( + deactivateUniverse( options: DeactivateUniverseOptions ): Promise { return this.request({ @@ -748,7 +955,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - generateUniverseStatisticReportsByTime ( + generateUniverseStatisticReportsByTime( options: GenerateUniverseStatisticReportsByTimeOptions ): Promise { return this.request({ @@ -761,7 +968,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseConfiguration ( + getUniverseConfiguration( options: GetUniverseConfigurationOptions ): Promise { return this.request({ @@ -773,7 +980,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updateUniverseConfiguration ( + updateUniverseConfiguration( options: UpdateUniverseConfigurationOptions ): Promise { return this.request({ @@ -787,7 +994,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseVIPServersConfiguration ( + getUniverseVIPServersConfiguration( options: GetUniverseVIPServersConfigurationOptions ): Promise { return this.request({ @@ -799,7 +1006,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseTeamCreateSettings ( + getUniverseTeamCreateSettings( options: GetUniverseTeamCreateSettingsOptions ): Promise { return this.request({ @@ -811,21 +1018,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updateUniverseTeamCreateSettings ( - options: UpdateUniverseTeamCreateSettingsOptions - ): Promise { - return this.request({ - requiresAuth: false, - request: { - path: `v1/universes/${options.universeId}/teamcreate`, - method: "PATCH", - json: options - }, - json: true - }).then((response) => response.body); - } - - removeUserFromUniverseTeamCreate ( + removeUserFromUniverseTeamCreate( options: RemoveUserFromUniverseTeamCreateOptions ): Promise { return this.request({ @@ -839,7 +1032,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseTeamCreateMembers ( + getUniverseTeamCreateMembers( options: GetUsersInUniverseTeamCreateOptions ): Promise { return this.request({ @@ -852,7 +1045,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfUniversesTeamCreateAccess ( + getSelfUniversesTeamCreateAccess( options: GetSelfTeamCreateUniversesAccessOptions ): Promise { return this.request({ @@ -865,7 +1058,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfManageableGroups (): Promise { + getSelfManageableGroups(): Promise { return this.request({ requiresAuth: false, request: { @@ -875,7 +1068,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfNotificationStatisticReports (): Promise { + getSelfNotificationStatisticReports(): Promise { return this.request({ requiresAuth: false, request: { @@ -885,7 +1078,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getStudioData (options: GetStudioDataOptions): Promise { + getStudioData(options: GetStudioDataOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -896,7 +1089,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - setStudioData (options: SetStudioDataOptions): Promise { + setStudioData(options: SetStudioDataOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -911,7 +1104,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfUniverses ( + getSelfUniverses( options: GetSelfUniversesOptions ): Promise { return this.request({ @@ -924,7 +1117,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - createUniverseAlias ( + createUniverseAlias( options: CreateUniverseAliasOptions ): Promise { return this.request({ @@ -936,7 +1129,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - deleteUniverseAlias ( + deleteUniverseAlias( options: DeleteUniverseAliasOptions ): Promise { return this.request({ @@ -949,7 +1142,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updateUniverseAlias ( + updateUniverseAlias( options: UpdateUniverseAliasOptions ): Promise { return this.request({ @@ -963,7 +1156,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - createDeveloperProduct ( + createDeveloperProduct( options: CreateDeveloperProductOptions ): Promise { return this.request({ @@ -977,7 +1170,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updateDeveloperProduct ( + updateDeveloperProduct( options: UpdateDeveloperProductOptions ): Promise { return this.request({ diff --git a/src/client/apis/GroupsAPI.ts b/src/client/apis/GroupsAPI.ts index 3cf792f0e..366bf5906 100644 --- a/src/client/apis/GroupsAPI.ts +++ b/src/client/apis/GroupsAPI.ts @@ -44,48 +44,48 @@ export type GetMultiGroups = { export type GetGroupAuditLogsOptions = { groupId: number; actionType: - | "DeletePost" - | "RemoveMember" - | "AcceptJoinRequest" - | "DeclineJoinRequest" - | "PostStatus" - | "ChangeRank" - | "BuyAd" - | "SendAllyRequest" - | "CreateEnemy" - | "AcceptAllyRequest" - | "DeclineAllyRequest" - | "DeleteAlly" - | "DeleteEnemy" - | "AddGroupPlace" - | "RemoveGroupPlace" - | "CreateItems" - | "ConfigureItems" - | "SpendGroupFunds" - | "ChangeOwner" - | "Delete" - | "AdjustCurrencyAmounts" - | "Abandon" - | "Claim" - | "Rename" - | "ChangeDescription" - | "InviteToClan" - | "KickFromClan" - | "CancelCLanInvite" - | "BuyClan" - | "CreateGroupAsset" - | "UpdateGroupAsset" - | "ConfigureGroupAsset" - | "RevertGroupAsset" - | "CreateGroupDeveloperProduct" - | "ConfigureGroupGame" - | "Lock" - | "Unlock" - | "CreateGamePass" - | "CreateBadge" - | "ConfigureBadge" - | "SavePlace" - | "PublishPlace"; + | "DeletePost" + | "RemoveMember" + | "AcceptJoinRequest" + | "DeclineJoinRequest" + | "PostStatus" + | "ChangeRank" + | "BuyAd" + | "SendAllyRequest" + | "CreateEnemy" + | "AcceptAllyRequest" + | "DeclineAllyRequest" + | "DeleteAlly" + | "DeleteEnemy" + | "AddGroupPlace" + | "RemoveGroupPlace" + | "CreateItems" + | "ConfigureItems" + | "SpendGroupFunds" + | "ChangeOwner" + | "Delete" + | "AdjustCurrencyAmounts" + | "Abandon" + | "Claim" + | "Rename" + | "ChangeDescription" + | "InviteToClan" + | "KickFromClan" + | "CancelCLanInvite" + | "BuyClan" + | "CreateGroupAsset" + | "UpdateGroupAsset" + | "ConfigureGroupAsset" + | "RevertGroupAsset" + | "CreateGroupDeveloperProduct" + | "ConfigureGroupGame" + | "Lock" + | "Unlock" + | "CreateGamePass" + | "CreateBadge" + | "ConfigureBadge" + | "SavePlace" + | "PublishPlace"; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; @@ -152,8 +152,12 @@ export type GetGroupsMetaData = { groupLimit: number; currentGroupCount: number; groupStatusMaxLength: number; + groupPostMaxLength: number; + isGroupWallNotificationsEnabled: boolean; + groupWallNotificationsSubscribeIntervalInMilliseconds: number; areProfileGroupsHidden: boolean; isGroupDetailsPolicyEnabled: boolean; + showPreviousGroupNames: boolean; }; export type CreateGroupOptions = { name: string; @@ -372,22 +376,22 @@ export type AcceptRelationshipRequestsOptions = DeclineRelationshipRequestsOptions; export type AcceptRelationshipRequests = unknown; export type DeleteRelationshipOptions = Omit< -DeclineRelationshipRequestsOptions, -"withGroups" + DeclineRelationshipRequestsOptions, + "withGroups" > & { withGroup: number; }; export type DeleteRelationship = unknown; export type CreateRelationshipOptions = Omit< -DeclineRelationshipRequestsOptions, -"withGroups" + DeclineRelationshipRequestsOptions, + "withGroups" > & { withGroup: number; }; export type CreateRelationship = unknown; export type DeclineRelationshipRequestOptions = Omit< -DeclineRelationshipRequestsOptions, -"withGroups" + DeclineRelationshipRequestsOptions, + "withGroups" > & { withGroup: number; }; @@ -583,14 +587,14 @@ export type UpdateRoleOptions = { export type UpdateRole = CreateRole; export default class GroupsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://groups.roblox.com/" }); } - getGroup (options: GetGroupOptions): Promise { + getGroup(options: GetGroupOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -600,7 +604,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getMultiGroups (options: GetMultiGroupsOptions): Promise { + getMultiGroups(options: GetMultiGroupsOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -613,7 +617,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getAuditLogs (options: GetGroupAuditLogsOptions): Promise { + getAuditLogs(options: GetGroupAuditLogsOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -624,7 +628,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupSettings ( + getGroupSettings( options: GetGroupSettingsOptions ): Promise { return this.request({ @@ -636,7 +640,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateGroupSettings ( + updateGroupSettings( options: UpdateGroupSettingsOptions ): Promise { return this.request({ @@ -650,7 +654,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupConfigurationMetaData (): Promise { + getGroupConfigurationMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -660,7 +664,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupsMetaData (): Promise { + getGroupsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -670,7 +674,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createGroup (options: CreateGroupOptions): Promise { + createGroup(options: CreateGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -688,7 +692,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateGroupDescription ( + updateGroupDescription( options: UpdateGroupDescriptionOptions ): Promise { return this.request({ @@ -702,7 +706,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateGroupStatus ( + updateGroupStatus( options: UpdateGroupStatusOptions ): Promise { return this.request({ @@ -716,7 +720,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateGroupIcon (options: UpdateGroupIconOptions): Promise { + updateGroupIcon(options: UpdateGroupIconOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -728,7 +732,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - declineJoinRequests ( + declineJoinRequests( options: DeclineJoinRequestsOptions ): Promise { return this.request({ @@ -744,7 +748,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getJoinRequests (options: GetJoinRequestsOptions): Promise { + getJoinRequests(options: GetJoinRequestsOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -755,7 +759,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - acceptJoinRequests ( + acceptJoinRequests( options: AcceptJoinRequestsOptions ): Promise { return this.request({ @@ -771,7 +775,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - declineJoinRequest ( + declineJoinRequest( options: DeclineJoinRequestOptions ): Promise { return this.request({ @@ -784,7 +788,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getJoinRequest (options: GetJoinRequestOptions): Promise { + getJoinRequest(options: GetJoinRequestOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -794,7 +798,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - acceptJoinRequest ( + acceptJoinRequest( options: AcceptJoinRequestOptions ): Promise { return this.request({ @@ -807,7 +811,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getSelfGroupMembership ( + getSelfGroupMembership( options: GetSelfGroupMembershipOptions ): Promise { return this.request({ @@ -819,7 +823,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupRoles (options: GetGroupRolesOptions): Promise { + getGroupRoles(options: GetGroupRolesOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -829,7 +833,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getMembersWithRole ( + getMembersWithRole( options: GetMembersWithRoleOptions ): Promise { return this.request({ @@ -845,7 +849,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getMembers (options: GetMembersOptions): Promise { + getMembers(options: GetMembersOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -856,7 +860,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - joinGroup (options: JoinGroupOptions): Promise { + joinGroup(options: JoinGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -868,7 +872,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getSelfPendingGroupJoins (): Promise { + getSelfPendingGroupJoins(): Promise { return this.request({ requiresAuth: true, request: { @@ -878,7 +882,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getUserGroups (options: GetUserGroupsOptions): Promise { + getUserGroups(options: GetUserGroupsOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -888,7 +892,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - changeGroupOwner (options: ChangeOwnerOptions): Promise { + changeGroupOwner(options: ChangeOwnerOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -900,7 +904,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - claimGroup (options: ClaimGroupOptions): Promise { + claimGroup(options: ClaimGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -912,7 +916,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - kickMember (options: KickMemberOptions): Promise { + kickMember(options: KickMemberOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -923,7 +927,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateMember (options: UpdateMemberOptions): Promise { + updateMember(options: UpdateMemberOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -935,7 +939,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupPayouts (options: GetGroupPayoutsOptions): Promise { + getGroupPayouts(options: GetGroupPayoutsOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -945,7 +949,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - payoutMembers (options: PayoutMembersOptions): Promise { + payoutMembers(options: PayoutMembersOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -964,7 +968,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateRecurringPayouts ( + updateRecurringPayouts( options: UpdateRecurringPayoutsOptions ): Promise { return this.request({ @@ -985,7 +989,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupRelationships ( + getGroupRelationships( options: GetGroupRelationshipsOptions ): Promise { return this.request({ @@ -1001,7 +1005,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - declineRelationshipRequests ( + declineRelationshipRequests( options: DeclineRelationshipRequestsOptions ): Promise { return this.request({ @@ -1017,7 +1021,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getRelationshipRequests ( + getRelationshipRequests( options: GetRelationshipRequestsOptions ): Promise { return this.request({ @@ -1030,7 +1034,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - acceptRelationshipRequests ( + acceptRelationshipRequests( options: AcceptRelationshipRequestsOptions ): Promise { return this.request({ @@ -1046,7 +1050,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteRelationship ( + deleteRelationship( options: DeleteRelationshipOptions ): Promise { return this.request({ @@ -1059,7 +1063,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createRelationship ( + createRelationship( options: CreateRelationshipOptions ): Promise { return this.request({ @@ -1072,7 +1076,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - acceptRelationshipRequest ( + acceptRelationshipRequest( options: AcceptRelationshipRequestOptions ): Promise { return this.request({ @@ -1084,7 +1088,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - declineRelationshipRequest ( + declineRelationshipRequest( options: DeclineRelationshipRequestOptions ): Promise { return this.request({ @@ -1097,7 +1101,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getRolePermissions ( + getRolePermissions( options: GetRolePermissionsOptions ): Promise { return this.request({ @@ -1109,7 +1113,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateRolePermissions ( + updateRolePermissions( options: UpdateRolePermissionsOptions ): Promise { return this.request({ @@ -1123,7 +1127,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGuestPermissions ( + getGuestPermissions( options: GetGuestPermissionsOptions ): Promise { return this.request({ @@ -1135,7 +1139,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getAllRolesPermissions ( + getAllRolesPermissions( options: GetAllRolesPermissionsOptions ): Promise { return this.request({ @@ -1147,7 +1151,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getSocialLinks (options: GetSocialLinksOptions): Promise { + getSocialLinks(options: GetSocialLinksOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -1157,7 +1161,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createSocialLink (options: PostSocialLinkOptions): Promise { + createSocialLink(options: PostSocialLinkOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1169,7 +1173,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteSocialLink ( + deleteSocialLink( options: DeleteSocialLinkOptions ): Promise { return this.request({ @@ -1182,7 +1186,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateSocialLink ( + updateSocialLink( options: UpdateSocialLinkOptions ): Promise { return this.request({ @@ -1196,7 +1200,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getWallPosts (options: GetWallPostsOptions): Promise { + getWallPosts(options: GetWallPostsOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -1207,7 +1211,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createWallPost (options: CreateWallPostOptions): Promise { + createWallPost(options: CreateWallPostOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1219,7 +1223,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteWallPost (options: DeleteWallPostOptions): Promise { + deleteWallPost(options: DeleteWallPostOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1230,7 +1234,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteUserWallPosts ( + deleteUserWallPosts( options: DeleteWallPostsByUserOptions ): Promise { return this.request({ @@ -1243,7 +1247,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - searchGroupsByKeyword ( + searchGroupsByKeyword( options: SearchGroupsByKeywordOptions ): Promise { return this.request({ @@ -1256,7 +1260,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - searchGroups (options: SearchGroupsOptions): Promise { + searchGroups(options: SearchGroupsOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -1267,7 +1271,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupSearchMetaData (): Promise { + getGroupSearchMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -1277,7 +1281,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getRolesByIds (options: GetRolesByIdsOptions): Promise { + getRolesByIds(options: GetRolesByIdsOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -1290,7 +1294,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getUserPrimaryGroup ( + getUserPrimaryGroup( options: GetUserPrimaryGroupOptions ): Promise { return this.request({ @@ -1302,7 +1306,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - removePrimaryGroup (): Promise { + removePrimaryGroup(): Promise { return this.request({ requiresAuth: true, request: { @@ -1313,7 +1317,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - setPrimaryGroup (options: SetPrimaryGroupOptions): Promise { + setPrimaryGroup(options: SetPrimaryGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1325,7 +1329,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createRole (options: CreateRoleOptions): Promise { + createRole(options: CreateRoleOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1337,7 +1341,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteRole (options: DeleteRoleOptions): Promise { + deleteRole(options: DeleteRoleOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1348,7 +1352,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateRole (options: UpdateRoleOptions): Promise { + updateRole(options: UpdateRoleOptions): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/InventoryAPI.ts b/src/client/apis/InventoryAPI.ts index c6fcb998b..6206e8408 100644 --- a/src/client/apis/InventoryAPI.ts +++ b/src/client/apis/InventoryAPI.ts @@ -1,6 +1,26 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +export type CanViewInventory = { + canView: boolean; +}; +export type InventoryItem = { + name: string; + displayName: string; + filter: string; + id: number; + type: string; + categoryType: string; +}; +export type InventoryCategory = { + name: string; + displayName: string; + categoryType: string; + items: InventoryItem[]; +}; +export type InventoryCategories = { + categories: InventoryCategory[]; +}; export type GetPackageAssetsOptions = { packageId: number; }; @@ -10,61 +30,61 @@ export type GetPackageAssets = { export type GetUserCollectiblesOptions = { userId: number; assetType?: - | "Image" - | "TShirt" - | "Audio" - | "Mesh" - | "Lua" - | "HTML" - | "Text" - | "Hat" - | "Place" - | "Model" - | "Shirt" - | "Pants" - | "Decal" - | "Avatar" - | "Head" - | "Face" - | "Gear" - | "Badge" - | "GroupEmblem" - | "Animation" - | "Arms" - | "Legs" - | "Torso" - | "RightArm" - | "LeftArm" - | "LeftLeg" - | "RightLeg" - | "Package" - | "YouTubeVideo" - | "GamePass" - | "App" - | "Code" - | "Plugin" - | "SolidModel" - | "MeshPart" - | "HairAccessory" - | "NeckAccessory" - | "ShoulderAccessory" - | "FrontAccessory" - | "BackAccessory" - | "WaistAccessory" - | "ClimbAnimation" - | "DeathAnimation" - | "FallAnimation" - | "IdleAnimation" - | "JumpAnimation" - | "RunAnimation" - | "SwimAnimation" - | "WalkAnimation" - | "PoseAnimation" - | "LocalizationTableManifest" - | "LocalizationTableTranslation" - | "EmoteAnimation" - | "Video" - | "TexturePack"; + | "Image" + | "TShirt" + | "Audio" + | "Mesh" + | "Lua" + | "HTML" + | "Text" + | "Hat" + | "Place" + | "Model" + | "Shirt" + | "Pants" + | "Decal" + | "Avatar" + | "Head" + | "Face" + | "Gear" + | "Badge" + | "GroupEmblem" + | "Animation" + | "Arms" + | "Legs" + | "Torso" + | "RightArm" + | "LeftArm" + | "LeftLeg" + | "RightLeg" + | "Package" + | "YouTubeVideo" + | "GamePass" + | "App" + | "Code" + | "Plugin" + | "SolidModel" + | "MeshPart" + | "HairAccessory" + | "NeckAccessory" + | "ShoulderAccessory" + | "FrontAccessory" + | "BackAccessory" + | "WaistAccessory" + | "ClimbAnimation" + | "DeathAnimation" + | "FallAnimation" + | "IdleAnimation" + | "JumpAnimation" + | "RunAnimation" + | "SwimAnimation" + | "WalkAnimation" + | "PoseAnimation" + | "LocalizationTableManifest" + | "LocalizationTableTranslation" + | "EmoteAnimation" + | "Video" + | "TexturePack"; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; @@ -137,8 +157,8 @@ export type GetUserInventory = { }[]; }; export type GetUserInventoryByAssetTypeIdOptions = Omit< -GetUserInventoryOptions, -"assetTypes" + GetUserInventoryOptions, + "assetTypes" > & { assetTypeId: number; }; @@ -161,14 +181,14 @@ export type GetUserInventoryByAssetTypeId = { }; export default class InventoryAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://inventory.roblox.com/" }); } - getPackageAssets ( + getPackageAssets( options: GetPackageAssetsOptions ): Promise { return this.request({ @@ -180,7 +200,7 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getUserCollectibles ( + getUserCollectibles( options: GetUserCollectiblesOptions ): Promise { return this.request({ @@ -193,7 +213,7 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getUserItemsByTypeAndTargetId ( + getUserItemsByTypeAndTargetId( options: GetUserItemsByTypeAndTargetIdOptions ): Promise { return this.request({ @@ -205,7 +225,39 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getAssetOwners (options: GetAssetOwnersOptions): Promise { + canViewInventory(options: { userId: number }): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/can-view-inventory` + }, + json: true + }).then((response) => response.body); + } + + getCategories(options: { userId: number }): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/categories` + }, + json: true + }).then((response) => response.body); + } + + getCategoriesFavorites(options: { + userId: number; + }): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/categories/favorites` + }, + json: true + }).then((response) => response.body); + } + + getAssetOwners(options: GetAssetOwnersOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -216,7 +268,7 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getUserInventory ( + getUserInventory( options: GetUserInventoryOptions ): Promise { return this.request({ @@ -229,7 +281,7 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getUserInventoryByAssetTypeId ( + getUserInventoryByAssetTypeId( options: GetUserInventoryByAssetTypeIdOptions ): Promise { return this.request({ diff --git a/src/client/apis/LocaleAPI.ts b/src/client/apis/LocaleAPI.ts index b818c603d..3ca3862e9 100644 --- a/src/client/apis/LocaleAPI.ts +++ b/src/client/apis/LocaleAPI.ts @@ -52,14 +52,14 @@ export type SetUserLocale = { }; export default class LocaleAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://locale.roblox.com/" }); } - getCountryRegions ( + getCountryRegions( options: GetCountryRegionsOptions ): Promise { return this.request({ @@ -72,7 +72,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getLocales (options: GetLocalesOptions): Promise { + getLocales(options: GetLocalesOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -83,7 +83,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getSupportedLocales (): Promise { + getSupportedLocales(): Promise { return this.request({ requiresAuth: false, request: { @@ -93,7 +93,17 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getUserLocale (): Promise { + getSupportedLocalsForCreators(): Promise { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales/supported-locales-for-creators` + }, + json: true + }).then((response) => response.body); + } + + getUserLocale(): Promise { return this.request({ requiresAuth: true, request: { @@ -103,7 +113,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getLocusSupportedLocales (): Promise { + getLocusSupportedLocales(): Promise { return this.request({ requiresAuth: false, request: { @@ -113,7 +123,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - setUserLocale (options: SetUserLocaleOptions): Promise { + setUserLocale(options: SetUserLocaleOptions): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/MetricsAPI.ts b/src/client/apis/MetricsAPI.ts index 5e6f8136e..b5fe25367 100644 --- a/src/client/apis/MetricsAPI.ts +++ b/src/client/apis/MetricsAPI.ts @@ -10,7 +10,7 @@ export type RecordThumbnailLoadOptions = { thumbnailType: string; }; export type RecordThumbnailLoad = unknown; -export type RecordBundleLoadOptions = { +export type ReportBundleLoadOptions = { bundleUrl: string; bundleName: string; loadTimeInMilliseconds: number; @@ -18,17 +18,17 @@ export type RecordBundleLoadOptions = { loadState: string; bundleContentType: string; }; -export type RecordBundleLoad = unknown; +export type ReportBundleLoad = unknown; export default class LocaleAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://metrics.roblox.com/" }); } - getThumbnailsMetaData (): Promise { + getThumbnailsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -38,7 +38,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - recordThumbnailLoad ( + recordThumbnailLoad( options: RecordThumbnailLoadOptions ): Promise { return this.request({ @@ -52,13 +52,13 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - recordBundleLoad ( - options: RecordBundleLoadOptions - ): Promise { + recordBundleLoad( + options: ReportBundleLoadOptions + ): Promise { return this.request({ requiresAuth: false, request: { - path: `v1/thumbnails/metadata`, + path: `v1/bundle-metrics/report`, method: "POST", json: options }, diff --git a/src/client/apis/PrivateMessagesAPI.ts b/src/client/apis/PrivateMessagesAPI.ts index e4a3f2f97..5cf15040f 100644 --- a/src/client/apis/PrivateMessagesAPI.ts +++ b/src/client/apis/PrivateMessagesAPI.ts @@ -86,14 +86,14 @@ export type UnArchiveMessagesOptions = ArchiveMessagesOptions; export type UnArchiveMessages = ArchiveMessages; export default class PrivateMessagesAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://privatemessages.roblox.com/" }); } - getAnnouncements (): Promise { + getAnnouncements(): Promise { return this.request({ requiresAuth: false, request: { @@ -103,7 +103,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getAnnouncementsMetaData (): Promise { + getAnnouncementsMetaData(): Promise { return this.request({ requiresAuth: true, request: { @@ -113,7 +113,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getMessages (options: GetMessagesOptions): Promise { + getMessages(options: GetMessagesOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -124,7 +124,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getMessage (options: GetMessageOptions): Promise { + getMessage(options: GetMessageOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -134,7 +134,17 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getUnreadMessagesCount (): Promise { + canMessage(options: { userId: number }): Promise { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/${options.userId}/can-message` + }, + json: true + }).then((response) => response.body.canMessage); + } + + getUnreadMessagesCount(): Promise { return this.request({ requiresAuth: true, request: { @@ -144,7 +154,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - archiveMessages (options: ArchiveMessagesOptions): Promise { + archiveMessages(options: ArchiveMessagesOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -156,7 +166,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - markMessagesRead ( + markMessagesRead( options: MarkMessagesReadOptions ): Promise { return this.request({ @@ -170,7 +180,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - markMessagesUnread ( + markMessagesUnread( options: MarkMessagesUnreadOptions ): Promise { return this.request({ @@ -184,7 +194,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - sendMessage (options: SendMessageOptions): Promise { + sendMessage(options: SendMessageOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -196,7 +206,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - unArchiveMessages ( + unArchiveMessages( options: UnArchiveMessagesOptions ): Promise { return this.request({ diff --git a/src/client/apis/PublishAPI.ts b/src/client/apis/PublishAPI.ts index 61d2f0d40..61b827425 100644 --- a/src/client/apis/PublishAPI.ts +++ b/src/client/apis/PublishAPI.ts @@ -56,14 +56,17 @@ export type UploadPluginIcon = { }; export default class PublishAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://publish.roblox.com/" }); } - uploadAssets (options: UploadAssetsOptions): Promise { + /** + * @hidden + */ + uploadAssets(options: UploadAssetsOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -75,7 +78,7 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - publishAudio (options: PublishAudioOptions): Promise { + publishAudio(options: PublishAudioOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -87,7 +90,7 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - verifyAudio (options: VerifyAudioOptions): Promise { + verifyAudio(options: VerifyAudioOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -99,7 +102,7 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - publishBadgeIcon ( + publishBadgeIcon( options: PublishBadgeIconOptions ): Promise { return this.request({ @@ -113,7 +116,10 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - publishGamePassIcon ( + /** + * @hidden + */ + publishGamePassIcon( options: PublishGamePassIconOptions ): Promise { return this.request({ @@ -127,7 +133,7 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - uploadGameThumbnail ( + uploadGameThumbnail( options: UploadGameThumbnailOptions ): Promise { return this.request({ @@ -141,7 +147,7 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - uploadPluginIcon ( + uploadPluginIcon( options: UploadPluginIconOptions ): Promise { return this.request({ diff --git a/src/client/apis/UsersAPI.ts b/src/client/apis/UsersAPI.ts index e5fd622df..86c177310 100644 --- a/src/client/apis/UsersAPI.ts +++ b/src/client/apis/UsersAPI.ts @@ -79,16 +79,21 @@ export type SearchUsers = { displayName: string; }[]; }; +export type UserNameHistory = { + previousPageCursor: string; + nextPageCursor: string; + data: { name: string }[]; +}; export default class UsersAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://users.roblox.com/" }); } - validateDisplayNameNewUser ( + validateDisplayNameNewUser( options: ValidateDisplayNameNewUserOptions ): Promise { return this.request({ @@ -101,7 +106,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - validateDisplayNameExistingUser ( + validateDisplayNameExistingUser( options: ValidateDisplayNameExistingUserOptions ): Promise { return this.request({ @@ -114,7 +119,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - setDisplayName ( + setDisplayName( options: SetSelfDisplayNameOptions ): Promise { return this.request({ @@ -128,7 +133,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUserById (options: GetUserByIdOptions): Promise { + getUserById(options: GetUserByIdOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -138,7 +143,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getAuthenticatedUserInformation (): Promise { + getAuthenticatedUserInformation(): Promise { return this.request({ // This should actually be "true", but as it's needed in client.login, it's set to false requiresAuth: false, @@ -149,7 +154,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUsersByUsernames ( + getUsersByUsernames( options: GetUsersByUsernamesOptions ): Promise { return this.request({ @@ -163,7 +168,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUsersByIds (options: GetUsersByUserIdsOptions): Promise { + getUsersByIds(options: GetUsersByUserIdsOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -175,29 +180,18 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUserStatus (options: GetUserStatusOptions): Promise { + getUserNameHistory(options: { userId: number }): Promise { return this.request({ requiresAuth: false, request: { - path: `v1/users/${options.userId}/status` - }, - json: true - }).then((response) => response.body); - } - - updateStatus (options: UpdateSelfStatusOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/status`, - method: "PATCH", - json: options + path: `v1/users/${options.userId}/username-history`, + method: "GET" }, json: true }).then((response) => response.body); } - searchUsers (options: SearchUsersOptions): Promise { + searchUsers(options: SearchUsersOptions): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/index.ts b/src/client/apis/index.ts index a922c9423..027732f2b 100644 --- a/src/client/apis/index.ts +++ b/src/client/apis/index.ts @@ -3,7 +3,6 @@ import GeneralAPI from "./GeneralAPI"; import AccountInformationAPI from "./AccountInformationAPI"; import AccountSettingsAPI from "./AccountSettingsAPI"; import AdConfigurationAPI from "./AdConfigurationAPI"; -import AdsAPI from "./AdsAPI"; import AssetDeliveryAPI from "./AssetDeliveryAPI"; import AuthAPI from "./AuthAPI"; import AvatarAPI from "./AvatarAPI"; @@ -42,7 +41,6 @@ export declare type APIs = { accountInformationAPI: AccountInformationAPI; accountSettingsAPI: AccountSettingsAPI; adConfigurationAPI: AdConfigurationAPI; - adsAPI: AdsAPI; assetDeliveryAPI: AssetDeliveryAPI; authAPI: AuthAPI; avatarAPI: AvatarAPI; @@ -79,12 +77,11 @@ export declare type APIs = { twpStepVerification: TwoStepVerificationAPI; }; -export default function initAPIs (client: Client): APIs { +export default function initAPIs(client: Client): APIs { return { accountInformationAPI: new AccountInformationAPI(client), accountSettingsAPI: new AccountSettingsAPI(client), adConfigurationAPI: new AdConfigurationAPI(client), - adsAPI: new AdsAPI(client), assetDeliveryAPI: new AssetDeliveryAPI(client), authAPI: new AuthAPI(client), avatarAPI: new AvatarAPI(client), diff --git a/src/client/lib/ClientSocket/ClientSocket.ts b/src/client/lib/ClientSocket/ClientSocket.ts index dae59c0d3..f21720e45 100644 --- a/src/client/lib/ClientSocket/ClientSocket.ts +++ b/src/client/lib/ClientSocket/ClientSocket.ts @@ -108,10 +108,10 @@ export class Socket extends EventEmitter { 3, true ); - this.socket.headers.Cookie = - this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); - const maxRetries = - this.client.options.setup?.websocket?.maxRetries ?? 3; + this.socket.headers.Cookie + = this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); + const maxRetries + = this.client.options.setup?.websocket?.maxRetries ?? 3; const attemptReconnect = (): unknown => connectSocket(++retries); const onError = (error: Error): void => { @@ -162,12 +162,12 @@ export class Socket extends EventEmitter { message }); - const parsedMessage = !(message instanceof Object) ? - JSON.parse(message) : - message; - const messageType = parsedMessage.Type ? - parsedMessage.Type.toLowerCase() : - null; + const parsedMessage = !(message instanceof Object) + ? JSON.parse(message) + : message; + const messageType = parsedMessage.Type + ? parsedMessage.Type.toLowerCase() + : null; const socketHandler = socketHandlers.get(name.toLowerCase()); if (socketHandler) { diff --git a/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts b/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts index 4a26c2002..f085f86ee 100644 --- a/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts +++ b/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts @@ -20,8 +20,8 @@ export default class DataStoreHttpRequest { this.options = options; // Adjusting the body - this.options.body = - this.options.data.length === 0 ? " " : this.options.data; + this.options.body + = this.options.data.length === 0 ? " " : this.options.data; // Always POST this.options.method = this.options.method || "POST"; diff --git a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts index ac12ca01c..00b8aec3a 100644 --- a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts @@ -70,13 +70,13 @@ export default class GenericDataStore { buildPostDataForKey (key: string, index = 0): string { const encodedQueryString = querystring.encode({ - [`qkeys[${index}].scope`]: this.scope ? - this.safeEncodeValue(this.scope) : - "", + [`qkeys[${index}].scope`]: this.scope + ? this.safeEncodeValue(this.scope) + : "", [`qkeys[${index}].target`]: this.legacy ? "" : this.safeEncodeValue(key), - [`qkeys[${index}].key`]: this.legacy ? - this.safeEncodeValue(key) : - this.safeEncodeValue(this.name) + [`qkeys[${index}].key`]: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name) }); return `&${encodedQueryString}`; @@ -90,9 +90,9 @@ export default class GenericDataStore { buildSetUrl (key: string, valueLength: number): string { const encodedQueryString = this.createQueryString({ - key: this.legacy ? - this.safeEncodeValue(key) : - this.safeEncodeValue(this.name), + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), target: this.legacy ? "" : this.safeEncodeValue(key), valueLength }); @@ -106,9 +106,9 @@ export default class GenericDataStore { expectedValueLength: number ): string { const encodedQueryString = this.createQueryString({ - key: this.legacy ? - this.safeEncodeValue(key) : - this.safeEncodeValue(this.name), + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), target: this.legacy ? "" : this.safeEncodeValue(key), valueLength, expectedValueLength @@ -119,9 +119,9 @@ export default class GenericDataStore { buildIncrementUrl (key: string, delta: number): string { const encodedQueryString = this.createQueryString({ - key: this.legacy ? - this.safeEncodeValue(key) : - this.safeEncodeValue(this.name), + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), target: this.legacy ? "" : this.safeEncodeValue(key), value: delta }); @@ -131,9 +131,9 @@ export default class GenericDataStore { buildRemoveUrl (key: string): string { const encodedQueryString = this.createQueryString({ - key: this.legacy ? - this.safeEncodeValue(key) : - this.safeEncodeValue(this.name), + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), target: this.legacy ? "" : this.safeEncodeValue(key) }); diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts index ca1c877ee..142d59eb1 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts @@ -74,8 +74,8 @@ export default class OrderedDataStore< const encodedQueryString = this.createQueryString({ key: this.safeEncodeValue(this.name), pageSize: - options.pageSize || - DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, + options.pageSize + || DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, ascending: options.ascending ? "True" : "False", inclusiveMinValue: options.minValue, inclusiveMaxValue: options.maxValue, diff --git a/src/client/lib/DataStoreManager/util/checks.ts b/src/client/lib/DataStoreManager/util/checks.ts index 5c4fd3ae3..021f0d5df 100644 --- a/src/client/lib/DataStoreManager/util/checks.ts +++ b/src/client/lib/DataStoreManager/util/checks.ts @@ -2,8 +2,8 @@ import DataStoreManagerConstants from "./constants"; export function checkKey (key: string): boolean { if ( - key.length === 0 || - key.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + key.length === 0 + || key.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit ) { throw new Error( `Key cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` @@ -23,8 +23,8 @@ export function checkPlaceId (placeId: number): boolean { export function checkName (name: string): boolean { if ( - name.length === 0 || - name.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + name.length === 0 + || name.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit ) { throw new Error( `DataStore name cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` @@ -36,8 +36,8 @@ export function checkName (name: string): boolean { export function checkScope (scope: string): boolean { if ( - scope.length === 0 || - scope.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + scope.length === 0 + || scope.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit ) { throw new Error( `DataStore scope cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` @@ -49,8 +49,8 @@ export function checkScope (scope: string): boolean { export function checkValue (value: string): boolean { if ( - value.length === 0 || - value.length > DataStoreManagerConstants.DFInt.DataStoreMaxValueSize + value.length === 0 + || value.length > DataStoreManagerConstants.DFInt.DataStoreMaxValueSize ) { throw new Error( `DataStore values cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreMaxValueSize} characters!` diff --git a/src/controllers/rest/RESTController.ts b/src/controllers/rest/RESTController.ts index 8a45d07ea..8643bbc0b 100644 --- a/src/controllers/rest/RESTController.ts +++ b/src/controllers/rest/RESTController.ts @@ -92,10 +92,10 @@ class RESTController { */ async getXCSRFToken (): Promise { if ( - !this.options.xcsrf || - Date.now() - (this.options.xcsrfSet || 0) >= - (this.options.xcsrfRefreshInterval || - DefaultRESTControllerOptions.xcsrfRefreshInterval) + !this.options.xcsrf + || Date.now() - (this.options.xcsrfSet || 0) + >= (this.options.xcsrfRefreshInterval + || DefaultRESTControllerOptions.xcsrfRefreshInterval) ) { // Refresh token await this.fetchXCSRFToken().then((token) => { diff --git a/src/controllers/rest/lib/getRequester.ts b/src/controllers/rest/lib/getRequester.ts index 38594eb35..d10a695a0 100644 --- a/src/controllers/rest/lib/getRequester.ts +++ b/src/controllers/rest/lib/getRequester.ts @@ -6,9 +6,9 @@ export default function getRequester ( customRequester?: RESTController["requester"] ) { if ( - !controller.requester && - !controller.client.options.rest!.requester && - customRequester === undefined + !controller.requester + && !controller.client.options.rest!.requester + && customRequester === undefined ) { let requester: null | any; diff --git a/src/controllers/rest/request/prepare.ts b/src/controllers/rest/request/prepare.ts index 70dfd3a8a..8a0af2d76 100644 --- a/src/controllers/rest/request/prepare.ts +++ b/src/controllers/rest/request/prepare.ts @@ -32,9 +32,9 @@ export default async function prepare ( } } if ( - (request.requestOptions.xcsrf !== false && - request.requestOptions.method.toLowerCase() !== "get") || - request.requestOptions.xcsrf === true + (request.requestOptions.xcsrf !== false + && request.requestOptions.method.toLowerCase() !== "get") + || request.requestOptions.xcsrf === true ) { request.requestOptions.headers = { ...request.requestOptions.headers, @@ -51,16 +51,16 @@ export default async function prepare ( ); } if (request.requestOptions.json) { - request.requestOptions.body = - typeof request.requestOptions.json === "string" ? - request.requestOptions.json : - JSON.stringify(request.requestOptions.json); + request.requestOptions.body + = typeof request.requestOptions.json === "string" + ? request.requestOptions.json + : JSON.stringify(request.requestOptions.json); request.requestOptions.headers["content-type"] = "application/json"; delete request.requestOptions.json; } if (!request.requestOptions.excludeCookies) { - request.requestOptions.headers.Cookie = - request.controller.cookieJar.getCookieStringSync( + request.requestOptions.headers.Cookie + = request.controller.cookieJar.getCookieStringSync( request.requestOptions.url ); } diff --git a/src/controllers/rest/response/RESTResponse.ts b/src/controllers/rest/response/RESTResponse.ts index 81218b4c5..6289e7c60 100644 --- a/src/controllers/rest/response/RESTResponse.ts +++ b/src/controllers/rest/response/RESTResponse.ts @@ -31,16 +31,16 @@ export default class RESTResponse { } else { const error = allProcessed.find( (err) => - err instanceof BloxyHttpError && - err.name === "BloxyInvalidStatusMessageError" && - err.statusMessage.includes("Token Validation Failed") + err instanceof BloxyHttpError + && err.name === "BloxyInvalidStatusMessageError" + && err.statusMessage.includes("Token Validation Failed") ); if (error) { // 1 attempt = 0 retries if ( - this.request.attempts - 1 === - this.controller.getXCSRFTokenRefreshMaxRetries() + this.request.attempts - 1 + === this.controller.getXCSRFTokenRefreshMaxRetries() ) { throw error; } else { diff --git a/src/controllers/rest/response/handlers/validStatusCode.ts b/src/controllers/rest/response/handlers/validStatusCode.ts index a8e0340da..8924a2f45 100644 --- a/src/controllers/rest/response/handlers/validStatusCode.ts +++ b/src/controllers/rest/response/handlers/validStatusCode.ts @@ -9,8 +9,8 @@ export default function validStatusCode ( const responseOptions = request.requestOptions.responseOptions || {}; if ( - request.requestOptions.responseOptions && - request.requestOptions.checks?.statusCode + request.requestOptions.responseOptions + && request.requestOptions.checks?.statusCode ) { const allowedStatusCodes = responseOptions.allowedStatusCodes || []; const disallowedStatusCodes = responseOptions.disallowedStatusCodes || []; @@ -28,30 +28,30 @@ export default function validStatusCode ( isValid = false; } } else if ( - allowedStatusCodes.length === 0 && - disallowedStatusCodes.length > 0 + allowedStatusCodes.length === 0 + && disallowedStatusCodes.length > 0 ) { // Only these are disallowed if (isDisallowed) { isValid = false; } } else if ( - allowedStatusCodes.length === 0 && - disallowedStatusCodes.length === 0 + allowedStatusCodes.length === 0 + && disallowedStatusCodes.length === 0 ) { // All status are allowed } } - return isValid ? - true : - new BloxyHttpError({ + return isValid + ? true + : new BloxyHttpError({ statusMessage: responseData.statusMessage, statusCode: responseData.statusCode, message: `Invalid status code in response. Body: ${ - responseData.body instanceof Object ? - JSON.stringify(responseData.body) : - responseData.body + responseData.body instanceof Object + ? JSON.stringify(responseData.body) + : responseData.body }`, name: "BloxyHttpInvalidStatusCodeError", possibleReasons: [] diff --git a/src/controllers/rest/response/handlers/validStatusMessage.ts b/src/controllers/rest/response/handlers/validStatusMessage.ts index f41878547..fd6a8b8f9 100644 --- a/src/controllers/rest/response/handlers/validStatusMessage.ts +++ b/src/controllers/rest/response/handlers/validStatusMessage.ts @@ -9,12 +9,12 @@ export default function validStatusMessage ( let isValid = true; if ( - request.requestOptions.responseOptions && - request.requestOptions.checks?.statusMessage + request.requestOptions.responseOptions + && request.requestOptions.checks?.statusMessage ) { const allowedStatusMessages = responseOptions.allowedStatusMessages || []; - const disallowedStatusMessages = - responseOptions.disallowedStatusMessages || []; + const disallowedStatusMessages + = responseOptions.disallowedStatusMessages || []; const isAllowed = allowedStatusMessages.some((statusMessage) => responseData.statusMessage.toLowerCase().includes(statusMessage) @@ -29,24 +29,24 @@ export default function validStatusMessage ( isValid = false; } } else if ( - allowedStatusMessages.length === 0 && - disallowedStatusMessages.length > 0 + allowedStatusMessages.length === 0 + && disallowedStatusMessages.length > 0 ) { // Only these are disallowed if (isDisallowed) { isValid = false; } } else if ( - allowedStatusMessages.length === 0 && - disallowedStatusMessages.length === 0 + allowedStatusMessages.length === 0 + && disallowedStatusMessages.length === 0 ) { // All status are allowed } } - return isValid ? - true : - new BloxyHttpError({ + return isValid + ? true + : new BloxyHttpError({ statusCode: responseData.statusCode, statusMessage: responseData.statusMessage, message: `Invalid status message detected in response.`, diff --git a/src/index.ts b/src/index.ts index 829f99f66..4e379cccd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,95 +1,42 @@ export { default as Client } from "./client"; export type { - AddStarCodeAffiliate, - AddStarCodeAffiliateOptions, - DeletePhone, - DeletePhoneOptions, - GetConsecutiveXboxLoginDays, - GetMetaData as AccountInformationAPIGetMetaData, - GetSelfPromotionChannels, - GetStarCodeAffiliate, - GetUserBirthdate, - GetUserDescription, - GetUserGender, - GetUserPromotionChannels, - GetUserPromotionChannelsOptions, - GetVerifiedPhoneNumber, - RemoveStarCodeAffiliate, - ResendPhoneCode, - ResendPhoneCodeOptions, - SetPhoneNumber, - SetPhoneNumberOptions, - UpdateUserBirthdate, - UpdateUserBirthdateOptions, - UpdateUserDescription, - UpdateUserDescriptionOptions, - UpdateUserGender, - UpdateUserGenderOptions, - UpdateUserPromotionChannelsOptions, - VerifyPhone, - VerifyPhoneOptions + UserAccountBirthdate, + UserAccountDescription, + UserAccountGender, + UserAccountMetaData, + UserAccountOwnPromotionChannels, + UserAccountPromotionChannels, + UserAccountRobloxBadge, + UserAccountRobloxBadges, + UserAccountSetStarCodeAffiliate, + UserAccountStarCodeAffiliate, + UserAccountXboxConsecutiveLoginDays } from "./client/apis/AccountInformationAPI"; export type { - GetAppChatPrivacy, - GetContactUpsell, - GetGameChatPrivacy, - GetInventoryPrivacy, - GetIsXboxUsernameValid, - GetIsXboxUsernameValidOptions, - GetSettingsGroups, - GetUserEmailStatus, - GetUserPrivacy, - GetUserPrivacySettingsInfo, - GetUserPrivateMessagePrivacy, - GetUserTradePrivacy, - GetUserTradeQualityFilter, - GetWebsiteTheme, - GetWebsiteThemes, - SendEmailVerification, - UpdateAppChatPrivacy, - UpdateAppChatPrivacyOptions, - UpdateContactUpsellSuppression, - UpdateContactUpsellSuppressionOptions, - UpdateGameChatPrivacy, - UpdateGameChatPrivacyOptions, - UpdateInventoryPrivacy, - UpdateInventoryPrivacyOptions, - UpdateTwoStepStatus, - UpdateTwoStepStatusOptions, - UpdateUserEmail, - UpdateUserEmailOptions, - UpdateUserPrivacy, - UpdateUserPrivacyOptions, - UpdateUserPrivateMessagePrivacy, - UpdateUserPrivateMessagePrivacyOptions, - UpdateUserPromotionChannels, - UpdateUserTradePrivacy, - UpdateUserTradePrivacyOptions, - UpdateUserTradeQualityFilter, - UpdateUserTradeQualityFilterOptions, - UpdateWebsiteTheme, - UpdateWebsiteThemeOptions + AccountSettingsAppChatPrivacy, + AccountSettingsBlockUser, + AccountSettingsGameChatPrivacy, + AccountSettingsGroup, + AccountSettingsGroups, + AccountSettingsInventoryPrivacy, + AccountSettingsMetaData, + AccountSettingsPrivacy, + AccountSettingsPrivacyInfo, + AccountSettingsPrivateMessagePrivacy, + AccountSettingsVisibilityPrivacy } from "./client/apis/AccountSettingsAPI"; export type { - CreateAd, - CreateAdOptions, - GetCreateAdMetaData, - GetSponsoredGames, - GetSponsoredGamesOptions, - RunAd, - RunAdOptions, - StopAd, - StopAdOptions + AdConfigurationCreateSponsoredGameAd, + AdConfigurationSponsoredGame, + AdConfigurationSponsoredGames, + AdConfigurationStopSponsoredGameAd, + AdConfigurationTargetAgeBracket, + AdConfigurationTargetDeviceType, + AdConfigurationTargetGender, + AdConfigurationUniverse, + AdConfigurationUniverses } from "./client/apis/AdConfigurationAPI"; -export type { - CreateAssetAd, - CreateAssetAdOptions, - CreateGamePassAd, - CreateGamePassAdOptions, - CreateGroupAd, - CreateGroupAdOptions -} from "./client/apis/AdsAPI"; export type { BaseAsset, BaseAssetDeliveryOptions, @@ -119,7 +66,9 @@ export type { ChangeUsername, ChangeUsernameOptions, GetAuthMetaData, - GetAuthTicket, + AuthMetaData, + AuthPin, + AuthTicket, GetCredentialsVerificationStatus, GetCredentialsVerificationStatusOptions, GetCurrentPasswordStatus, @@ -806,8 +755,8 @@ export type { } from "./client/apis/LocaleAPI"; export type { GetThumbnailsMetaData, - RecordBundleLoad, - RecordBundleLoadOptions, + ReportBundleLoad as RecordBundleLoad, + ReportBundleLoadOptions as RecordBundleLoadOptions, RecordThumbnailLoad, RecordThumbnailLoadOptions } from "./client/apis/MetricsAPI"; diff --git a/src/structures/ClientUser.ts b/src/structures/ClientUser.ts index b7ffccbc8..d7032046f 100644 --- a/src/structures/ClientUser.ts +++ b/src/structures/ClientUser.ts @@ -1,18 +1,5 @@ import Client from "../client"; import { PartialUser } from "./User"; -import { - UpdateContactUpsellSuppressionOptions, - UpdateTwoStepStatusOptions, - UpdateUserPrivacyOptions, - UpdateUserPromotionChannelsOptions -} from "../client/apis/AccountSettingsAPI"; -import { - DeletePhoneOptions, - ResendPhoneCodeOptions, - SetPhoneNumberOptions, - UpdateUserBirthdateOptions, - VerifyPhoneOptions -} from "../client/apis/AccountInformationAPI"; export interface ClientUserOptions { id: number; @@ -22,258 +9,8 @@ export interface ClientUserOptions { export default class ClientUser extends PartialUser { public client: Client; - constructor (data: ClientUserOptions, client: Client) { + constructor(data: ClientUserOptions, client: Client) { super(data, client); this.client = client; } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getAppChatPrivacy () { - return this.client.apis.accountSettingsAPI.getAppChatPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateAppChatPrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateAppChatPrivacy({ - appChatPrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getGameChatPrivacy () { - return this.client.apis.accountSettingsAPI.getGameChatPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateGameChatPrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateGameChatPrivacy({ - gameChatPrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getInventoryPrivacy () { - return this.client.apis.accountSettingsAPI.getInventoryPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateInventoryPrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateInventoryPrivacy({ - inventoryPrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPrivacy () { - return this.client.apis.accountSettingsAPI.getUserPrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updatePrivacy (options: UpdateUserPrivacyOptions) { - return this.client.apis.accountSettingsAPI.updateUserPrivacy(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPrivacySettingsInfo () { - return this.client.apis.accountSettingsAPI.getUserPrivacySettingsInfo(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPrivateMessagePrivacy () { - return this.client.apis.accountSettingsAPI.getUserPrivateMessagePrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updatePrivateMessagePrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateUserPrivateMessagePrivacy({ - privateMessagePrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getEmailStatus () { - return this.client.apis.accountSettingsAPI.getUserEmailStatus(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateEmail (email: string, password: string) { - return this.client.apis.accountSettingsAPI.updateUserEmail({ - emailAddress: email, - password - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - sendEmailVerification () { - return this.client.apis.accountSettingsAPI.sendEmailVerification(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getWebsiteTheme () { - return this.client.apis.accountSettingsAPI.getWebsiteTheme(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateWebsiteTheme (theme: string) { - return this.client.apis.accountSettingsAPI.updateWebsiteTheme({ - themeType: theme - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getTradePrivacy () { - return this.client.apis.accountSettingsAPI.getUserTradePrivacy(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateTradePrivacy (privacy: string) { - return this.client.apis.accountSettingsAPI.updateUserTradePrivacy({ - tradePrivacy: privacy - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getTradeQualityFilter () { - return this.client.apis.accountSettingsAPI.getUserTradeQualityFilter(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateTradeQualityFilter (quality: string) { - return this.client.apis.accountSettingsAPI.updateUserTradeQualityFilter({ - tradeValue: quality - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateTwoStepStatus (options: UpdateTwoStepStatusOptions) { - return this.client.apis.accountSettingsAPI.updateTwoStepStatus(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getContactUpsell () { - return this.client.apis.accountSettingsAPI.getContactUpsell(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateContactUpsellSuppression ( - options: UpdateContactUpsellSuppressionOptions - ) { - return this.client.apis.accountSettingsAPI.updateContactUpsellSuppression( - options - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updatePromotionChannels (options: UpdateUserPromotionChannelsOptions) { - return this.client.apis.accountSettingsAPI.updateUserPromotionChannels( - options - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getBirthdate () { - return this.client.apis.accountInformationAPI.getUserBirthdate(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateBirthdate (options: UpdateUserBirthdateOptions) { - return this.client.apis.accountInformationAPI.updateUserBirthdate(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getProfileDescription () { - return this.client.apis.accountInformationAPI.getUserDescription(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateProfileDescription (description: string) { - return this.client.apis.accountInformationAPI.updateUserDescription({ - description - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getGender () { - return this.client.apis.accountInformationAPI.getUserGender(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - updateGender (gender: number) { - return this.client.apis.accountInformationAPI.updateUserGender({ - gender - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getConsecutiveXboxLoginDays () { - return this.client.apis.accountInformationAPI.getConsecutiveXboxLoginDays(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getVerifiedPhoneNumber () { - return this.client.apis.accountInformationAPI.getVerifiedPhoneNumber(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - setPhoneNumber (options: SetPhoneNumberOptions) { - return this.client.apis.accountInformationAPI.setPhoneNumber(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - deletePhone (options: DeletePhoneOptions) { - return this.client.apis.accountInformationAPI.deletePhone(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - resendPhoneCode (options: ResendPhoneCodeOptions) { - return this.client.apis.accountInformationAPI.resendPhoneCode(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - verifyPhone (options: VerifyPhoneOptions) { - return this.client.apis.accountInformationAPI.verifyPhone(options); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPromotionChannels () { - return this.client.apis.accountInformationAPI.getSelfPromotionChannels(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - removeStarCodeAffiliate () { - return this.client.apis.accountInformationAPI.removeStarCodeAffiliate(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getStarCodeAffiliate () { - return this.client.apis.accountInformationAPI.getStarCodeAffiliate(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - addStarCodeAffiliate (code: string) { - return this.client.apis.accountInformationAPI.addStarCodeAffiliate({ - code - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getPasswordStatus () { - return this.client.apis.authAPI.getCurrentUserPasswordStatus(); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - changeUserPassword (newPassword: string, oldPassword: string) { - return this.client.apis.authAPI.changeUserPassword({ - currentPassword: oldPassword, - newPassword - }); - } - - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - changeUsername (newUsername: string, password: string) { - return this.client.apis.authAPI.changeUserUsername({ - password, - username: newUsername - }); - } } diff --git a/src/structures/Game.ts b/src/structures/Game.ts index a940cd9bf..8b52c7d44 100644 --- a/src/structures/Game.ts +++ b/src/structures/Game.ts @@ -32,7 +32,7 @@ export class GameBadgeBase { public id: number; public name: string | null; - constructor (data: GameBadgeBaseOptions, client: Client) { + constructor(data: GameBadgeBaseOptions, client: Client) { this.client = client; this.id = data.id; this.name = data.name || null; @@ -81,7 +81,7 @@ export class GameBadge { }; awardingUniverse: PartialGameUniverse; - constructor (data: GameBadgeOptions, client: Client) { + constructor(data: GameBadgeOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -118,7 +118,7 @@ export type PartialGameBadgeOptions = GameBadgeBaseOptions; export class PartialGameBadge extends GameBadgeBase { // Shut up eslint, it's not useless // eslint-disable-next-line no-useless-constructor - constructor (data: PartialGameBadgeOptions, client: Client) { + constructor(data: PartialGameBadgeOptions, client: Client) { super(data, client); } } @@ -139,7 +139,7 @@ export class GamePass { public productId: number; public price: number; - constructor (data: GamePassOptions, client: Client) { + constructor(data: GamePassOptions, client: Client) { this.client = client; this.id = data.id; this.name = data.name; @@ -159,33 +159,33 @@ export class BasePlace { public id: number; public name: string | null; - constructor (options: BasePlaceOptions, client: Client) { + constructor(options: BasePlaceOptions, client: Client) { this.client = client; this.id = options.id; this.name = options.name || null; } - getCompatibilities () { + getCompatibilities() { return this.client.apis.developAPI.getPlaceCompatibilities({ placeId: this.id }); } - updatePlaceConfiguration (options: { name: string; description: string }) { + updatePlaceConfiguration(options: { name: string; description: string }) { return this.client.apis.developAPI.updatePlaceConfiguration({ placeId: this.id, ...options }); } - getStatistics (options: Omit) { + getStatistics(options: Omit) { return this.client.apis.developAPI.getPlaceStatistics({ placeId: this.id, ...options }); } - awardBadge (userId: number, badgeId: number) { + awardBadge(userId: number, badgeId: number) { return this.client.apis.generalApi.awardBadge({ placeId: this.id, badgeId, @@ -193,7 +193,7 @@ export class BasePlace { }); } - getGameServers (options: Omit) { + getGameServers(options: Omit) { return this.client.apis.gamesAPI.getGameServersByType({ placeId: this.id, ...options @@ -228,7 +228,7 @@ export class Place extends BasePlace { public price: number; public imageToken: string; - constructor (data: PlaceOptions, client: Client) { + constructor(data: PlaceOptions, client: Client) { const structures = retrieveStructures(); super( @@ -265,7 +265,7 @@ interface PartialPlaceOptions { } export class PartialPlace extends BasePlace { - constructor (data: PartialPlaceOptions, client: Client) { + constructor(data: PartialPlaceOptions, client: Client) { super( { id: data.id, @@ -291,21 +291,21 @@ export class PartialGameUniverse { public name: string | null; public rootPlace: PartialPlace | null; - constructor (data: PartialGameUniverseOptions, client: Client) { + constructor(data: PartialGameUniverseOptions, client: Client) { const structures = retrieveStructures(); this.client = client; this.id = data.id; this.name = data.name || null; - this.rootPlace = data.rootPlace ? - new structures.PartialPlace( - { - id: data.rootPlace.id, - name: data.rootPlace.name || null - }, - client - ) : - null; + this.rootPlace = data.rootPlace + ? new structures.PartialPlace( + { + id: data.rootPlace.id, + name: data.rootPlace.name || null + }, + client + ) + : null; } } @@ -354,41 +354,41 @@ export class GameUniverse { public avatarType: MorphAvatarType; public genre: GameGenre; - constructor (data: GameUniverseOptions, client: Client) { + constructor(data: GameUniverseOptions, client: Client) { const structures = retrieveStructures(); this.client = client; this.id = data.id; - this.rootPlace = data.rootPlaceId ? - new structures.PartialPlace( - { - id: data.rootPlaceId - }, - client - ) : - null; + this.rootPlace = data.rootPlaceId + ? new structures.PartialPlace( + { + id: data.rootPlaceId + }, + client + ) + : null; this.name = data.name; this.description = data.description; this.creatorType = - data.creatorType.toLowerCase() === "group" ? - CreatorType.GROUP : - CreatorType.USER; + data.creatorType.toLowerCase() === "group" + ? CreatorType.GROUP + : CreatorType.USER; this.creator = - this.creatorType === CreatorType.GROUP ? - new structures.PartialGroup( - { - id: data.creator.id, - name: data.creator.name - }, - client - ) : - new structures.PartialUser( - { - id: data.creator.id, - name: data.creator.name - }, - client - ); + this.creatorType === CreatorType.GROUP + ? new structures.PartialGroup( + { + id: data.creator.id, + name: data.creator.name + }, + client + ) + : new structures.PartialUser( + { + id: data.creator.id, + name: data.creator.name + }, + client + ); this.price = data.price; this.allowedGearGenres = data.allowedGearGenres; this.allowedGearCategories = data.allowedGearCategories; @@ -400,9 +400,9 @@ export class GameUniverse { this.studioAccessToAPIsEnabled = data.studioAccessToApisAllowed; this.createVIPServersEnabled = data.createVipServersAllowed; this.avatarType = - data.universeAvatarType.toLowerCase() === "morphtor6" ? - MorphAvatarType.R6 : - MorphAvatarType.R15; + data.universeAvatarType.toLowerCase() === "morphtor6" + ? MorphAvatarType.R6 + : MorphAvatarType.R15; this.genre = data.genre as GameGenre; } } @@ -415,7 +415,7 @@ export class PartialVIPServer { public client: Client; public id: number; - constructor (data: PartialVIPServerOptions, client: Client) { + constructor(data: PartialVIPServerOptions, client: Client) { this.client = client; this.id = data.id; } @@ -442,7 +442,7 @@ export interface VIPServerOptions { }; permissions: { clanAllowed: boolean; - enemyClanId: number | number; + enemyClanId: number; friendsAllowed: boolean; users: { id: number; @@ -472,7 +472,7 @@ export class VIPServer { users: PartialUser[]; }; - constructor (data: VIPServerOptions, client: Client) { + constructor(data: VIPServerOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -526,7 +526,7 @@ export class GameMediaData { public videoTitle: string | null; public approved: boolean; - constructor (data: GameMediaDataOptions, client: Client) { + constructor(data: GameMediaDataOptions, client: Client) { this.client = client; this.assetTypeId = data.assetTypeId; this.assetType = data.assetType; diff --git a/src/structures/Group.ts b/src/structures/Group.ts index 0a1237d06..9bbdd4fe2 100644 --- a/src/structures/Group.ts +++ b/src/structures/Group.ts @@ -89,8 +89,8 @@ const retrieveStructures = (): Structures => ({ }); type GroupRelationships = Omit< -GetGroupRelationships, -"relatedGroups" + GetGroupRelationships, + "relatedGroups" > & { groupId: number; relationshipType: T; @@ -109,13 +109,13 @@ export class GroupBase { public id: number; public name: string | null; - constructor (data: GroupBaseOptions, client: Client) { + constructor(data: GroupBaseOptions, client: Client) { this.client = client; this.id = data.id; this.name = data.name || null; } - getUniverses ( + getUniverses( options?: Omit ): Promise> { return this.client.apis.developAPI @@ -138,11 +138,11 @@ export class GroupBase { { id: universeData.id, name: universeData.name, - rootPlace: universeData.rootPlaceId ? - { - id: universeData.rootPlaceId - } : - undefined + rootPlace: universeData.rootPlaceId + ? { + id: universeData.rootPlaceId + } + : undefined }, this.client ) @@ -157,7 +157,7 @@ export class GroupBase { * Returns whether the authenticated user can manage the group or not * @returns {Promise} */ - canSelfManage (): Promise { + canSelfManage(): Promise { return this.client.apis.developAPI .getSelfManageableGroups() .then((response) => !!response.data.find((data) => data.id === this.id)); @@ -167,7 +167,7 @@ export class GroupBase { * Gets the currently available funds in the group * @returns {Promise} */ - getFunds (): Promise { + getFunds(): Promise { return this.client.apis.economyAPI .getGroupCurrency({ groupId: this.id @@ -175,7 +175,7 @@ export class GroupBase { .then((response) => response.robux); } - getRevenueSummaryInTimeFrame ( + getRevenueSummaryInTimeFrame( timeFrame: GetGroupRevenueSummaryInTimeFrameOptions["timeFrame"] ): Promise { return this.client.apis.economyAPI.getGroupRevenueByTime({ @@ -184,7 +184,7 @@ export class GroupBase { }); } - getTransactions ( + getTransactions( options: Omit ): Promise { return this.client.apis.economyAPI.getGroupTransactions({ @@ -193,7 +193,7 @@ export class GroupBase { }); } - getAllies ( + getAllies( maxItems = 100, startItem?: number ): Promise> { @@ -213,7 +213,7 @@ export class GroupBase { })); } - getEnemies ( + getEnemies( maxItems = 100, startItem?: number ): Promise> { @@ -233,11 +233,11 @@ export class GroupBase { })); } - getGroup (): Promise { + getGroup(): Promise { return this.client.getGroup(this.id); } - getMember (userId: number): Promise { + getMember(userId: number): Promise { return this.client.apis.groupsAPI .getUserGroups({ userId @@ -263,20 +263,20 @@ export class GroupBase { }); } - getIsMember (userId: number): Promise { + getIsMember(userId: number): Promise { console.warn( `group.getIsMember() is deprecated and may be removed in the future. Please switch to group.getMember` ); return this.getMember(userId); } - getSettings (): Promise { + getSettings(): Promise { return this.client.apis.groupsAPI.getGroupSettings({ groupId: this.id }); } - updateSettings ( + updateSettings( options: Omit ): Promise { return this.client.apis.groupsAPI.updateGroupSettings({ @@ -285,35 +285,35 @@ export class GroupBase { }); } - updateDescription (description: string): Promise { + updateDescription(description: string): Promise { return this.client.apis.groupsAPI.updateGroupDescription({ description, groupId: this.id }); } - updateShout (shout: string): Promise { + updateShout(shout: string): Promise { return this.client.apis.groupsAPI.updateGroupStatus({ groupId: this.id, message: shout }); } - updateIcon (file: unknown): Promise { + updateIcon(file: unknown): Promise { return this.client.apis.groupsAPI.updateGroupIcon({ files: file, groupId: this.id }); } - declineJoinRequests (userIds: number[]): Promise { + declineJoinRequests(userIds: number[]): Promise { return this.client.apis.groupsAPI.declineJoinRequests({ groupId: this.id, userIds }); } - getJoinRequests ( + getJoinRequests( options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -334,7 +334,7 @@ export class GroupBase { ); } - acceptJoinRequests ( + acceptJoinRequests( options: Omit ): Promise { return this.client.apis.groupsAPI.acceptJoinRequests({ @@ -343,34 +343,34 @@ export class GroupBase { }); } - declineJoinRequest (userId: number): Promise { + declineJoinRequest(userId: number): Promise { return this.client.apis.groupsAPI.declineJoinRequest({ groupId: this.id, userId }); } - getJoinRequest (userId: number): Promise { + getJoinRequest(userId: number): Promise { return this.client.apis.groupsAPI.getJoinRequest({ groupId: this.id, userId }); } - acceptJoinRequest (userId: number): Promise { + acceptJoinRequest(userId: number): Promise { return this.client.apis.groupsAPI.acceptJoinRequest({ groupId: this.id, userId }); } - getSelfMembership (): Promise { + getSelfMembership(): Promise { return this.client.apis.groupsAPI.getSelfGroupMembership({ groupId: this.id }); } - getRoles (): Promise { + getRoles(): Promise { return this.client.apis.groupsAPI .getGroupRoles({ groupId: this.id @@ -392,7 +392,7 @@ export class GroupBase { ); } - getMembersWithRole ( + getMembersWithRole( options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -413,7 +413,7 @@ export class GroupBase { ); } - getMembers ( + getMembers( options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -429,7 +429,7 @@ export class GroupBase { ); } - join (options: Omit): Promise { + join(options: Omit): Promise { return this.client.apis.groupsAPI.joinGroup({ groupId: this.id, ...options, @@ -437,7 +437,7 @@ export class GroupBase { }); } - getIsPendingJoin (): Promise { + getIsPendingJoin(): Promise { return this.client.apis.groupsAPI .getSelfPendingGroupJoins() .then( @@ -448,27 +448,27 @@ export class GroupBase { ); } - changeOwner (userId: number): Promise { + changeOwner(userId: number): Promise { return this.client.apis.groupsAPI.changeGroupOwner({ groupId: this.id, userId }); } - claim (): Promise { + claim(): Promise { return this.client.apis.groupsAPI.claimGroup({ groupId: this.id }); } - kickMember (userId: number): Promise { + kickMember(userId: number): Promise { return this.client.apis.groupsAPI.kickMember({ groupId: this.id, userId }); } - updateMember (userId: number, roleId: number): Promise { + updateMember(userId: number, roleId: number): Promise { return this.client.apis.groupsAPI.updateMember({ groupId: this.id, roleId, @@ -476,13 +476,13 @@ export class GroupBase { }); } - getPayouts (): Promise { + getPayouts(): Promise { return this.client.apis.groupsAPI.getGroupPayouts({ groupId: this.id }); } - payoutMembers ( + payoutMembers( options: Omit ): Promise { return this.client.apis.groupsAPI.payoutMembers({ @@ -491,7 +491,7 @@ export class GroupBase { }); } - updateRecurringPayouts ( + updateRecurringPayouts( options: Omit ): Promise { return this.client.apis.groupsAPI.updateRecurringPayouts({ @@ -500,7 +500,7 @@ export class GroupBase { }); } - getRelationships ( + getRelationships( options: Omit ): Promise { return this.client.apis.groupsAPI.getGroupRelationships({ @@ -509,7 +509,7 @@ export class GroupBase { }); } - declineRelationshipRequests ( + declineRelationshipRequests( options: Omit ): Promise { return this.client.apis.groupsAPI.declineRelationshipRequests({ @@ -518,7 +518,7 @@ export class GroupBase { }); } - getRelationshipRequests ( + getRelationshipRequests( options: Omit ): Promise { return this.client.apis.groupsAPI.getRelationshipRequests({ @@ -527,7 +527,7 @@ export class GroupBase { }); } - acceptRelationshipRequests ( + acceptRelationshipRequests( options: Omit ): Promise { return this.client.apis.groupsAPI.acceptRelationshipRequests({ @@ -536,7 +536,7 @@ export class GroupBase { }); } - deleteRelationship ( + deleteRelationship( options: Omit ): Promise { return this.client.apis.groupsAPI.deleteRelationship({ @@ -545,7 +545,7 @@ export class GroupBase { }); } - createRelationship ( + createRelationship( options: Omit ): Promise { return this.client.apis.groupsAPI.createRelationship({ @@ -554,7 +554,7 @@ export class GroupBase { }); } - acceptRelationshipRequest ( + acceptRelationshipRequest( type: "enemies" | "allies", withGroup: number ): Promise { @@ -565,7 +565,7 @@ export class GroupBase { }); } - declineRelationshipRequest ( + declineRelationshipRequest( type: "enemies" | "allies", withGroup: number ): Promise { @@ -576,14 +576,14 @@ export class GroupBase { }); } - getRolePermissions (roleId: number): Promise { + getRolePermissions(roleId: number): Promise { return this.client.apis.groupsAPI.getRolePermissions({ groupId: this.id, roleId }); } - updateRolePermissions ( + updateRolePermissions( roleId: number, permissions: Omit ): Promise { @@ -594,25 +594,25 @@ export class GroupBase { }); } - getGuestPermissions (): Promise { + getGuestPermissions(): Promise { return this.client.apis.groupsAPI.getGuestPermissions({ groupId: this.id }); } - getAllRolesPermissions (): Promise { + getAllRolesPermissions(): Promise { return this.client.apis.groupsAPI.getAllRolesPermissions({ groupId: this.id }); } - getSocialLinks (): Promise { + getSocialLinks(): Promise { return this.client.apis.groupsAPI.getSocialLinks({ groupId: this.id }); } - createSocialLink ( + createSocialLink( options: Omit ): Promise { return this.client.apis.groupsAPI.createSocialLink({ @@ -621,14 +621,14 @@ export class GroupBase { }); } - deleteSocialLink (id: number): Promise { + deleteSocialLink(id: number): Promise { return this.client.apis.groupsAPI.deleteSocialLink({ groupId: this.id, id }); } - updateSocialLink ( + updateSocialLink( options: Omit ): Promise { return this.client.apis.groupsAPI.updateSocialLink({ @@ -637,7 +637,7 @@ export class GroupBase { }); } - getWallPosts ( + getWallPosts( options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -653,7 +653,7 @@ export class GroupBase { ); } - createWallPost ( + createWallPost( options: Omit ): Promise { return this.client.apis.groupsAPI.createWallPost({ @@ -662,14 +662,14 @@ export class GroupBase { }); } - deleteWallPost (id: number): Promise { + deleteWallPost(id: number): Promise { return this.client.apis.groupsAPI.deleteWallPost({ groupId: this.id, id }); } - getIsUserPrimaryGroup (userId: number): Promise { + getIsUserPrimaryGroup(userId: number): Promise { return ( this.client.apis.groupsAPI .getUserPrimaryGroup({ @@ -677,49 +677,49 @@ export class GroupBase { }) // eslint-disable-next-line @typescript-eslint/no-use-before-define .then((response) => - response && response.group && response.role ? - new GroupMember( - { - group: response.group, - role: { - id: response.role!.id!, - name: response.role!.name!, - rank: response.role!.rank! + response && response.group && response.role + ? new GroupMember( + { + group: response.group, + role: { + id: response.role!.id!, + name: response.role!.name!, + rank: response.role!.rank! + }, + id: userId }, - id: userId - }, - this.client - ) : - null + this.client + ) + : null ) ); } - removeAsPrimary (): Promise { + removeAsPrimary(): Promise { return this.client.apis.groupsAPI.removePrimaryGroup(); } - setAsPrimary (): Promise { + setAsPrimary(): Promise { return this.client.apis.groupsAPI.setPrimaryGroup({ groupId: this.id }); } - createRole (options: Omit): Promise { + createRole(options: Omit): Promise { return this.client.apis.groupsAPI.createRole({ groupId: this.id, ...options }); } - deleteRole (roleId: number): Promise { + deleteRole(roleId: number): Promise { return this.client.apis.groupsAPI.deleteRole({ groupId: this.id, roleId }); } - updateRole ( + updateRole( roleId: number, options: Omit ): Promise { @@ -739,7 +739,7 @@ export interface PartialGroupOptions { export class PartialGroup extends GroupBase { // Shut up eslint, this is not useless either // eslint-disable-next-line no-useless-constructor - constructor (data: PartialGroupOptions, client: Client) { + constructor(data: PartialGroupOptions, client: Client) { super(data, client); } } @@ -762,7 +762,7 @@ export class GroupMember extends UserBase { public group: PartialGroup; public role: GroupRole | null; - constructor (data: GroupMemberOptions, client: Client) { + constructor(data: GroupMemberOptions, client: Client) { super( { name: data.name, @@ -772,24 +772,20 @@ export class GroupMember extends UserBase { ); this.group = new PartialGroup(data.group, client); // eslint-disable-next-line @typescript-eslint/no-use-before-define - this.role = data.role ? - new GroupRole( - { - id: data.role.id, - name: data.role.name, - rank: data.role.rank, - group: { - name: this.name || undefined, - id: this.id - } - }, - client - ) : - null; - } - - kick (): Promise { - return this.kickFromGroup(this.id); + this.role = data.role + ? new GroupRole( + { + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + name: this.name || undefined, + id: this.id + } + }, + client + ) + : null; } } @@ -830,36 +826,36 @@ export class Group extends GroupBase { public publicEntryAllowed: boolean; public isLocked: boolean; - constructor (data: GroupOptions, client: Client) { + constructor(data: GroupOptions, client: Client) { super(data, client); this.description = data.description; this.name = data.name; - this.owner = data.owner ? - new GroupMember( - { - id: data.owner.userId, - name: data.owner.username, - group: this - }, - client - ) : - null; - this.shout = data.shout ? - new GroupShout( - { - content: data.shout.body, - creator: { - id: data.shout.poster.userId, - username: data.shout.poster.username + this.owner = data.owner + ? new GroupMember( + { + id: data.owner.userId, + name: data.owner.username, + group: this }, - group: { - id: this.id, - name: this.name || undefined - } - }, - client - ) : - null; + client + ) + : null; + this.shout = data.shout + ? new GroupShout( + { + content: data.shout.body, + creator: { + id: data.shout.poster.userId, + username: data.shout.poster.username + }, + group: { + id: this.id, + name: this.name || undefined + } + }, + client + ) + : null; this.memberCount = data.memberCount; this.isBuildersClubOnly = data.isBuildersClubOnly; this.publicEntryAllowed = data.publicEntryAllowed; @@ -881,7 +877,7 @@ export class GroupJoinRequest { public group: PartialGroup; public created: Date; - constructor (data: GroupJoinRequestOptions, client: Client) { + constructor(data: GroupJoinRequestOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -909,7 +905,7 @@ export class GroupRole { public rank: number | null; public group: PartialGroup; - constructor (data: GroupRoleOptions, client: Client) { + constructor(data: GroupRoleOptions, client: Client) { this.client = client; this.id = data.id || null; this.name = data.name || null; @@ -969,7 +965,7 @@ export class GroupRolePermissions { public role: GroupRole; public permissions: GroupRolePermissionsOptions["permissions"]; - constructor (data: GroupRolePermissionsOptions, client: Client) { + constructor(data: GroupRolePermissionsOptions, client: Client) { this.client = client; this.group = new PartialGroup( { @@ -1010,7 +1006,7 @@ export class GroupShout { public creator: PartialUser; public group: PartialGroup; - constructor (data: GroupShoutOptions, client: Client) { + constructor(data: GroupShoutOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -1050,7 +1046,7 @@ export class GroupWallPost { public content: string; public created: Date; - constructor (data: GroupWallPostOptions, client: Client) { + constructor(data: GroupWallPostOptions, client: Client) { this.client = client; this.id = data.id; this.content = data.body; diff --git a/src/structures/User.ts b/src/structures/User.ts index 80a9cec73..2db16da3a 100644 --- a/src/structures/User.ts +++ b/src/structures/User.ts @@ -1,85 +1,4 @@ import Client from "../client"; -import { - GetUserAvatar, - GetUserCurrentlyWearing, - GetUserOutfits, - GetUserOutfitsOptions -} from "../client/apis/AvatarAPI"; -import { - DeleteBadgeFromUser, - GetUserBadges, - GetUserBadgesOptions -} from "../client/apis/BadgesAPI"; -import { CursorPage } from "./Asset"; -import { - GetUserBundles, - GetUserBundlesByType, - GetUserBundlesOptions -} from "../client/apis/CatalogAPI"; -import { - AddUsersToConversation, - RemoveUserFromConversation, - StartOneToOneConversation -} from "../client/apis/ChatAPI"; -import { - GetUsersTags, - SetPendingUserTag, - SetUserTag -} from "../client/apis/ContactsAPI"; -import { RemoveUserFromUniverseTeamCreate } from "../client/apis/DevelopAPI"; -import { GetUserResellableAssetCopies } from "../client/apis/EconomyAPI"; -import { - AcceptFriendRequest, - DeclineFriendRequest, - FollowUser, - GetUserFollowers, - GetUserFollowersOptions, - GetUserFollowing, - GetUserFollowingOptions, - GetUserFriendsWithStatuses, - SendFriendRequest, - UnFollowUser, - UnfriendUser -} from "../client/apis/FriendsAPI"; -import { - GetJoinRequest, - GetUserGroups, - GetUserPrimaryGroup, - PayoutMembersOptions -} from "../client/apis/GroupsAPI"; -import { - GetUserCollectibles, - GetUserCollectiblesOptions, - GetUserInventory, - GetUserInventoryByAssetTypeId, - GetUserInventoryByAssetTypeIdOptions, - GetUserInventoryOptions, - GetUserItemsByTypeAndTargetId, - GetUserItemsByTypeAndTargetIdOptions -} from "../client/apis/InventoryAPI"; -import { - PremiumUpsellCheck, - PremiumUpsellCheckOptions, - ValidateUserMembership -} from "../client/apis/PremiumFeaturesAPI"; -import { GetUsersPresences } from "../client/apis/PresenceAPI"; -import { - SendMessage, - SendMessageOptions -} from "../client/apis/PrivateMessagesAPI"; -import { - GetUsersAvatarBustImages, - GetUsersAvatarBustImagesOptions, - GetUsersAvatarHeadShotsImages, - GetUsersAvatarHeadShotsImagesOptions, - GetUsersFullBodyAvatarImages, - GetUsersFullBodyAvatarImagesOptions -} from "../client/apis/ThumbnailsAPI"; -import { SendTrade, SendTradeOptions } from "../client/apis/TradesAPI"; -import { - UpdateUser, - UpdateUserAccess -} from "../client/apis/TranslationRolesAPI"; import { EnumUserPresence } from "../interfaces/GeneralInterfaces"; export interface UserBaseOptions { @@ -96,627 +15,13 @@ export class UserBase { public displayName: string | null; public membership: unknown; - constructor (data: UserBaseOptions, client: Client) { + constructor(data: UserBaseOptions, client: Client) { this.client = client; this.id = data.id; this.name = data.name || null; this.displayName = data.displayName || null; this.membership = data.membership || null; } - - getStatus (): Promise { - return this.client.apis.usersAPI - .getUserStatus({ - userId: this.id - }) - .then((response) => response.status); - } - - getAvatar (): Promise { - return this.client.apis.avatarAPI.getUserAvatar({ - userId: this.id - }); - } - - getCurrentlyWearing (): Promise { - return this.client.apis.avatarAPI.getUserCurrentlyWearing({ - userId: this.id - }); - } - - getOutfits ( - options: Omit - ): Promise { - return this.client.apis.avatarAPI.getUserOutfits({ - ...options, - userId: this.id - }); - } - - getBadges ( - options?: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.badgesAPI - .getUserBadges({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - options || {}, - response, - this.getBadges - ) as CursorPage - ); - } - - getBadgesAwardedDates ( - badges: number[] - ): Promise<{ id: number; awardedAt: Date }[]> { - return this.client.apis.badgesAPI - .getUserBadgesAwardedDates({ - badgeIds: badges, - userId: this.id - }) - .then((response) => - response.data.map((badgeAwarded) => ({ - id: badgeAwarded.badgeId, - awardedAt: new Date(badgeAwarded.awardedDate) - })) - ); - } - - deleteBadge (badgeId: number): Promise { - return this.client.apis.badgesAPI.deleteBadgeFromUser({ - badgeId, - userId: this.id - }); - } - - getBundles ( - options?: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.catalogAPI - .getUserBundles({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - options || {}, - response, - this.getBundles - ) - ); - } - - getBundlesByType ( - bundleType: string, - options?: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.catalogAPI - .getUserBundlesByType({ - ...options, - userId: this.id, - bundleType - }) - .then( - (response) => - new CursorPageClass( - this.client, - options || {}, - response, - this.getBundlesByType - ) - ); - } - - addToChatConversation ( - conversationId: number - ): Promise { - return this.client.apis.chatAPI.addUsersToConversation({ - conversationId, - participantUserIds: [this.id] - }); - } - - removeFromConversation ( - conversationId: number - ): Promise { - return this.client.apis.chatAPI.removeUserFromConversation({ - conversationId, - participantUserId: this.id - }); - } - - startConversation (): Promise { - return this.client.apis.chatAPI.startOneToOneConversation({ - participantUserId: this.id - }); - } - - getTag (): Promise { - return this.client.apis.contactsAPI - .getUsersTags({ - targetUserIds: [this.id] - }) - .then((response) => response[0]); - } - - setPendingTag (tag: string): Promise { - return this.client.apis.contactsAPI.setPendingUserTag({ - userTag: tag, - targetUserId: this.id - }); - } - - setTag (tag: string): Promise { - return this.client.apis.contactsAPI.setUserTag({ - targetUserId: this.id, - userTag: tag - }); - } - - removeFromTeamCreate ( - universeId: number - ): Promise { - return this.client.apis.developAPI.removeUserFromUniverseTeamCreate({ - userId: this.id, - universeId - }); - } - - getResellableAssetCopies ( - assetId: number - ): Promise { - return this.client.apis.economyAPI.getUserResellableAssetCopies({ - assetId, - userId: this.id - }); - } - - getFollowers ( - options?: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.friendsAPI - .getUserFollowers({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - options || {}, - response, - this.getFollowers - ) - ); - } - - getFollowersCount (): Promise { - return this.client.apis.friendsAPI - .getUserFollowersCount({ - userId: this.id - }) - .then((response) => response.count); - } - - getFollowing ( - options?: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.friendsAPI - .getUserFollowing({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - options || {}, - response, - this.getFollowing - ) - ); - } - - getFollowingCount (): Promise { - return this.client.apis.friendsAPI - .getUserFollowingCount({ - userId: this.id - }) - .then((response) => response.count); - } - - getFriends (): Promise { - return this.client.apis.friendsAPI - .getUserFriends({ - userId: this.id - }) - .then((response) => - response.data.map( - (friendRequest) => new FriendRequest(friendRequest, this.client) - ) - ); - } - - getFriendsCount (): Promise { - return this.client.apis.friendsAPI - .getUserFriendsCount({ - userId: this.id - }) - .then((data) => data.count); - } - - getFriendsWithStatuses ( - userIds: number[] - ): Promise { - return this.client.apis.friendsAPI.getUserFriendsWithStatuses({ - userId: this.id, - withUserIds: userIds - }); - } - - follow (): Promise { - return this.client.apis.friendsAPI.followUser({ - userId: this.id - }); - } - - friend (source?: string): Promise { - return this.client.apis.friendsAPI.sendFriendRequest({ - source: source || "Unknown", - userId: this.id - }); - } - - unFollow (): Promise { - return this.client.apis.friendsAPI.unFollowUser({ - userId: this.id - }); - } - - unfriend (): Promise { - return this.client.apis.friendsAPI.unfriendUser({ - userId: this.id - }); - } - - acceptFriendRequest (): Promise { - return this.client.apis.friendsAPI.acceptFriendRequest({ - userId: this.id - }); - } - - declineFriendRequest (): Promise { - return this.client.apis.friendsAPI.declineFriendRequest({ - userId: this.id - }); - } - - canInviteToVIPServer (): Promise { - return this.client.apis.gamesAPI - .canSelfInviteUserToVIPServer({ - userId: this.id - }) - .then((response) => response.canInvite); - } - - awardBadge (badgeId: number, placeId: number): Promise { - return this.client.apis.generalApi - .awardBadge({ - badgeId, - placeId, - userId: this.id - }) - .then((response) => response as unknown as string); - } - - isFollowedByUser (userId: number): Promise { - return this.client.apis.generalApi.isUserFollowing({ - userId, - followUserId: this.id - }); - } - - getGroups (): Promise { - return this.client.apis.groupsAPI.getUserGroups({ - userId: this.id - }); - } - - ownsAsset (assetId: number): Promise { - return this.client.apis.generalApi.userOwnsAsset({ - userId: this.id, - assetId - }); - } - - block (): Promise { - return this.client.apis.generalApi.blockUser({ - userId: this.id - }); - } - - unblock (): Promise { - return this.client.apis.generalApi.unblockUser({ - userId: this.id - }); - } - - canManageAsset (assetId: number): Promise { - return this.client.apis.generalApi.userCanManageAsset({ - assetId, - userId: this.id - }); - } - - acceptJoinRequestInGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.acceptJoinRequest({ - groupId, - userId: this.id - }); - } - - declineJoinRequestInGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.declineJoinRequest({ - groupId, - userId: this.id - }); - } - - getJoinRequestInGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.getJoinRequest({ - groupId, - userId: this.id - }); - } - - setGroupOwner (groupId: number): Promise { - return this.client.apis.groupsAPI.changeGroupOwner({ - groupId, - userId: this.id - }); - } - - kickFromGroup (groupId: number): Promise { - return this.client.apis.groupsAPI.kickMember({ - groupId: groupId, - userId: this.id - }); - } - - updateMemberInGroup (groupId: number, roleId: number): Promise { - return this.client.apis.groupsAPI.updateMember({ - groupId, - roleId, - userId: this.id - }); - } - - payoutUserFromGroup (options: { - groupId: number; - type: PayoutMembersOptions["type"]; - amount: number; - }): Promise { - return this.client.apis.groupsAPI.payoutMembers({ - type: options.type, - groupId: options.groupId, - users: [ - { - userId: this.id, - amount: options.amount - } - ] - }); - } - - deleteGroupWallPosts (groupId: number): Promise { - return this.client.apis.groupsAPI.deleteUserWallPosts({ - groupId, - userId: this.id - }); - } - - getPrimaryGroup (): Promise { - return this.client.apis.groupsAPI.getUserPrimaryGroup({ - userId: this.id - }); - } - - getCollectibles ( - options?: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI - .getUserCollectibles({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - options || {}, - response, - this.getCollectibles - ) - ); - } - - getItemsByTypeAndTargetId ( - itemType: GetUserItemsByTypeAndTargetIdOptions["itemType"], - id: number - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI - .getUserItemsByTypeAndTargetId({ - itemType, - itemTargetId: id, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - {}, - response, - this.getItemsByTypeAndTargetId - ) - ); - } - - getInventory ( - options: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI - .getUserInventory({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass(this.client, options, response, this.getInventory) - ); - } - - getInventoryByAssetTypeId ( - options: Omit - ): Promise> { - const CursorPageClass = require("./Asset").CursorPage; - - return this.client.apis.inventoryAPI - .getUserInventoryByAssetTypeId({ - ...options, - userId: this.id - }) - .then( - (response) => - new CursorPageClass( - this.client, - options, - response, - this.getInventoryByAssetTypeId - ) - ); - } - - getUser (): Promise { - return this.client.getUser(this.id); - } - - getPremiumMembership (): Promise { - return this.client.apis.premiumFeaturesAPI.validateUserMembership({ - userId: this.id - }); - } - - upsellPremiumCheck ( - options: Omit - ): Promise { - return this.client.apis.premiumFeaturesAPI.premiumUpsellCheck({ - ...options, - userId: this.id - }); - } - - getPresence (): Promise { - return this.client.apis.presenceAPI - .getUsersPresences({ - userIds: [this.id] - }) - .then((response) => response.userPresences[0]); - } - - sendMessage ( - options: Omit - ): Promise { - return this.client.apis.privateMessagesAPI.sendMessage({ - ...options, - userId: this.id - }); - } - - getFullBodyAvatarImage ( - options: Omit - ): Promise { - return this.client.apis.thumbnailsAPI - .getUsersFullBodyAvatarImages({ - ...options, - userIds: [this.id] - }) - .then((response) => response.data[0]); - } - - getAvatarBustImage ( - options: Omit - ): Promise { - return this.client.apis.thumbnailsAPI - .getUsersAvatarBustImages({ - ...options, - userIds: [this.id] - }) - .then((response) => response.data[0]); - } - - getAvatarHeadShotImage ( - options: Omit - ): Promise { - return this.client.apis.thumbnailsAPI - .getUsersAvatarHeadShotImages({ - ...options, - userIds: [this.id] - }) - .then((response) => response.data[0]); - } - - getCanTrade (): Promise { - return this.client.apis.tradesAPI - .canTradeWith({ - userId: this.id - }) - .then((response) => response.canTrade); - } - - sendTrade ( - offers: Omit[] - ): Promise { - return this.client.apis.tradesAPI.sendTrade({ - offers: offers.map((offerData) => ({ - userId: this.id, - robux: offerData.robux, - userAssetIds: offerData.userAssetIds - })) - }); - } - - updateTranslationGameAccess ( - options: Omit - ): Promise { - return this.client.apis.translationRolesAPI.updateUserAccess({ - ...options, - userId: this.id - }); - } } export interface FriendRequestOptions { @@ -734,7 +39,7 @@ export class FriendRequest { public created: Date; public description: string; - constructor (data: FriendRequestOptions, client: Client) { + constructor(data: FriendRequestOptions, client: Client) { this.client = client; this.user = new PartialUser( { @@ -759,7 +64,7 @@ export class PartialUser extends UserBase { // Eslint, I'm getting tired of you complaining about useless constructors. // You are useless // eslint-disable-next-line no-useless-constructor - constructor (data: PartialUserOptions, client: Client) { + constructor(data: PartialUserOptions, client: Client) { super(data, client); } } @@ -843,18 +148,18 @@ export class User extends PartialUser { endpointType: "Avatar" | string; }; - constructor (data: UserOptions, client: Client) { + constructor(data: UserOptions, client: Client) { super(data, client); this.friendsCount = data.friendsCount; this.presenceType = data.presenceType; this.lastLocation = data.lastLocation || null; this.status = data.userStatus || null; - const matchedStatusTimestamp = data.userStatusDate ? - data.userStatusDate.match(/\((.*)\)/) : - null; - this.statusDate = matchedStatusTimestamp ? - new Date(parseInt(matchedStatusTimestamp[1])) : - null; + const matchedStatusTimestamp = data.userStatusDate + ? data.userStatusDate.match(/\((.*)\)/) + : null; + this.statusDate = matchedStatusTimestamp + ? new Date(parseInt(matchedStatusTimestamp[1])) + : null; this.placeId = data.userPlaceId; this.followersCount = data.followersCount; this.followingCount = data.followingsCount; diff --git a/src/util/errors/errors.ts b/src/util/errors/errors.ts index c306c4f02..73d66dfd0 100644 --- a/src/util/errors/errors.ts +++ b/src/util/errors/errors.ts @@ -13,9 +13,9 @@ export class BloxyHttpError extends Error { public statusMessage: string; constructor (options: BloxyHttpErrorOptions) { - const statusRelatedIssues = - StatusCodeReasons[options.statusCode as keyof typeof StatusCodeReasons] || - []; + const statusRelatedIssues + = StatusCodeReasons[options.statusCode as keyof typeof StatusCodeReasons] + || []; options.possibleReasons = [ ...options.possibleReasons, ...statusRelatedIssues @@ -23,11 +23,11 @@ export class BloxyHttpError extends Error { const revisedMessage = `\n\n${options.message} | Status code: ${ options.statusCode }, status message: ${options.statusMessage}. ${ - options.possibleReasons.length > 0 ? - `Possible reasons:\n${options.possibleReasons + options.possibleReasons.length > 0 + ? `Possible reasons:\n${options.possibleReasons .map((r) => `- ${r}`) - .join("\n")}\n\n` : - "" + .join("\n")}\n\n` + : "" }`; super(revisedMessage); this.name = options.name || "BloxyHttpError"; From e2b5f413865cde06e9548ea9152aeaf4bafd0eec Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 22:17:17 +0100 Subject: [PATCH 15/24] Remove `postinstall` from `package.json` Co-authored-by: Guido de Jong <35309288+guidojw@users.noreply.github.com> --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 78303ea5a..196b521ee 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "prepublishOnly": "npm run build", "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'", - "postinstall": "npm install got && echo 'The package got has been installed. You can now use the bloxy package.'" }, "types": "./dist/index.d.ts", "keywords": [ From de6c56ca34f13093caae04dbd572f97273dce2d1 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 22:27:50 +0100 Subject: [PATCH 16/24] Change typedoc to use `typedoc.json` --- package.json | 2 +- typedoc.json | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 typedoc.json diff --git a/package.json b/package.json index 78303ea5a..e166d1c3a 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "build": "tsc --skipLibCheck", "eslint": "eslint . --ext .ts", "prepublishOnly": "npm run build", - "create-docs": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --namedAnchors --excludeExternals --out docs src && mkdocs build", + "create-docs": "typedoc src && mkdocs build", "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'", "postinstall": "npm install got && echo 'The package got has been installed. You can now use the bloxy package.'" }, diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 000000000..f2310d91e --- /dev/null +++ b/typedoc.json @@ -0,0 +1,8 @@ +{ + "entryPoints": "src/index.ts", + "out": "docs", + "plugin": "typedoc-plugin-markdown", + "hideBreadcrumbs": true, + "namedAnchors": true, + "excludeExternals": false +} From 7860347d0d50ca4600bb25eea390f5babfac0711 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 8 Jan 2022 22:30:28 +0100 Subject: [PATCH 17/24] Fix `RESTResponse.ts` to respect the right error name Co-authored-by: Guido de Jong <35309288+guidojw@users.noreply.github.com> --- src/controllers/rest/response/RESTResponse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/rest/response/RESTResponse.ts b/src/controllers/rest/response/RESTResponse.ts index 6289e7c60..d297ec1fe 100644 --- a/src/controllers/rest/response/RESTResponse.ts +++ b/src/controllers/rest/response/RESTResponse.ts @@ -32,7 +32,7 @@ export default class RESTResponse { const error = allProcessed.find( (err) => err instanceof BloxyHttpError - && err.name === "BloxyInvalidStatusMessageError" + && err.name === "BloxyHttpInvalidStatusMessageError" && err.statusMessage.includes("Token Validation Failed") ); From 598e5741f6681b7c0b04eb37e51ec9f475bfd819 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sun, 9 Jan 2022 04:36:58 +0100 Subject: [PATCH 18/24] Add a suffix to all types in the api files --- package-lock.json | 28 +- package.json | 3 +- src/client/apis/AccountInformationAPI.ts | 70 +- src/client/apis/AccountSettingsAPI.ts | 12 +- src/client/apis/AdConfigurationAPI.ts | 36 +- src/client/apis/AssetDeliveryAPI.ts | 163 +-- src/client/apis/AuthAPI.ts | 225 ++-- src/client/apis/AvatarAPI.ts | 213 ++-- src/client/apis/BadgesAPI.ts | 102 +- src/client/apis/BaseAPI.ts | 6 +- src/client/apis/BillingAPI.ts | 240 ++-- src/client/apis/CatalogAPI.ts | 194 ++-- src/client/apis/ChatAPI.ts | 321 +++--- src/client/apis/ContactsAPI.ts | 26 +- src/client/apis/DataAPI.ts | 8 +- src/client/apis/DevelopAPI.ts | 404 ++++--- src/client/apis/EconomyAPI.ts | 160 +-- src/client/apis/EconomyCreatorStatsAPI.ts | 12 +- src/client/apis/EngagementPayoutsAPI.ts | 12 +- src/client/apis/FollowingsAPI.ts | 40 +- src/client/apis/FriendsAPI.ts | 215 ++-- .../apis/GameInternationalizationAPI.ts | 105 +- src/client/apis/GamesAPI.ts | 219 ++-- src/client/apis/GeneralAPI.ts | 228 ++-- src/client/apis/GroupsAPI.ts | 561 +++++---- src/client/apis/InventoryAPI.ts | 62 +- src/client/apis/ItemConfigurationAPI.ts | 74 +- src/client/apis/LocaleAPI.ts | 46 +- src/client/apis/MetricsAPI.ts | 20 +- src/client/apis/NotificationsAPI.ts | 270 ++--- src/client/apis/OtherAPI.ts | 12 +- src/client/apis/PremiumFeaturesAPI.ts | 22 +- src/client/apis/PresenceAPI.ts | 22 +- src/client/apis/PrivateMessagesAPI.ts | 72 +- src/client/apis/PublishAPI.ts | 30 +- src/client/apis/ThumbnailsAPI.ts | 251 ++-- src/client/apis/TradesAPI.ts | 211 ---- src/client/apis/TranslationRolesAPI.ts | 40 +- src/client/apis/TwoStepVerificationAPI.ts | 96 +- src/client/apis/UsersAPI.ts | 72 +- src/client/apis/index.ts | 7 +- src/client/lib/ChatManager/ChatManager.ts | 94 +- src/index.ts | 1014 +---------------- src/structures/Asset.ts | 72 +- src/structures/Chat.ts | 50 +- src/structures/Game.ts | 10 +- src/structures/Group.ts | 276 ++--- src/types/GeneralTypes.ts | 8 - src/types/GenericOptionTypes.ts | 39 + src/types/GenericTypes.ts | 16 + 50 files changed, 2861 insertions(+), 3628 deletions(-) delete mode 100644 src/client/apis/TradesAPI.ts delete mode 100644 src/types/GeneralTypes.ts create mode 100644 src/types/GenericOptionTypes.ts create mode 100644 src/types/GenericTypes.ts diff --git a/package-lock.json b/package-lock.json index 4c74220bf..c97860967 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,11 @@ "": { "name": "bloxy", "version": "6.0.0-alpha", - "hasInstallScript": true, "license": "MIT", "dependencies": { "debug": "^4.3.1", "got": "^11.8.3", + "signalr": "^2.4.2", "signalr-client": "0.0.20", "tough-cookie": "^4.0.0", "tslib": "^2.1.0" @@ -2988,6 +2988,11 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4378,6 +4383,14 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "node_modules/signalr": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/signalr/-/signalr-2.4.2.tgz", + "integrity": "sha512-XqFRQRbRr8Ce1GYq3/aWwnQKPHWEOTjmRT32196sZEmZQmsEEpu5LzjvxrpxxedUoI/oWu9YlqkqK8KrbSYw/w==", + "dependencies": { + "jquery": ">=1.6.4" + } + }, "node_modules/signalr-client": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", @@ -7352,6 +7365,11 @@ "@sideway/pinpoint": "^2.0.0" } }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8393,6 +8411,14 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "signalr": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/signalr/-/signalr-2.4.2.tgz", + "integrity": "sha512-XqFRQRbRr8Ce1GYq3/aWwnQKPHWEOTjmRT32196sZEmZQmsEEpu5LzjvxrpxxedUoI/oWu9YlqkqK8KrbSYw/w==", + "requires": { + "jquery": ">=1.6.4" + } + }, "signalr-client": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.20.tgz", diff --git a/package.json b/package.json index 5d8881ff3..056e56515 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "eslint": "eslint . --ext .ts", "prepublishOnly": "npm run build", "create-docs": "typedoc src && mkdocs build", - "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'", + "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'" }, "types": "./dist/index.d.ts", "keywords": [ @@ -66,6 +66,7 @@ "dependencies": { "debug": "^4.3.1", "got": "^11.8.3", + "signalr": "^2.4.2", "signalr-client": "0.0.20", "tough-cookie": "^4.0.0", "tslib": "^2.1.0" diff --git a/src/client/apis/AccountInformationAPI.ts b/src/client/apis/AccountInformationAPI.ts index bcc0fcc92..f60ecdc7a 100644 --- a/src/client/apis/AccountInformationAPI.ts +++ b/src/client/apis/AccountInformationAPI.ts @@ -1,25 +1,25 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { Privacy } from "../../types/GeneralTypes"; +import { UserIdOption, Privacy } from "../.."; // AccountInformation -export type UserAccountBirthdate = { +export type AccountInformationBirthdate = { birthDay: number; birthMonth: number; birthYear: number; }; -export type UserAccountDescription = { +export type AccountInformationDescription = { description: string; }; -export type UserAccountGender = { +export type AccountInformationGender = { gender: number; }; -export type UserAccountXboxConsecutiveLoginDays = { +export type AccountInformationXboxConsecutiveLoginDays = { count: number; }; // Metadata -export type UserAccountMetaData = { +export type AccountInformationMetaData = { isAllowedNotificationsEndpointDisabled: boolean; isAccountSettingsPolicyEnabled: boolean; isPhoneNumberEnabled: boolean; @@ -32,7 +32,7 @@ export type UserAccountMetaData = { }; // PromotionChannel -export type UserAccountOwnPromotionChannels = { +export type AccountInformationOwnPromotionChannels = { promotionChannelsVisibilityPrivacy: Privacy; facebook: string; twitter: string; @@ -40,29 +40,33 @@ export type UserAccountOwnPromotionChannels = { twitch: string; guilded: string; }; -export declare type UserAccountPromotionChannels = Omit< - UserAccountOwnPromotionChannels, +export declare type AccountInformationPromotionChannels = Omit< + AccountInformationOwnPromotionChannels, "promotionChannelsVisibilityPrivacy" >; // StarCodeAffiliate -export type UserAccountStarCodeAffiliate = { +export type AccountInformationStarCodeAffiliate = { userId: number; name: string; code: string; }; -export type UserAccountSetStarCodeAffiliate = { +export type AccountInformationSetStarCodeAffiliate = { + code: string; +}; +export type AccountInformationAddStarCodeAffiliateOption = { code: string; }; // RobloxBadges -export type UserAccountRobloxBadge = { +export type AccountInformationRobloxBadge = { id: number; name: string; description: string; imageUrl: string; }; -export declare type UserAccountRobloxBadges = UserAccountRobloxBadge[]; +export declare type AccountInformationRobloxBadges = + AccountInformationRobloxBadge[]; export default class AccountInformationAPI extends BaseAPI { constructor(client: Client) { @@ -72,7 +76,7 @@ export default class AccountInformationAPI extends BaseAPI { }); } - getUserBirthdate(): Promise { + getUserBirthdate(): Promise { return this.request({ requiresAuth: true, request: { @@ -82,7 +86,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - updateUserBirthdate(options: UserAccountBirthdate): Promise { + updateUserBirthdate(options: AccountInformationBirthdate): Promise { return this.request({ requiresAuth: true, request: { @@ -94,7 +98,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then(() => true); } - getUserDescription(): Promise { + getUserDescription(): Promise { return this.request({ requiresAuth: true, request: { @@ -104,7 +108,9 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - updateUserDescription(options: UserAccountDescription): Promise { + updateUserDescription( + options: AccountInformationDescription + ): Promise { return this.request({ requiresAuth: true, request: { @@ -116,7 +122,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then(() => true); } - getUserGender(): Promise { + getUserGender(): Promise { return this.request({ requiresAuth: true, request: { @@ -126,7 +132,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - updateUserGender(options: UserAccountGender): Promise { + updateUserGender(options: AccountInformationGender): Promise { return this.request({ requiresAuth: true, request: { @@ -138,7 +144,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then(() => true); } - getConsecutiveXboxLoginDays(): Promise { + getConsecutiveXboxLoginDays(): Promise { return this.request({ requiresAuth: true, request: { @@ -148,7 +154,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - getMetaData(): Promise { + getMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -158,7 +164,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - getSelfPromotionChannels(): Promise { + getSelfPromotionChannels(): Promise { return this.request({ requiresAuth: true, request: { @@ -168,9 +174,9 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - getUserPromotionChannels(options: { - userId: number; - }): Promise { + getUserPromotionChannels( + options: UserIdOption + ): Promise { return this.request({ requiresAuth: false, request: { @@ -181,7 +187,7 @@ export default class AccountInformationAPI extends BaseAPI { } updateUserPromotionChannels( - options: UserAccountOwnPromotionChannels + options: AccountInformationOwnPromotionChannels ): Promise { return this.request({ requiresAuth: true, @@ -205,7 +211,7 @@ export default class AccountInformationAPI extends BaseAPI { }).then(() => true); } - getStarCodeAffiliate(): Promise { + getStarCodeAffiliate(): Promise { return this.request({ requiresAuth: true, request: { @@ -216,8 +222,8 @@ export default class AccountInformationAPI extends BaseAPI { } addStarCodeAffiliate( - options: UserAccountSetStarCodeAffiliate - ): Promise { + options: AccountInformationAddStarCodeAffiliateOption + ): Promise { return this.request({ requiresAuth: true, request: { @@ -229,9 +235,9 @@ export default class AccountInformationAPI extends BaseAPI { }).then((response) => response.body); } - getRobloxBadges(options: { - userId: number; - }): Promise { + getRobloxBadges( + options: UserIdOption + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/AccountSettingsAPI.ts b/src/client/apis/AccountSettingsAPI.ts index 0ffa163a4..adf12e0d8 100644 --- a/src/client/apis/AccountSettingsAPI.ts +++ b/src/client/apis/AccountSettingsAPI.ts @@ -1,6 +1,7 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { Privacy } from "../../types/GeneralTypes"; +import { Privacy } from "../../types/GenericTypes"; +import { UserIdOption } from "../.."; // Accounts export type AccountSettingsMetaData = { @@ -39,11 +40,6 @@ export type AccountSettingsVisibilityPrivacy = { visibilityPrivacy: number; }; -// BlockUser -export type AccountSettingsBlockUser = { - userId: number; -}; - export default class AccountSettingsAPI extends BaseAPI { constructor(client: Client) { super({ @@ -215,7 +211,7 @@ export default class AccountSettingsAPI extends BaseAPI { }).then(() => true); } - blockUser(options: AccountSettingsBlockUser): Promise { + blockUser(options: UserIdOption): Promise { return this.request({ requiresAuth: true, request: { @@ -226,7 +222,7 @@ export default class AccountSettingsAPI extends BaseAPI { }).then(() => true); } - unblockUser(options: AccountSettingsBlockUser): Promise { + unblockUser(options: UserIdOption): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/AdConfigurationAPI.ts b/src/client/apis/AdConfigurationAPI.ts index d4ad5b1d1..8484aa5c8 100644 --- a/src/client/apis/AdConfigurationAPI.ts +++ b/src/client/apis/AdConfigurationAPI.ts @@ -1,6 +1,7 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { ISOString } from "../../types/GeneralTypes"; +import { ISOString } from "../../types/GenericTypes"; +import { GroupIdOption } from "../.."; // Utility types export type AdConfigurationTargetGender = unknown; @@ -46,7 +47,7 @@ export type AdConfigurationUniverse = { export type AdConfigurationUniverses = { universes: AdConfigurationUniverse[]; }; -export type AdConfigurationCreateSponsoredGameAd = { +export type AdConfigurationCreateSponsoredGameAdOptions = { universeId: number; targetGender: AdConfigurationTargetGender; targetAgeBracket: AdConfigurationTargetAgeBracket; @@ -57,9 +58,15 @@ export type AdConfigurationCreateSponsoredGameAd = { adName: string; bidAmountInRobux: number; }; -export interface AdConfigurationStopSponsoredGameAd { +export type AdConfigurationStopSponsoredGameAdOptions = { adSetId: number; -} +}; +export type AdConfigurationGetSponsoredGamesOptions = { + universeId: number; + includeReportingStats?: boolean; + isArchived?: boolean; + pageCursor?: string; +}; export default class AdConfigurationAPI extends BaseAPI { constructor(client: Client) { @@ -69,12 +76,9 @@ export default class AdConfigurationAPI extends BaseAPI { }); } - getSponsoredGames(options: { - universeId: number; - includeReportingStats?: boolean; - isArchived?: boolean; - pageCursor?: string; - }): Promise { + getSponsoredGames( + options: AdConfigurationGetSponsoredGamesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -91,9 +95,9 @@ export default class AdConfigurationAPI extends BaseAPI { }).then((response) => response.body); } - getUniverses(options: { - groupId?: number; - }): Promise { + getUniverses( + options: Partial + ): Promise { return this.request({ requiresAuth: true, request: { @@ -108,7 +112,7 @@ export default class AdConfigurationAPI extends BaseAPI { } createSponsor( - options: AdConfigurationCreateSponsoredGameAd + options: AdConfigurationCreateSponsoredGameAdOptions ): Promise { return this.request({ requiresAuth: true, @@ -121,7 +125,9 @@ export default class AdConfigurationAPI extends BaseAPI { }).then(() => true); } - stopSponsor(options: AdConfigurationStopSponsoredGameAd): Promise { + stopSponsor( + options: AdConfigurationStopSponsoredGameAdOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/AssetDeliveryAPI.ts b/src/client/apis/AssetDeliveryAPI.ts index 1925b4615..c033f02d7 100644 --- a/src/client/apis/AssetDeliveryAPI.ts +++ b/src/client/apis/AssetDeliveryAPI.ts @@ -1,7 +1,7 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type BaseAssetDeliveryOptions = { +export type AssetDeliveryBaseOptions = { acceptEncoding: string; robloxPlaceId: number; assetType: string; @@ -13,7 +13,7 @@ export type BaseAssetDeliveryOptions = { serverPlaceId: number; expectedAssetType: string; }; -export type BaseAsset = { +export type AssetDeliveryBaseAsset = { location?: string; errors?: { code: number; message: string }[]; requestId?: string; @@ -21,7 +21,7 @@ export type BaseAsset = { isCopyrightProtected?: boolean; isArchived?: boolean; }; -export type BaseAssetRaw = { +export type AssetDeliveryBaseAssetRaw = { Location?: string; Errors?: { Code: number; Message: string }[]; RequestId?: string; @@ -30,13 +30,15 @@ export type BaseAssetRaw = { IsArchived?: boolean; }; -const convertToBaseAsset = (options: BaseAssetRaw): BaseAsset => ({ +const convertToBaseAsset = ( + options: AssetDeliveryBaseAssetRaw +): AssetDeliveryBaseAsset => ({ errors: typeof options.Errors !== "undefined" ? options.Errors.map((v) => ({ - message: v.Message, - code: v.Code - })) + message: v.Message, + code: v.Code + })) : undefined, isArchived: typeof options.IsArchived !== "undefined" ? options.IsArchived : undefined, @@ -54,7 +56,7 @@ const convertToBaseAsset = (options: BaseAssetRaw): BaseAsset => ({ typeof options.RequestId !== "undefined" ? options.RequestId : undefined }); const generateBaseDeliveryAssetOptions = ( - options: BaseAssetDeliveryOptions + options: AssetDeliveryBaseOptions ) => ({ headers: { "Accept-Encoding": options.acceptEncoding, @@ -72,40 +74,48 @@ const generateBaseDeliveryAssetOptions = ( } }); -export type GetAssetByAliasOptions = BaseAssetDeliveryOptions & { +export type AssetDeliveryGetAssetByAliasOptions = AssetDeliveryBaseOptions & { alias: string; }; -export type GetAssetByAlias = BaseAsset; -export type GetAssetByIdOptions = BaseAssetDeliveryOptions & { id: number }; -export type GetAssetById = { +export type AssetDeliveryGetAssetByAlias = AssetDeliveryBaseAsset; +export type AssetDeliveryGetAssetByIdOptions = AssetDeliveryBaseOptions & { + id: number; +}; +export type AssetDeliveryGetAssetById = { location?: string; request?: unknown; }; -export type GetAssetByHashOptions = BaseAssetDeliveryOptions & { hash: string }; -export type GetAssetByHash = unknown; -export type GetAssetByAssetIdOptions = BaseAssetDeliveryOptions & { - assetId: number; +export type AssetDeliveryGetAssetByHashOptions = AssetDeliveryBaseOptions & { + hash: string; }; -export type GetAssetByAssetId = unknown; -export type GetAssetVersionByAssetIdOptions = BaseAssetDeliveryOptions & { +export type AssetDeliveryGetAssetByHash = unknown; +export type AssetDeliveryGetAssetByAssetIdOptions = AssetDeliveryBaseOptions & { assetId: number; - version: number; -}; -export type GetAssetVersionByAssetId = unknown; -export type GetAssetByAssetVersionIdOptions = BaseAssetDeliveryOptions & { - assetVersionId: number; -}; -export type GetAssetByAssetVersionId = unknown; -export type GetAssetByMarAssetHashOptions = BaseAssetDeliveryOptions & { - marAssetHash: string; - marCheckSum: string; }; -export type GetAssetByMarAssetHash = unknown; -export type GetAssetByUserAssetIdOptions = BaseAssetDeliveryOptions & { - userAssetId: number; -}; -export type GetAssetByUserAssetId = unknown; -export type GetBatchAssetsOptions = { +export type AssetDeliveryGetAssetByAssetId = unknown; +export type AssetDeliveryGetAssetVersionByAssetIdOptions = + AssetDeliveryBaseOptions & { + assetId: number; + version: number; + }; +export type AssetDeliveryGetAssetVersionByAssetId = unknown; +export type AssetDeliveryGetAssetByAssetVersionIdOptions = + AssetDeliveryBaseOptions & { + assetVersionId: number; + }; +export type AssetDeliveryGetAssetByAssetVersionId = unknown; +export type AssetDeliveryGetAssetByMarAssetHashOptions = + AssetDeliveryBaseOptions & { + marAssetHash: string; + marCheckSum: string; + }; +export type AssetDeliveryGetAssetByMarAssetHash = unknown; +export type AssetDeliveryGetAssetByUserAssetIdOptions = + AssetDeliveryBaseOptions & { + userAssetId: number; + }; +export type AssetDeliveryGetAssetByUserAssetId = unknown; +export type AssetDeliveryGetBatchAssetsOptions = { assetName: string; assetType: string; clientInsert: boolean; @@ -123,17 +133,19 @@ export type GetBatchAssetsOptions = { assetVersionId: number; modulePlaceId: number; }; -export type GetBatchAssets = BaseAsset[]; +export type AssetDeliveryGetBatchAssets = AssetDeliveryBaseAsset[]; export default class AssetDeliveryAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ baseUrl: "https://assetdelivery.roblox.com/", client }); } - getAssetByAlias (options: GetAssetByAliasOptions): Promise { + getAssetByAlias( + options: AssetDeliveryGetAssetByAliasOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -147,10 +159,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then((response) => convertToBaseAsset(response.body) as GetAssetByAlias); + }).then((response) => convertToBaseAsset(response.body)); } - getAssetById (options: GetAssetByIdOptions): Promise { + getAssetById( + options: AssetDeliveryGetAssetByIdOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -171,7 +185,9 @@ export default class AssetDeliveryAPI extends BaseAPI { })); } - getAssetByHash (options: GetAssetByHashOptions): Promise { + getAssetByHash( + options: AssetDeliveryGetAssetByHashOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -185,12 +201,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then((response) => convertToBaseAsset(response.body) as GetAssetByHash); + }).then((response) => convertToBaseAsset(response.body)); } - getAssetByAssetId ( - options: GetAssetByAssetIdOptions - ): Promise { + getAssetByAssetId( + options: AssetDeliveryGetAssetByAssetIdOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -204,14 +220,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then( - (response) => convertToBaseAsset(response.body) as GetAssetByAssetId - ); + }).then((response) => convertToBaseAsset(response.body)); } - getAssetVersionByAssetId ( - options: GetAssetVersionByAssetIdOptions - ): Promise { + getAssetVersionByAssetId( + options: AssetDeliveryGetAssetVersionByAssetIdOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -225,15 +239,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then( - (response) => - convertToBaseAsset(response.body) as GetAssetVersionByAssetId - ); + }).then((response) => convertToBaseAsset(response.body)); } - getAssetByAssetVersionId ( - options: GetAssetByAssetVersionIdOptions - ): Promise { + getAssetByAssetVersionId( + options: AssetDeliveryGetAssetByAssetVersionIdOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -247,15 +258,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then( - (response) => - convertToBaseAsset(response.body) as GetAssetByAssetVersionId - ); + }).then((response) => convertToBaseAsset(response.body)); } - getAssetByMarAssetHash ( - options: GetAssetByMarAssetHashOptions - ): Promise { + getAssetByMarAssetHash( + options: AssetDeliveryGetAssetByMarAssetHashOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -269,14 +277,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then( - (response) => convertToBaseAsset(response.body) as GetAssetByMarAssetHash - ); + }).then((response) => convertToBaseAsset(response.body)); } - getAssetByUserAssetId ( - options: GetAssetByUserAssetIdOptions - ): Promise { + getAssetByUserAssetId( + options: AssetDeliveryGetAssetByUserAssetIdOptions + ): Promise { const generatedOptions = generateBaseDeliveryAssetOptions(options); return this.request({ json: true, @@ -290,12 +296,12 @@ export default class AssetDeliveryAPI extends BaseAPI { ...generatedOptions.headers } } - }).then( - (response) => convertToBaseAsset(response.body) as GetAssetByUserAssetId - ); + }).then((response) => convertToBaseAsset(response.body)); } - getBatchAssets (options: GetBatchAssetsOptions): Promise { + getBatchAssets( + options: AssetDeliveryGetBatchAssetsOptions + ): Promise { return this.request({ requiresAuth: true, json: true, @@ -304,11 +310,10 @@ export default class AssetDeliveryAPI extends BaseAPI { method: "POST", json: options } - }).then( - (response) => - response.body.map((value: BaseAssetRaw) => - convertToBaseAsset(value) - ) as GetBatchAssets + }).then((response) => + response.body.map((value: AssetDeliveryBaseAssetRaw) => + convertToBaseAsset(value) + ) ); } } diff --git a/src/client/apis/AuthAPI.ts b/src/client/apis/AuthAPI.ts index 3831117a0..4574020cb 100644 --- a/src/client/apis/AuthAPI.ts +++ b/src/client/apis/AuthAPI.ts @@ -1,10 +1,18 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +import { UsernamePasswordOption } from "../../types/GenericOptionTypes"; // AccountPin export type AuthPin = { pin: string; }; +export type AuthUnlockPinOptions = AuthPin; +export type AuthUnlockPin = { + unlockedUntil: number; +}; +export type AuthLockPin = { + success: boolean; +}; // Metadata export type AuthMetaData = { @@ -24,17 +32,17 @@ export type AuthMetaData = { export type AuthTicket = { authTicket: string; }; -export type GetAuthMetaData = { +export type AuthEndpointMetaData = { cookieLawNoticeTimeout: number; }; -export type LoginOptions = { +export type AuthLoginOptions = { ctype: "Email" | "Username" | string; cvalue: string; password: string; captchaToken: string; captchaProvider: "PROVIDER_ARKOSELABS" | string; }; -export type Login = { +export type AuthLogin = { user: { id: number; name: string; @@ -45,71 +53,55 @@ export type Login = { ticket: string; }; }; -export type Logout = unknown; -export type GetCredentialsVerificationStatusOptions = { +export type AuthCredentialsVerificationOptions = { credentialType: "Email" | "Username" | "PhoneNumber"; credentialValue: string; password: string; }; -export type GetCredentialsVerificationStatus = { +export type AuthGetCredentialsVerificationStatus = { canSend: boolean; }; -export type SendCredentialsVerificationMessageOptions = { - credentialType: "Email" | "Username" | "PhoneNumber"; - credentialValue: string; - password: string; -}; -export type SendCredentialsVerificationMessage = unknown; -export type GetMetaData = { - isUpdateUsernameEnabled: boolean; - ftuxAvatarAssetMap: string; -}; -export type GetCurrentPasswordStatus = { +export type AuthGetCurrentPasswordStatus = { valid: boolean; }; -export type GetPasswordResetMetaDataOptions = { +export type AuthGetPasswordResetMetaDataOptions = { targetType: "Email" | "PhoneNumber"; ticket: string; }; -export type GetPasswordResetMetaData = { +export type AuthGetPasswordResetMetaData = { users: { userId: number; username: string; displayName: string; }[]; }; -export type ResetPasswordOptions = { +export type AuthResetPasswordOptions = { targetType: "Email" | "PhoneNumber"; ticket: string; userId: number; password: string; passwordRepeated: string; }; -export type ResetPassword = Login; -export type ValidatePasswordOptions = { - username: string; - password: string; -}; -export type ValidatePassword = { +export type AuthValidatePassword = { code: string; message: string; }; -export type SendPasswordResetOptions = { - targetType: ResetPasswordOptions["targetType"]; +export type AuthSendPasswordResetOptions = { + targetType: AuthResetPasswordOptions["targetType"]; target: string; captchaToken: string; captchaProvider: "PROVIDER_ARKOSELABS" | string; }; -export type SendPasswordReset = { +export type AuthSendPasswordReset = { nonce: string; transmissionType: string; }; -export type VerifyPasswordResetOptions = { - targetType: ResetPasswordOptions["targetType"]; +export type AuthVerifyPasswordResetOptions = { + targetType: AuthResetPasswordOptions["targetType"]; nonce: string; code: string; }; -export type VerifyPasswordReset = { +export type AuthVerifyPasswordReset = { userTickets: { user: { userId: number; @@ -119,22 +111,21 @@ export type VerifyPasswordReset = { ticket: string; }[]; }; -export type ChangeUserPasswordOptions = { +export type AuthChangeUserPasswordOptions = { currentPassword: string; newPassword: string; }; -export type ChangeUserPassword = unknown; -export type GetRecoveryMetaData = { +export type AuthGetRecoveryMetaData = { isOnPhone: boolean; codeLength: number; isPhoneFeatureEnabledForUsername: boolean; isPhoneFeatureEnabledForPassword: boolean; isBedev2CaptchaEnabledForPasswordReset: boolean; }; -export type RevertAccountInfoOptions = { +export type AuthRevertAccountInfoOptions = { ticket: string; }; -export type RevertAccountInfo = { +export type AuthRevertAccountInfo = { isTwoStepVerificationEnabled: boolean; isEmailVerified: boolean; isEmailChanged: boolean; @@ -142,60 +133,58 @@ export type RevertAccountInfo = { username: string; ticket: string; }; -export type RevertAccountOptions = { +export type AuthRevertAccountOptions = { userId: number; newPassword: string; ticket: string; }; -export type RevertAccount = Login; -export type GetSAMLMetaData = unknown; -export type SAMLRequest = unknown; -export type GetTwoStepVerificationMetaData = { +export type AuthGetSAMLMetaData = unknown; +export type AuthSAMLRequest = unknown; +export type AuthGetTwoStepVerificationMetaData = { codeLength: number; loadingImageUrl: string; supportUrl: string; }; -export type ResendTwoStepVerificationOptions = { +export type AuthResendTwoStepVerificationOptions = { username: string; ticket: string; actionType: string; }; -export type ResendTwoStepVerification = RequestTwoStepVerification; -export type RequestTwoStepVerification = { +export type AuthTwoStepVerification = { mediaType: "Email" | "PhoneNumber" | string; ticket: string; }; -export type VerifyTwoStepVerificationOptions = { +export type AuthVerifyTwoStepVerificationOptions = { username: string; ticket: string; code: string; rememberDevice: boolean; actionType: string; }; -export type VerifyTwoStepVerification = unknown; -export type GetExistingUsernamesOptions = { +export type AuthVerifyTwoStepVerification = unknown; +export type AuthGetExistingUsernamesOptions = { username: string; }; -export type GetExistingUsernames = { +export type AuthGetExistingUsernames = { usernames: string[]; }; -export type ValidateUsernameOptions = { +export type AuthValidateUsernameOptions = { username: string; birthday: string; context: "Unknown" | "Signup" | "UsernameChange" | string; }; -export type ValidateUsername = { +export type AuthValidateUsername = { code: string; message: string; }; -export type RecoverUsernamesOptions = { +export type AuthRecoverUsernamesOptions = { targetType: "Email" | string; target: string; }; -export type RecoverUsernames = { +export type AuthRecoverUsernames = { transmissionType: string; }; -export type SignUpOptions = { +export type AuthSignUpOptions = { username: string; password: string; gender: "Unknown" | string; @@ -213,15 +202,21 @@ export type SignUpOptions = { captchaToken: string; captchaProvider: string; }; -export type SignUp = { +export type AuthSignUp = { userId: number; starterPlaceId: number; }; -export type ChangeUsernameOptions = { +export type AuthChangeUsernameOptions = { username: string; password: string; }; -export type ChangeUsername = unknown; +export type AuthChangeUsername = unknown; +export type AuthChangeUserPassword = unknown; +export type AuthResetPassword = AuthLogin & { + identityVerificationLoginTicket: string; + isBanned: boolean; +}; +export type AuthRevertAccount = AuthResetPassword; export default class AuthAPI extends BaseAPI { constructor(client: Client) { @@ -231,7 +226,7 @@ export default class AuthAPI extends BaseAPI { }); } - unlockPin(options: AuthPin): Promise { + unlockPin(options: AuthUnlockPinOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -240,10 +235,10 @@ export default class AuthAPI extends BaseAPI { json: options }, json: true - }).then(() => true); + }).then((response) => response.body); } - lockPin(): Promise { + lockPin(): Promise { return this.request({ requiresAuth: true, request: { @@ -251,7 +246,7 @@ export default class AuthAPI extends BaseAPI { method: "POST" }, json: true - }).then(() => true); + }).then((response) => response.body); } getAuthTicket(): Promise { @@ -298,19 +293,19 @@ export default class AuthAPI extends BaseAPI { })); } - getCurrentUserPasswordStatus(): Promise { + getCurrentUserPasswordStatus(): Promise { return this.request({ json: true, requiresAuth: true, request: { path: "v2/passwords/current-status" } - }).then((response) => response.body as GetCurrentPasswordStatus); + }).then((response) => response.body); } getPasswordResetMetaData( - options: GetPasswordResetMetaDataOptions - ): Promise { + options: AuthGetPasswordResetMetaDataOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -321,24 +316,24 @@ export default class AuthAPI extends BaseAPI { "request.ticket": options.ticket } } - }).then((response) => response.body as GetPasswordResetMetaData); + }).then((response) => response.body); } - resetPassword(options: ResetPasswordOptions): Promise { + resetPassword(options: AuthResetPasswordOptions): Promise { return this.request({ json: true, requiresAuth: false, request: { - path: "v2/auth/metadata", + path: "v2/passwords/reset", method: "POST", json: options } - }).then((response) => response.body as ResetPassword); + }).then((response) => response.body); } validatePassword( - options: ValidatePasswordOptions - ): Promise { + options: UsernamePasswordOption + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -349,12 +344,12 @@ export default class AuthAPI extends BaseAPI { "request.password": options.password } } - }).then((response) => response.body as ValidatePassword); + }).then((response) => response.body); } sendPasswordReset( - options: SendPasswordResetOptions - ): Promise { + options: AuthSendPasswordResetOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -363,12 +358,12 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as SendPasswordReset); + }).then((response) => response.body); } verifyPasswordReset( - options: VerifyPasswordResetOptions - ): Promise { + options: AuthVerifyPasswordResetOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -377,12 +372,12 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as VerifyPasswordReset); + }).then((response) => response.body); } changeUserPassword( - options: ChangeUserPasswordOptions - ): Promise { + options: AuthChangeUserPasswordOptions + ): Promise { return this.request({ json: true, requiresAuth: true, @@ -391,22 +386,22 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as ChangeUserPassword); + }).then((response) => response.body); } - getRecoveryMetaData(): Promise { + getRecoveryMetaData(): Promise { return this.request({ json: true, requiresAuth: false, request: { path: "v2/recovery/metadata" } - }).then((response) => response.body as GetRecoveryMetaData); + }).then((response) => response.body); } getRevertAccountInfo( - options: RevertAccountInfoOptions - ): Promise { + options: AuthRevertAccountInfoOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -416,10 +411,10 @@ export default class AuthAPI extends BaseAPI { ticket: options.ticket } } - }).then((response) => response.body as RevertAccountInfo); + }).then((response) => response.body); } - revertAccount(options: RevertAccountOptions): Promise { + revertAccount(options: AuthRevertAccountOptions): Promise { return this.request({ json: true, requiresAuth: false, @@ -428,20 +423,20 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as RevertAccount); + }).then((response) => response.body); } - getSAMLMetaData(): Promise { + getSAMLMetaData(): Promise { return this.request({ json: true, requiresAuth: false, request: { path: "v2/saml/metadata" } - }).then((response) => response.body as GetSAMLMetaData); + }).then((response) => response.body); } - samlAuthenticate(): Promise { + samlAuthenticate(): Promise { return this.request({ json: true, requiresAuth: false, @@ -449,22 +444,22 @@ export default class AuthAPI extends BaseAPI { path: "v2/saml/login", method: "POST" } - }).then((response) => response.body as SAMLRequest); + }).then((response) => response.body); } - getTwoStepVerificationMetaData(): Promise { + getTwoStepVerificationMetaData(): Promise { return this.request({ json: true, requiresAuth: false, request: { path: "v2/twostepverification/metadata" } - }).then((response) => response.body as GetTwoStepVerificationMetaData); + }).then((response) => response.body); } resendTwoStepVerificationCode( - options: ResendTwoStepVerificationOptions - ): Promise { + options: AuthResendTwoStepVerificationOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -473,12 +468,12 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as ResendTwoStepVerification); + }).then((response) => response.body); } - verifyTwoStepCode( - options: VerifyTwoStepVerificationOptions - ): Promise { + verifyTwoStepVerificationCode( + options: AuthVerifyTwoStepVerificationOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -487,12 +482,12 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as VerifyTwoStepVerification); + }).then((response) => response.body); } getExistingUsernames( - options: GetExistingUsernamesOptions - ): Promise { + options: AuthGetExistingUsernamesOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -502,12 +497,12 @@ export default class AuthAPI extends BaseAPI { username: options.username } } - }).then((response) => response.body as GetExistingUsernames); + }).then((response) => response.body); } validateUsername( - options: ValidateUsernameOptions - ): Promise { + options: AuthValidateUsernameOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -519,12 +514,12 @@ export default class AuthAPI extends BaseAPI { "request.context": options.context } } - }).then((response) => response.body as ValidateUsername); + }).then((response) => response.body); } recoverUsernames( - options: RecoverUsernamesOptions - ): Promise { + options: AuthRecoverUsernamesOptions + ): Promise { return this.request({ json: true, requiresAuth: false, @@ -532,10 +527,10 @@ export default class AuthAPI extends BaseAPI { path: "v2/twostepverification/metadata", json: options } - }).then((response) => response.body as RecoverUsernames); + }).then((response) => response.body); } - signUp(options: SignUpOptions): Promise { + signUp(options: AuthSignUpOptions): Promise { return this.request({ json: true, requiresAuth: false, @@ -544,10 +539,12 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as SignUp); + }).then((response) => response.body); } - changeUserUsername(options: ChangeUsernameOptions): Promise { + changeUserUsername( + options: AuthChangeUsernameOptions + ): Promise { return this.request({ json: true, requiresAuth: true, @@ -556,6 +553,6 @@ export default class AuthAPI extends BaseAPI { method: "POST", json: options } - }).then((response) => response.body as ChangeUsername); + }).then((response) => response.body); } } diff --git a/src/client/apis/AvatarAPI.ts b/src/client/apis/AvatarAPI.ts index c9beb0c5f..5311ddd63 100644 --- a/src/client/apis/AvatarAPI.ts +++ b/src/client/apis/AvatarAPI.ts @@ -1,7 +1,13 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +import type { + AssetIdOption, + AssetIdsOption, + SuccessResponse, + UserIdOption +} from "../.."; -export type BodyScales = { +export type AvatarBodyScales = { height: number; width: number; head: number; @@ -9,7 +15,7 @@ export type BodyScales = { proportion: number; bodyType: number; }; -export type BodyColors = { +export type AvatarBodyColors = { headColorId: number; torsoColorId: number; rightArmColorId: number; @@ -17,21 +23,21 @@ export type BodyColors = { rightLegColorId: number; leftLegColorId: number; }; -export type Scale = { +export type AvatarScale = { min: number; max: number; increment: number; }; -export type ColorPalette = { +export type AvatarColorPalette = { brickColorId: number; hexColor: string; name: string; }; -export type UserAvatar = { - scales: BodyScales; +export type AvatarUserAvatar = { + scales: AvatarBodyScales; playerAvatarType: "R6" | "R15" | string; - bodyColors: BodyColors; + bodyColors: AvatarBodyColors; assets: { id: number; name: string; @@ -48,7 +54,7 @@ export type UserAvatar = { position: number; }[]; }; -export type GetAvatarMetadata = { +export type AvatarGetMetaData = { enableDefaultClothingMessage: boolean; isAvatarScaleEmbeddedInTab: boolean; isBodyTypeScaleOutOfTab: boolean; @@ -61,21 +67,21 @@ export type GetAvatarMetadata = { showDefaultClothingMessageOnPageLoad: boolean; areThreeDeeThumbsEnabled: boolean; }; -export type GetAvatarRules = { +export type AvatarGetRules = { playerAvatarTypes: ("R6" | "R15" | string)[]; scales: { - height: Scale; - width: Scale; - head: Scale; - bodyType: Scale; + height: AvatarScale; + width: AvatarScale; + head: AvatarScale; + bodyType: AvatarScale; }; wearableAssetTypes: { maxNumber: number; id: number; name: string; }[]; - bodyColorsPalette: ColorPalette[]; - basicBodyColorsPalette: ColorPalette[]; + bodyColorsPalette: AvatarColorPalette[]; + basicBodyColorsPalette: AvatarColorPalette[]; minimumDeltaEBodyColorDifference: number; proportionsAndBodyTypeEnabledForUser: boolean; defaultClothingAssetLists: { @@ -85,23 +91,7 @@ export type GetAvatarRules = { bundlesEnabledForUser: boolean; emotesEnabledForUser: boolean; }; -export type GetUserAvatarOptions = { - userId: number; -}; -export type GetUserAvatar = UserAvatar; -export type GetUserCurrentlyWearingOptions = { - userId: number; -}; -export type GetUserCurrentlyWearing = { - assetIds: number[]; -}; -export type GetUserOutfitsOptions = { - userId: number; - page?: number; - itemsPerPage?: number; - isEditable?: boolean; -}; -export type GetUserOutfits = { +export type AvatarGetUserOutfits = { filteredCount: number; data: { id: number; @@ -110,37 +100,8 @@ export type GetUserOutfits = { }[]; total: number; }; -export type RemoveAssetFromAvatarOptions = { - assetId: number; -}; -export type RemoveAssetFromAvatar = { - success: boolean; -}; -export type WearAssetOnAvatarOptions = { - assetId: number; -}; -export type WearAssetOnAvatar = { - success: boolean; -}; -export declare type RedrawThumbnail = unknown; -export type SetBodyColorsOptions = BodyColors; -export type SetBodyColors = { - success: boolean; -}; -export type SetPlayerAvatarTypeOptions = { - playerAvatarType: "R6" | "R15" | string; -}; -export type SetPlayerAvatarType = { - success: boolean; -}; -export type SetPlayerAvatarScalesOptions = BodyScales; -export type SetPlayerAvatarScales = { - success: boolean; -}; -export type SetPlayerAvatarWearingAssetsOptions = { - assetIds: number[]; -}; -export type SetPlayerAvatarWearingAssets = { +export declare type AvatarRedrawThumbnail = unknown; +export type AvatarSetPlayerAvatarWearingAssets = { invalidAssets?: { id: number; name: string; @@ -152,10 +113,7 @@ export type SetPlayerAvatarWearingAssets = { invalidAssetIds?: number[]; success: boolean; }; -export type GetOutfitOptions = { - userOutfitId: number; -}; -export type GetOutfit = { +export type AvatarGetOutfit = { id: number; name: string; assets: { @@ -166,7 +124,7 @@ export type GetOutfit = { name: string; }; }[]; - bodyColors: BodyColors; + bodyColors: AvatarBodyColors; scale: { height: number; width: number; @@ -178,36 +136,8 @@ export type GetOutfit = { playerAvatarType: string; isEditable: boolean; }; -export type DeleteOutfitOptions = { - userOutfitId: number; -}; -export type DeleteOutfit = { - success: boolean; -}; -export type UpdateOutfitOptions = Omit; -export type UpdateOutfit = { - success: boolean; -}; -export type WearOutfitOptions = { - userOutfitId: number; -}; -export type WearOutfit = SetPlayerAvatarWearingAssets; -export type CreateOutfitOptions = Omit; -export type CreateOutfit = { - success: boolean; -}; -export type GetRecentItemsOptions = { - recentItemListType: - | "All" - | "Clothing" - | "BodyParts" - | "AvatarAnimations" - | "Accessories" - | "Outfits" - | "Gear" - | string; -}; -export type GetRecentItems = { +export type AvatarWearOutfit = AvatarSetPlayerAvatarWearingAssets; +export type AvatarGetRecentItems = { data: { id: number; name: string; @@ -220,16 +150,39 @@ export type GetRecentItems = { }[]; total: number; }; +export type AvatarGetUserOutfitsOptions = { + userId: number; + page?: number; + itemsPerPage?: number; + isEditable?: boolean; +}; +export type AvatarSetSelfAvatarBodyColorsOptions = AvatarBodyColors; +export type AvatarSetSelfAvatarTypeOptions = { + playerAvatarType: "R6" | "R15"; +}; +export type AvatarSetSelfAvatarScalesOptions = AvatarBodyScales; +export type AvatarGetOutfitOptions = { + userOutfitId: number; +}; +export type AvatarDeleteOutfitOptions = AvatarGetOutfitOptions; +export type AvatarUpdateOutfitOptions = Omit; +export type AvatarWearOutfitOptions = { + userOutfitId: number; +}; +export type AvatarCreateOutfitOptions = AvatarUpdateOutfitOptions; +export type AvatarGetRecentlyUsedOptions = { + recentItemListType: string; +}; export default class AvatarAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://avatar.roblox.com/" }); } - getSelfAvatar (): Promise { + getSelfAvatar(): Promise { return this.request({ requiresAuth: true, request: { @@ -239,7 +192,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getAvatarMetaData (): Promise { + getAvatarMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -249,7 +202,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getAvatarRules (): Promise { + getAvatarRules(): Promise { return this.request({ requiresAuth: true, request: { @@ -259,7 +212,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUserAvatar (options: GetUserAvatarOptions): Promise { + getUserAvatar(options: UserIdOption): Promise { return this.request({ requiresAuth: true, request: { @@ -269,9 +222,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUserCurrentlyWearing ( - options: GetUserCurrentlyWearingOptions - ): Promise { + getUserCurrentlyWearing(options: UserIdOption): Promise { return this.request({ requiresAuth: false, request: { @@ -281,7 +232,9 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUserOutfits (options: GetUserOutfitsOptions): Promise { + getUserOutfits( + options: AvatarGetUserOutfitsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -291,9 +244,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - removeAssetFromAvatar ( - options: RemoveAssetFromAvatarOptions - ): Promise { + removeAssetFromAvatar(options: AssetIdOption): Promise { return this.request({ requiresAuth: true, request: { @@ -304,9 +255,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - wearAssetOnAvatar ( - options: WearAssetOnAvatarOptions - ): Promise { + wearAssetOnAvatar(options: AssetIdOption): Promise { return this.request({ requiresAuth: true, request: { @@ -317,7 +266,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - redrawThumbnail (): Promise { + redrawThumbnail(): Promise { return this.request({ requiresAuth: true, request: { @@ -328,9 +277,9 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - setSelfAvatarBodyColors ( - options: SetBodyColorsOptions - ): Promise { + setSelfAvatarBodyColors( + options: AvatarSetSelfAvatarBodyColorsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -342,9 +291,9 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - setSelfAvatarType ( - options: SetPlayerAvatarTypeOptions - ): Promise { + setSelfAvatarType( + options: AvatarSetSelfAvatarTypeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -356,9 +305,9 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - setSelfAvatarScales ( - options: SetPlayerAvatarScalesOptions - ): Promise { + setSelfAvatarScales( + options: AvatarSetSelfAvatarScalesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -370,9 +319,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - setSelfWearingAssets ( - options: SetPlayerAvatarWearingAssetsOptions - ): Promise { + setSelfWearingAssets(options: AssetIdsOption): Promise { return this.request({ requiresAuth: true, request: { @@ -384,7 +331,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getOutfit (options: GetOutfitOptions): Promise { + getOutfit(options: AvatarGetOutfitOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -394,7 +341,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - deleteOutfit (options: DeleteOutfitOptions): Promise { + deleteOutfit(options: AvatarDeleteOutfitOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -405,7 +352,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - updateOutfit (options: UpdateOutfitOptions): Promise { + updateOutfit(options: AvatarUpdateOutfitOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -417,7 +364,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - wearOutfit (options: WearOutfitOptions): Promise { + wearOutfit(options: AvatarWearOutfitOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -428,7 +375,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - createOutfit (options: CreateOutfitOptions): Promise { + createOutfit(options: AvatarCreateOutfitOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -440,7 +387,9 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getRecentlyUsed (options: GetRecentItemsOptions): Promise { + getRecentlyUsed( + options: AvatarGetRecentlyUsedOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/BadgesAPI.ts b/src/client/apis/BadgesAPI.ts index 973bd9be9..a5ab80131 100644 --- a/src/client/apis/BadgesAPI.ts +++ b/src/client/apis/BadgesAPI.ts @@ -1,61 +1,75 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { GameBadgeOptions } from "../../structures/Game"; +import { SortOption } from "../.."; -export type BadgeMetaData = { +export type BadgesMetaData = { badgeCreationPrice: number; maxBadgeNameLength: number; maxBadgeDescriptionLength: number; }; -export type GetBadgeOptions = { - badgeId: number; -}; -export type GetBadge = GameBadgeOptions; -export type UpdateBadgeOptions = { +export type BadgesGetBadge = { id: number; name: string; description: string; + displayName: string; + displayDescription: string; enabled: boolean; + iconImageId: number; + displayIconImageId: number; + created: string; + updated: string; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: { + id: number; + name: string; + rootPlaceId: number; + }; }; -export type UpdateBadge = unknown; -export type GetUniverseBadgesOptions = { - universeId: number; - limit?: 10 | 25 | 50 | 100; - cursor?: string; - sortOrder?: "Asc" | "Desc"; -}; -export type GetUniverseBadges = { +export type BadgesUpdateBadge = unknown; +export type BadgesGetBadges = { previousPageCursor: string; nextPageCursor: string; - data: GetBadge[]; -}; -export type GetUserBadgesOptions = { - userId: number; - limit?: 10 | 25 | 50 | 100; - cursor?: string; - sortOrder?: "Asc" | "Desc"; + data: BadgesGetBadge[]; }; -export type GetUserBadges = GetUniverseBadges; -export type GetUserBadgesAwardedDatesOptions = { - userId: number; - badgeIds: number[]; -}; -export type GetUserBadgesAwardedDates = { +export type BadgesGetUserBadgesAwardedDates = { data: { badgeId: number; awardedDate: string; }[]; }; -export type DeleteBadgeFromUserOptions = { +export type BadgesDeleteBadgeFromUser = unknown; +export type BadgesDeleteBadgeFromSelf = BadgesDeleteBadgeFromUser; +export type BadgesGetBadgeOptions = { + badgeId: number; +}; +export type BadgesUpdateBadgeOptions = { + id: number; + name: string; + description: string; + enabled: boolean; +}; +export type BadgesGetUniverseBadgesOptions = { + universeId: number; +} & SortOption; +export type BadgesGetUserBadgesOptions = { + userId: number; +} & SortOption; +export type BadgesGetUserBadgesAwardedDatesOptions = { + userId: number; + badgeIds: number[]; +}; +export type BadgesDeleteBadgeFromUserOptions = { userId: number; badgeId: number; }; -export type DeleteBadgeFromUser = unknown; -export type DeleteBadgeFromSelfOptions = { +export type BadgesDeleteBadgeFromSelfOptions = { badgeId: number; }; -export type DeleteBadgeFromSelf = DeleteBadgeFromUser; export default class AvatarAPI extends BaseAPI { constructor(client: Client) { @@ -65,7 +79,7 @@ export default class AvatarAPI extends BaseAPI { }); } - getMetaData(): Promise { + getMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -75,7 +89,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getBadge(options: GetBadgeOptions): Promise { + getBadge(options: BadgesGetBadgeOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -85,7 +99,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - updateBadge(options: UpdateBadgeOptions): Promise { + updateBadge(options: BadgesUpdateBadgeOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -97,8 +111,8 @@ export default class AvatarAPI extends BaseAPI { } getUniverseBadges( - options: GetUniverseBadgesOptions - ): Promise { + options: BadgesGetUniverseBadgesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -109,7 +123,7 @@ export default class AvatarAPI extends BaseAPI { }).then((response) => response.body); } - getUserBadges(options: GetUserBadgesOptions): Promise { + getUserBadges(options: BadgesGetUserBadgesOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -121,8 +135,8 @@ export default class AvatarAPI extends BaseAPI { } getUserBadgesAwardedDates( - options: GetUserBadgesAwardedDatesOptions - ): Promise { + options: BadgesGetUserBadgesAwardedDatesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -136,8 +150,8 @@ export default class AvatarAPI extends BaseAPI { } deleteBadgeFromUser( - options: DeleteBadgeFromUserOptions - ): Promise { + options: BadgesDeleteBadgeFromUserOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -149,8 +163,8 @@ export default class AvatarAPI extends BaseAPI { } deleteBadgeFromSelf( - options: DeleteBadgeFromSelfOptions - ): Promise { + options: BadgesDeleteBadgeFromSelfOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/BaseAPI.ts b/src/client/apis/BaseAPI.ts index 5f0780a61..c08b6f6ed 100644 --- a/src/client/apis/BaseAPI.ts +++ b/src/client/apis/BaseAPI.ts @@ -5,7 +5,7 @@ import { } from "../../interfaces/RESTInterfaces"; import Client from "../Client"; -export declare type BaseAPIRequestOptions = { +export type BaseAPIRequestOptions = { /** * The request options */ @@ -27,12 +27,12 @@ export default class BaseAPI { public client: Client; public options: BaseAPIOptions; - constructor (options: BaseAPIOptions) { + constructor(options: BaseAPIOptions) { this.client = options.client; this.options = options; } - request (options: BaseAPIRequestOptions): Promise { + request(options: BaseAPIRequestOptions): Promise { if (options.requiresAuth) { if (!this.options.client.isLoggedIn()) { throw new Error( diff --git a/src/client/apis/BillingAPI.ts b/src/client/apis/BillingAPI.ts index 6f332394a..e3e50cac2 100644 --- a/src/client/apis/BillingAPI.ts +++ b/src/client/apis/BillingAPI.ts @@ -1,22 +1,16 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +import { SortOption } from "../.."; -export type GetDeveloperExchangeRate = { +export type BillingGetDeveloperExchangeRate = { rate: number; "currency-code": string; }; -export type SubmitDeveloperExchangeOptions = { - firstName: string; - lastName: string; - emailAddress: string; - password: string; - robuxAmount: number; -}; -export type SubmitDeveloperExchange = unknown; -export type GetLuobuDeveloperExchangeBalance = { +export type BillingSubmitDeveloperExchange = unknown; +export type BillingGetLuobuDeveloperExchangeBalance = { amount: number; }; -export type GetLuobuDeveloperExchangeEligibility = { +export type BillingGetLuobuDeveloperExchangeEligibility = { eligibility?: "Eligible" | string; errors?: { code: number; @@ -24,24 +18,13 @@ export type GetLuobuDeveloperExchangeEligibility = { userFacingMessage: string; }; }; -export type GetLatestLuobuDeveloperExchangeStatus = { +export type BillingGetLatestLuobuDeveloperExchangeStatus = { date?: string; status?: string; amount?: number; }; -export type SubmitLuobuDeveloperExchangeOptions = { - firstName: string; - lastName: string; - email: string; - amount: number; -}; -export type SubmitLuobuDeveloperExchange = unknown; -export type GetUserPaymentsOptions = { - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -}; -export type GetUserPayments = { +export type BillingSubmitLuobuDeveloperExchange = unknown; +export type BillingGetUserPaymentsHistory = { previousPageCursor: string; nextPageCursor: string; data: { @@ -64,88 +47,111 @@ export type GetUserPayments = { cardNumber: string; }; }; -export type PurchaseAmazonProductOptions = { +export type BillingPurchaseAmazonProduct = unknown; +export type BillingValidateAmazonProduct = unknown; +export type BillingPurchaseAppleProduct = BillingPurchaseAmazonProduct; +export type BillingValidateAppleProduct = BillingValidateAmazonProduct; +export type BillingRedeemDigitalCode = unknown; +export type BillingRedeemGameCard = { + balance: string; + successMsg: string; + successSubText: string; + bonusMsg: string; + error: string; + errorMsg: string; +}; +export type BillingReverseGameCard = unknown; +export type BillingPurchaseGoogleProduct = unknown; +export type BillingValidateGoogleProduct = BillingValidateAmazonProduct; +export type BillingSendXsollaWebhook = unknown; +export type BillingGetXsollaIFrameToken = { + token: string; + success: boolean; + message: string; +}; +export type BillingIncrementCounterByAgent = unknown; +export type BillingRedeemPromoCode = { + success: boolean; + errorMsg: string; + successMsg: string; +}; +export type BillingSubmitDeveloperExchangeOptions = { + firstName: string; + lastName: string; + emailAddress: string; + password: string; + robuxAmount: number; +}; +export type BillingSubmitLuobuDeveloperExchangeOptions = { + firstName: string; + lastName: string; + email: string; + amount: number; +}; +export type BillingGetUserPaymentsHistoryOptions = SortOption; +export type BillingPurchaseAmazonProductOptions = { receiptId: string; amazonUserId: string; isRetry: boolean; }; -export type PurchaseAmazonProduct = unknown; -export type ValidateAmazonProductOptions = { +export type BillingValidateAmazonProductOptions = { + productId: string; + currency: string; +}; +export type BillingPurchaseAppleProductOptions = { + receiptId: string; + appleUserId: string; + isRetry: boolean; +}; +export type BillingValidateAppleProductOptions = { productId: string; currency: string; }; -export type ValidateAmazonProduct = unknown; -export type PurchaseAppleProductOptions = PurchaseAmazonProductOptions; -export type PurchaseAppleProduct = PurchaseAmazonProduct; -export type ValidateAppleProductOptions = ValidateAmazonProductOptions; -export type ValidateAppleProduct = ValidateAmazonProduct; -export type RedeemDigitalCodeOptions = { +export type BillingRedeemDigitalCodeOptions = { redemptionCode: string; }; -export type RedeemDigitalCode = unknown; -export type RedeemGameCardOptions = { +export type BillingRedeemGameCardOptions = { pinCode: string; captchaToken: string; - captchaProvider: "PROVIDER_ARKOSELABS" | string; + captchaProvider: string; }; -export type RedeemGameCard = { - balance: string; - successMsg: string; - successSubText: string; - bonusMsg: string; - error: string; - errorMsg: string; -}; -export type ReverseGameCardOptions = { - PinCode: string; +export type BillingReverseGameCardOptions = { + PinCode: number; UserId: number; }; -export type ReverseGameCard = unknown; -export type PurchaseGoogleProductOptions = { +export type BillingPurchaseGoogleProductOptions = { packageName: string; productId: string; token: string; isRetry: boolean; orderId: string; }; -export type PurchaseGoogleProduct = unknown; -export type ValidateGoogleProductOptions = ValidateAmazonProductOptions; -export type ValidateGoogleProduct = ValidateAmazonProduct; -export type SendXsollaWebhookOptions = unknown; -export type SendXsollaWebhook = unknown; -export type GetXsollaIFrameTokenOptions = { +export type BillingValidateGoogleProductOptions = { + productId: string; + currency: string; +}; +export type BillingGetXsollaIFrameTokenOptions = { mainProductId: number; upsellProductId: number; paymentProviderType: string; verifiedEmailOrPhone: boolean; }; -export type GetXsollaIFrameToken = { - token: string; - success: boolean; - message: string; -}; -export type IncrementCounterByAgentOptions = { +export type BillingIncrementCounterByAgentOptions = { counterPrefix: string; }; -export type IncrementCounterByAgent = unknown; -export type RedeemPromoCodeOptions = { +export type BillingRedeemPromoCodeOptions = { code: string; }; -export type RedeemPromoCode = { - success: boolean; - errorMsg: string; - successMsg: string; -}; export default class BillingAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://billing.roblox.com/" }); } - getDeveloperExchangeRate (): Promise { + getDeveloperExchangeRate(): Promise { return this.request({ requiresAuth: false, request: { @@ -155,9 +161,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - submitDeveloperExchange ( - options: SubmitDeveloperExchangeOptions - ): Promise { + submitDeveloperExchange( + options: BillingSubmitDeveloperExchangeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -169,7 +175,7 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - getLuobuDeveloperExchangeBalance (): Promise { + getLuobuDeveloperExchangeBalance(): Promise { return this.request({ requiresAuth: true, request: { @@ -179,7 +185,7 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - getLuobuDeveloperExchangeEligibility (): Promise { + getLuobuDeveloperExchangeEligibility(): Promise { return this.request({ requiresAuth: true, request: { @@ -189,7 +195,7 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - getLuobuDeveloperExchangeLatestRequestStatus (): Promise { + getLuobuDeveloperExchangeLatestRequestStatus(): Promise { return this.request({ requiresAuth: true, request: { @@ -199,9 +205,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - submitLuobuDeveloperExchange ( - options: SubmitLuobuDeveloperExchangeOptions - ): Promise { + submitLuobuDeveloperExchange( + options: BillingSubmitLuobuDeveloperExchangeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -213,9 +219,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - getUserPaymentsHistory ( - options: GetUserPaymentsOptions - ): Promise { + getUserPaymentsHistory( + options: BillingGetUserPaymentsHistoryOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -226,9 +232,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - purchaseAmazonProduct ( - options: PurchaseAmazonProductOptions - ): Promise { + purchaseAmazonProduct( + options: BillingPurchaseAmazonProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -240,9 +246,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - validateAmazonProduct ( - options: ValidateAmazonProductOptions - ): Promise { + validateAmazonProduct( + options: BillingValidateAmazonProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -254,9 +260,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - purchaseAppleProduct ( - options: PurchaseAppleProductOptions - ): Promise { + purchaseAppleProduct( + options: BillingPurchaseAppleProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -268,9 +274,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - validateAppleProduct ( - options: ValidateAppleProductOptions - ): Promise { + validateAppleProduct( + options: BillingValidateAppleProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -282,9 +288,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - redeemDigitalCode ( - options: RedeemDigitalCodeOptions - ): Promise { + redeemDigitalCode( + options: BillingRedeemDigitalCodeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -296,7 +302,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - redeemGameCard (options: RedeemGameCardOptions): Promise { + redeemGameCard( + options: BillingRedeemGameCardOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -308,7 +316,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - reverseGameCard (options: ReverseGameCardOptions): Promise { + reverseGameCard( + options: BillingReverseGameCardOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -320,9 +330,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - purchaseGoogleProduct ( - options: PurchaseGoogleProductOptions - ): Promise { + purchaseGoogleProduct( + options: BillingPurchaseGoogleProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -334,9 +344,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - validateGoogleProduct ( - options: ValidateGoogleProductOptions - ): Promise { + validateGoogleProduct( + options: BillingValidateGoogleProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -348,9 +358,7 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - sendXsollaWebhook ( - options: SendXsollaWebhookOptions - ): Promise { + sendXsollaWebhook(options: unknown): Promise { return this.request({ requiresAuth: false, request: { @@ -362,9 +370,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - getXsollaIFrameToken ( - options: GetXsollaIFrameTokenOptions - ): Promise { + getXsollaIFrameToken( + options: BillingGetXsollaIFrameTokenOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -376,9 +384,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - incrementCounterByAgent ( - options: IncrementCounterByAgentOptions - ): Promise { + incrementCounterByAgent( + options: BillingIncrementCounterByAgentOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -390,7 +398,9 @@ export default class BillingAPI extends BaseAPI { }).then((response) => response.body); } - redeemPromoCode (options: RedeemPromoCodeOptions): Promise { + redeemPromoCode( + options: BillingRedeemPromoCodeOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/CatalogAPI.ts b/src/client/apis/CatalogAPI.ts index 9c0634c2f..a703bc322 100644 --- a/src/client/apis/CatalogAPI.ts +++ b/src/client/apis/CatalogAPI.ts @@ -1,7 +1,8 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; +import { AssetIdOption, SortOption, UserIdOption } from "../.."; -export type ProductDetails = { +export type CatalogProductDetails = { id: number; type: string; isPublicDomain: boolean; @@ -12,13 +13,7 @@ export type ProductDetails = { premiumPriceInRobux: number; }; }; -export type GetAssetBundlesOptions = { - assetId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -}; -export type GetAssetBundles = { +export type CatalogGetAssetBundles = { previousPageCursor: string; nextPageCursor: string; data: { @@ -38,95 +33,70 @@ export type GetAssetBundles = { type: string; }; creatorType: number; - product: ProductDetails; + product: CatalogProductDetails; }[]; }; -export type GetBundleDetailsOptions = { - bundleId: number; -}; -export type GetBundleDetails = GetAssetBundles["data"][0]; -export type GetBundleRecommendationsByBundleIdOptions = { - bundleId: number; - numItems?: number; -}; -export type GetBundleRecommendationsByBundleId = { - data: GetAssetBundles["data"]; -}; -export type GetMultiBundleDetailsOptions = { - bundleIds: number[]; -}; -export type GetMultiBundleDetails = GetAssetBundles["data"]; -export type GetUserBundlesOptions = { - userId: number; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -}; -export type GetUserBundles = GetAssetBundles; -export type GetUserBundlesByTypeOptions = GetUserBundlesOptions & { - bundleType: "BodyParts" | "AvatarAnimations" | string; -}; -export type GetUserBundlesByType = GetUserBundles; -export type UnpackBundleOptions = { - bundleId: number; -}; -export type UnpackBundle = unknown; -export type GetAssetToCategory = Record; -export type GetAssetToSubCategory = GetAssetToCategory; -export type GetCategories = GetAssetToCategory; -export type GetSubCategories = GetAssetToCategory; -export type GetAppStoreExclusiveBundlesOptions = { - appStoreType: "iOS" | "GooglePlay" | "Xbox" | "Amazon"; +export type CatalogGetBundleDetails = CatalogGetAssetBundles["data"][0]; +export type CatalogGetBundleRecommendationsByBundleId = { + data: CatalogGetAssetBundles["data"]; }; -export type GetAppStoreExclusiveBundles = { - data: ProductDetails[]; +export type CatalogGetMultiBundleDetails = CatalogGetAssetBundles["data"]; +export type CatalogUnpackBundle = unknown; +export type CatalogGetAssetToCategory = Record; +export type CatalogGetAppStoreExclusiveBundles = { + data: CatalogProductDetails[]; }; -export type GetAssetFavoriteCountOptions = { +export type CatalogGetAssetFavoriteCountOptions = { assetId: number; }; -export type GetAssetFavoriteCount = number; -export type GetBundleFavoriteCountOptions = { - bundleId: number; -}; -export type GetBundleFavoriteCount = number; -export type RemoveSelfAssetFavoriteOptions = { - userId: number; +export type CatalogGetFavoriteCount = number; +export type CatalogRemoveSelfAssetFavorite = unknown; +export type CatalogGetUserFavoriteAsset = { assetId: number; -}; -export type RemoveSelfAssetFavorite = unknown; -export type GetUserFavoriteAssetOptions = { userId: number; - assetId: number; + created: string; }; -export type GetUserFavoriteAsset = { - assetId: number; +export type CatalogFavoriteAsset = unknown; +export type CatalogRemoveFavoriteBundle = unknown; +export type CatalogGetSelfFavoriteBundle = { + bundleId: number; userId: number; created: string; }; -export type FavoriteAssetOptions = { - userId: number; - assetId: number; +export type CatalogFavoriteBundle = unknown; +export type CatalogGetAssetBundlesOptions = SortOption & AssetIdOption; +export type CatalogGetBundleDetailsOptions = { bundleId: number }; +export type CatalogGetBundleRecommendationsByBundleIdOptions = { + bundleId: number; + numItems?: number; }; -export type FavoriteAsset = unknown; -export type RemoveFavoriteBundleOptions = { - userId: number; +export type CatalogGetMultiBundleDetailsOptions = { + bundleIds: number[]; +}; +export type CatalogGetUserBundlesOptions = SortOption & UserIdOption; +export type CatalogGetUserBundlesByTypeOptions = + CatalogGetUserBundlesOptions & { + bundleType: string; + }; +export type CatalogUnpackBundleOptions = { bundleId: number; }; -export type RemoveFavoriteBundle = unknown; -export type GetSelfFavoriteBundleOptions = { - userId: number; +export type CatalogGetAppStoreExclusiveBundlesOptions = { + appStoreType: "iOS" | "GooglePlay" | "Xbox" | "Amazon"; +}; +export type CatalogGetBundleFavoriteCount = CatalogUnpackBundleOptions; +export type CatalogRemoveAssetFavoriteOptions = AssetIdOption & UserIdOption; +export type CatalogGetUserFavoriteAssetOptions = AssetIdOption & UserIdOption; +export type CatalogFavoriteAssetOptions = AssetIdOption & UserIdOption; +export type CatalogRemoveBundleFavoriteOptions = UserIdOption & { bundleId: number; }; -export type GetSelfFavoriteBundle = { +export type CatalogGetUserFavoriteBundleOptions = UserIdOption & { bundleId: number; - userId: number; - created: string; }; -export type FavoriteBundleOptions = { - userId: number; +export type CatalogFavoriteBundleOptions = UserIdOption & { bundleId: number; }; -export type FavoriteBundle = unknown; export default class CatalogAPI extends BaseAPI { constructor(client: Client) { @@ -136,7 +106,9 @@ export default class CatalogAPI extends BaseAPI { }); } - getAssetBundles(options: GetAssetBundlesOptions): Promise { + getAssetBundles( + options: CatalogGetAssetBundlesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -148,8 +120,8 @@ export default class CatalogAPI extends BaseAPI { } getBundleDetails( - options: GetBundleDetailsOptions - ): Promise { + options: CatalogGetBundleDetailsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -161,8 +133,8 @@ export default class CatalogAPI extends BaseAPI { } getBundleRecommendationsByBundleId( - options: GetBundleRecommendationsByBundleIdOptions - ): Promise { + options: CatalogGetBundleRecommendationsByBundleIdOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -174,8 +146,8 @@ export default class CatalogAPI extends BaseAPI { } getMultiBundleDetails( - options: GetMultiBundleDetailsOptions - ): Promise { + options: CatalogGetMultiBundleDetailsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -188,7 +160,9 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getUserBundles(options: GetUserBundlesOptions): Promise { + getUserBundles( + options: CatalogGetUserBundlesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -200,8 +174,8 @@ export default class CatalogAPI extends BaseAPI { } getUserBundlesByType( - options: GetUserBundlesByTypeOptions - ): Promise { + options: CatalogGetUserBundlesByTypeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -211,7 +185,9 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - unpackBundle(options: UnpackBundleOptions): Promise { + unpackBundle( + options: CatalogUnpackBundleOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -222,7 +198,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getAssetToCategory(): Promise { + getAssetToCategory(): Promise { return this.request({ requiresAuth: false, request: { @@ -232,7 +208,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getAssetToSubCategory(): Promise { + getAssetToSubCategory(): Promise { return this.request({ requiresAuth: false, request: { @@ -242,7 +218,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getCategories(): Promise { + getCategories(): Promise { return this.request({ requiresAuth: false, request: { @@ -252,7 +228,7 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - getSubCategories(): Promise { + getSubCategories(): Promise { return this.request({ requiresAuth: false, request: { @@ -263,8 +239,8 @@ export default class CatalogAPI extends BaseAPI { } getAppStoreExclusiveBundles( - options: GetAppStoreExclusiveBundlesOptions - ): Promise { + options: CatalogGetAppStoreExclusiveBundlesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -275,8 +251,8 @@ export default class CatalogAPI extends BaseAPI { } getAssetFavoriteCount( - options: GetAssetFavoriteCountOptions - ): Promise { + options: AssetIdOption + ): Promise { return this.request({ requiresAuth: false, request: { @@ -287,8 +263,8 @@ export default class CatalogAPI extends BaseAPI { } getBundleFavoriteCount( - options: GetBundleFavoriteCountOptions - ): Promise { + options: CatalogGetBundleFavoriteCount + ): Promise { return this.request({ requiresAuth: false, request: { @@ -299,8 +275,8 @@ export default class CatalogAPI extends BaseAPI { } removeAssetFavorite( - options: RemoveSelfAssetFavoriteOptions - ): Promise { + options: CatalogRemoveAssetFavoriteOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -312,8 +288,8 @@ export default class CatalogAPI extends BaseAPI { } getUserFavoriteAsset( - options: GetUserFavoriteAssetOptions - ): Promise { + options: CatalogGetUserFavoriteAssetOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -323,7 +299,9 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - favoriteAsset(options: FavoriteAssetOptions): Promise { + favoriteAsset( + options: CatalogFavoriteAssetOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -335,8 +313,8 @@ export default class CatalogAPI extends BaseAPI { } removeBundleFavorite( - options: RemoveFavoriteBundleOptions - ): Promise { + options: CatalogRemoveBundleFavoriteOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -348,8 +326,8 @@ export default class CatalogAPI extends BaseAPI { } getUserFavoriteBundle( - options: GetSelfFavoriteBundleOptions - ): Promise { + options: CatalogGetUserFavoriteBundleOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -359,7 +337,9 @@ export default class CatalogAPI extends BaseAPI { }).then((response) => response.body); } - favoriteBundle(options: FavoriteBundleOptions): Promise { + favoriteBundle( + options: CatalogFavoriteBundleOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/ChatAPI.ts b/src/client/apis/ChatAPI.ts index 3971922cf..1f756a436 100644 --- a/src/client/apis/ChatAPI.ts +++ b/src/client/apis/ChatAPI.ts @@ -1,51 +1,84 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { - ChatConversationOptions, - ChatMessageOptions, - ChatMessageSentOptions, - PartialChatConversationOptions -} from "../../structures/Chat"; -export type GetChatSettings = { - chatEnabled: boolean; -}; -export type GetConversationsOptions = { - conversationIds: number[]; +export type ChatPartialConversationData = { + id: number; + title?: string; +}; +export type ChatMessageSentData = { + content: string; + filteredForReceivers: boolean; + messageId: string; + sent: string; + messageType: "PlainText" | string; + resultType: "Success" | string; + statusMessage: string; }; -export type GetConversations = ChatConversationOptions[]; -export type GetConversationMessagesOptions = { - conversationId: number; - pageSize: number; - exclusiveStartMessageId?: string; +export type ChatMessageData = { + id: string; + senderType: string; + sent: string; + read: boolean; + messageType: "PlainText" | string; + decorators: string[]; + senderTargetId: number; + content: string; + link?: { + type: "Game"; + game: { + universeId: number; + }; + }; + eventBased?: { + type: "SetConversationUniverse"; + setConversationUniverse: { + actorUserId: number; + universeId: number; + }; + }; }; -export type GetConversationMessages = ChatMessageOptions[]; -export type GetRolloutSettingsOptions = { - featureNames: string[]; +export type ChatGetChatSettings = { + chatEnabled: boolean; }; -export type GetRolloutSettings = { +export type ChatGetConversationMessages = ChatMessageData[]; +export type ChatGetRolloutSettings = { rolloutFeatures: { featureName: string; isRolloutEnabled: boolean; }[]; }; -export type GetUnreadConversationCount = { +export type ChatGetUnreadConversationCount = { count: number; }; -export type GetUnreadMessagesInConversationsOptions = { - conversationIds: number[]; - pageSize?: number; -}; -export type GetUnreadMessagesInConversations = { +export type ChatGetUnreadMessagesInConversations = { conversationId: number; - chatMessages: ChatMessageOptions[]; + chatMessages: ChatMessageData[]; }[]; -export type GetUserConversationsOptions = { - pageNumber: number; - pageSize: number; +export type ChatConversationData = { + id: number; + title: string; + initiator: { + type: "User" | string; + targetId: number; + name: string | null; + displayName: string | null; + }; + hasUnreadMessages: boolean; + participants: { + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + conversationType: "OneToOneConversation" | string; + conversationTitle: { + titleForViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: string; + conversationUniverse: number | null; }; -export type GetUserConversations = ChatConversationOptions[]; -export type GetMetaData = { +export type ChatGetMetaData = { isChatEnabledByPrivacySetting: string; languageForPrivacySettingUnavailable: string; maxConversationTitleLength: number; @@ -69,17 +102,9 @@ export type GetMetaData = { isPlayTogetherForGameCardsEnabled: boolean; isRoactChatEnabled: boolean; }; -export type GetMultiLatestConversationMessagesOptions = { - conversationIds: number[]; - pageSize: number; -}; -export type GetMultiLatestConversationMessages = - GetUnreadMessagesInConversations; -export type AddUsersToConversationOptions = { - participantUserIds: number[]; - conversationId: number; -}; -export type AddUsersToConversation = { +export type ChatGetMultiLatestConversationMessages = + ChatGetUnreadMessagesInConversations; +export type ChatAddUsersToConversation = { conversationId: number; rejectedParticipants: { rejectedReason: string; @@ -91,33 +116,25 @@ export type AddUsersToConversation = { resultType: "Success" | string; statusMessage: string; }; -export type MarkMessageInConversationAsReadOptions = { +export type ChatMarkMessageInConversationAsReadOptions = { conversationId: number; endMessageId: string; }; -export type MarkMessageInConversationAsRead = { +export type ChatMarkConversationMessagesRead = { resultType: "Success" | string; }; -export type MarkConversationsAsSeenOptions = { +export type ChatMarkConversationsAsSeenOptions = { conversationsToMarkSeen: number[]; }; -export type MarkConversationsAsSeen = { +export type ChatMarkConversationsSeen = { resultType: "Success" | string; }; -export type RemoveUserFromConversationOptions = { - participantUserId: number; - conversationId: number; -}; -export type RemoveUserFromConversation = { - conversation: PartialChatConversationOptions; +export type ChatRemoveUserFromConversation = { + conversation: ChatPartialConversationData; resultType: "Success" | string; statusMessage: string; }; -export type RenameGroupConversationOptions = { - conversationId: number; - newTitle: string; -}; -export type RenameGroupConversation = { +export type ChatRenameGroupConversation = { conversationTitle: string; statusMessage: string; resultType: "Success" | string; @@ -126,36 +143,16 @@ export type RenameGroupConversation = { isDefaultTitle: boolean; }; }; -export type ResetConversationUniverseOptions = { - conversationId: number; -}; -export type ResetConversationUniverse = { +export type ChatResetConversationUniverse = { statusMessage: string; }; -export type SendGameLinkMessageOptions = { - universeId: number; - conversationId: number; - decorators: string[]; -}; -export type SendGameLinkMessage = ChatMessageSentOptions; -export type SendMessageOptions = { - message: string; - conversationId: number; - decorators: string[]; -}; -export type SendMessage = ChatMessageSentOptions; -export type SetConversationUniverseOptions = { - conversationId: number; - universeId: number; -}; -export type SetConversationUniverse = { +export type ChatSendGameLinkMessage = ChatMessageSentData; +export type ChatSendMessage = ChatMessageSentData; +export type ChatSetConversationUniverse = { statusMessage: string; }; -export type StartCloudEditConversationOptions = { - placeId: number; -}; -export type StartCloudEditConversation = { - conversation: ChatConversationOptions; +export type ChatStartCloudEditConversation = { + conversation: ChatConversationData; rejectedParticipants: { rejectedReason: string; type: "User"; @@ -166,21 +163,83 @@ export type StartCloudEditConversation = { resultType: "Success" | string; statusMessage: string; }; -export type StartGroupConversationOptions = { +export type ChatStartGroupConversation = ChatStartCloudEditConversation; +export type ChatStartOneToOneConversation = ChatStartCloudEditConversation; +export type ChatUpdateUserTypingStatus = { + statusMessage: string; +}; +export type ChatGetConversationsOptions = { + conversationIds: number[]; +}; +export type ChatGetConversationMessagesOptions = { + conversationId: number; + pageSize: number; + exclusiveStartMessageId?: string; +}; +export type ChatGetRolloutSettingsOptions = { + featureNames: string[]; +}; +export type ChatGetUnreadMessagesInConversationsOptions = { + conversationIds: number[]; + pageSize?: number; +}; +export type ChatGetUserConversationsOptions = { + pageNumber: number; + pageSize: number; +}; +export type ChatGetMultiLatestConversationMessagesOptions = { + conversationIds: number[]; + pageSize: number; +}; +export type ChatAddUsersToConversationOptions = { + participantUserIds: number[]; + conversationId: number; +}; +export type ChatMarkConversationMessagesReadOptions = { + conversationId: number; + endMessageId: string; +}; +export type ChatMarkConversationsSeenOptions = { + conversationsToMarkSeen: number[]; +}; +export type ChatRemoveUserFromConversationOptions = { + participantUserId: number; + conversationId: number; +}; +export type ChatRenameGroupConversationOptions = { + conversationId: number; + newTitle: string; +}; +export type ChatResetConversationUniverseOptions = { + conversationId: number; +}; +export type ChatSendMessageOptions = { + message: string; + conversationId: number; + decorators: string[]; +}; +export type ChatSetConversationUniverseOptions = { + conversationId: number; + universeId: number; +}; +export type ChatStartCloudEditConversationOptions = { + placeId: number; +}; +export type ChatStartGroupConversationOptions = { participantUserIds: number[]; title: string; }; -export type StartGroupConversation = StartCloudEditConversation; -export type StartOneToOneConversationOptions = { +export type ChatStartOneToOneConversationOptions = { participantUserId: number; }; -export type StartOneToOneConversation = StartCloudEditConversation; -export type UpdateUserTypingStatusOptions = { +export type ChatUpdateUserTypingStatusOptions = { conversationId: number; isTyping: boolean; }; -export type UpdateUserTypingStatus = { - statusMessage: string; +export type ChatSendGameLinkMessageOptions = { + universeId: number; + conversationId: number; + decorators: string[]; }; export default class ChatAPI extends BaseAPI { @@ -191,7 +250,7 @@ export default class ChatAPI extends BaseAPI { }); } - getChatSettings(): Promise { + getChatSettings(): Promise { return this.request({ requiresAuth: true, request: { @@ -202,8 +261,8 @@ export default class ChatAPI extends BaseAPI { } getConversations( - options: GetConversationsOptions - ): Promise { + options: ChatGetConversationsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -217,8 +276,8 @@ export default class ChatAPI extends BaseAPI { } getConversationMessages( - options: GetConversationMessagesOptions - ): Promise { + options: ChatGetConversationMessagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -230,8 +289,8 @@ export default class ChatAPI extends BaseAPI { } getRolloutSettings( - options: GetRolloutSettingsOptions - ): Promise { + options: ChatGetRolloutSettingsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -244,7 +303,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getUnreadConversationCount(): Promise { + getUnreadConversationCount(): Promise { return this.request({ requiresAuth: true, request: { @@ -255,8 +314,8 @@ export default class ChatAPI extends BaseAPI { } getUnreadMessagesInConversations( - options: GetUnreadMessagesInConversationsOptions - ): Promise { + options: ChatGetUnreadMessagesInConversationsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -271,8 +330,8 @@ export default class ChatAPI extends BaseAPI { } getUserConversations( - options: GetUserConversationsOptions - ): Promise { + options: ChatGetUserConversationsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -283,7 +342,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - getMetaData(): Promise { + getMetaData(): Promise { return this.request({ requiresAuth: true, request: { @@ -294,8 +353,8 @@ export default class ChatAPI extends BaseAPI { } getMultiLatestConversationMessages( - options: GetMultiLatestConversationMessagesOptions - ): Promise { + options: ChatGetMultiLatestConversationMessagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -307,8 +366,8 @@ export default class ChatAPI extends BaseAPI { } addUsersToConversation( - options: AddUsersToConversationOptions - ): Promise { + options: ChatAddUsersToConversationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -321,8 +380,8 @@ export default class ChatAPI extends BaseAPI { } markConversationMessagesRead( - options: MarkMessageInConversationAsReadOptions - ): Promise { + options: ChatMarkConversationMessagesReadOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -335,8 +394,8 @@ export default class ChatAPI extends BaseAPI { } markConversationsSeen( - options: MarkConversationsAsSeenOptions - ): Promise { + options: ChatMarkConversationsSeenOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -349,8 +408,8 @@ export default class ChatAPI extends BaseAPI { } removeUserFromConversation( - options: RemoveUserFromConversationOptions - ): Promise { + options: ChatRemoveUserFromConversationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -363,8 +422,8 @@ export default class ChatAPI extends BaseAPI { } renameGroupConversation( - options: RenameGroupConversationOptions - ): Promise { + options: ChatRenameGroupConversationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -377,8 +436,8 @@ export default class ChatAPI extends BaseAPI { } resetConversationUniverse( - options: ResetConversationUniverseOptions - ): Promise { + options: ChatResetConversationUniverseOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -391,8 +450,8 @@ export default class ChatAPI extends BaseAPI { } sendGameLinkMessage( - options: SendGameLinkMessageOptions - ): Promise { + options: ChatSendGameLinkMessageOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -404,7 +463,7 @@ export default class ChatAPI extends BaseAPI { }).then((response) => response.body); } - sendMessage(options: SendMessageOptions): Promise { + sendMessage(options: ChatSendMessageOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -417,8 +476,8 @@ export default class ChatAPI extends BaseAPI { } setConversationUniverse( - options: SetConversationUniverseOptions - ): Promise { + options: ChatSetConversationUniverseOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -431,8 +490,8 @@ export default class ChatAPI extends BaseAPI { } startCloudEditConversation( - options: StartCloudEditConversationOptions - ): Promise { + options: ChatStartCloudEditConversationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -445,8 +504,8 @@ export default class ChatAPI extends BaseAPI { } startGroupConversation( - options: StartGroupConversationOptions - ): Promise { + options: ChatStartGroupConversationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -459,8 +518,8 @@ export default class ChatAPI extends BaseAPI { } startOneToOneConversation( - options: StartOneToOneConversationOptions - ): Promise { + options: ChatStartOneToOneConversationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -473,8 +532,8 @@ export default class ChatAPI extends BaseAPI { } updateUserTypingStatus( - options: UpdateUserTypingStatusOptions - ): Promise { + options: ChatUpdateUserTypingStatusOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/ContactsAPI.ts b/src/client/apis/ContactsAPI.ts index 9a8c06e35..711aa060a 100644 --- a/src/client/apis/ContactsAPI.ts +++ b/src/client/apis/ContactsAPI.ts @@ -1,29 +1,29 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetContactsMetaData = { +export type ContactsGetContactsMetaData = { multiGetContactsMaxSize: number; multiGetContactsCacheTTLinMS: number; }; -export type GetUsersTagsOptions = { +export type ContactsGetUsersTagsOptions = { targetUserIds: number[]; }; -export type GetUsersTags = { +export type ContactsGetUsersTags = { targetUserId: number; targetUserTag: string; }[]; -export type SetPendingUserTagOptions = { +export type ContactsSetPendingUserTagOptions = { targetUserId: number; userTag: string; }; -export type SetPendingUserTag = { +export type ContactsSetPendingUserTag = { status: "Success" | string; }; -export type SetUserTagOptions = { +export type ContactsSetUserTagOptions = { targetUserId: number; userTag: string; }; -export type SetUserTag = { +export type ContactsSetUserTag = { status: "Success" | string; }; @@ -35,7 +35,7 @@ export default class ContactsAPI extends BaseAPI { }); } - getContactsMetaData(): Promise { + getContactsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -45,7 +45,9 @@ export default class ContactsAPI extends BaseAPI { }).then((response) => response.body); } - getUsersTags(options: GetUsersTagsOptions): Promise { + getUsersTags( + options: ContactsGetUsersTagsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -58,8 +60,8 @@ export default class ContactsAPI extends BaseAPI { } setPendingUserTag( - options: SetPendingUserTagOptions - ): Promise { + options: ContactsSetPendingUserTagOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -71,7 +73,7 @@ export default class ContactsAPI extends BaseAPI { }).then((response) => response.body); } - setUserTag(options: SetUserTagOptions): Promise { + setUserTag(options: ContactsSetUserTagOptions): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/DataAPI.ts b/src/client/apis/DataAPI.ts index 3fcf0cf2f..92303319f 100644 --- a/src/client/apis/DataAPI.ts +++ b/src/client/apis/DataAPI.ts @@ -1,21 +1,21 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type UploadDataOptions = { +export type DataUploadDataOptions = { assetId: number; data: unknown; }; -export type UploadDataResult = unknown; +export type DataUploadDataResult = unknown; export default class DataAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://data.roblox.com/" }); } - uploadData (options: UploadDataOptions): Promise { + uploadData(options: DataUploadDataOptions): Promise { return this.request({ requiresAuth: true, json: true, diff --git a/src/client/apis/DevelopAPI.ts b/src/client/apis/DevelopAPI.ts index 2fec647b0..47809a3c7 100644 --- a/src/client/apis/DevelopAPI.ts +++ b/src/client/apis/DevelopAPI.ts @@ -1,23 +1,45 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { GameUniverseOptions } from "../../structures/Game"; import { PartialGroupOptions } from "../../structures/Group"; -import { ISOString } from "../../types/GeneralTypes"; +import { ISOString } from "../../types/GenericTypes"; +export type DevelopGameUniverseOptions = { + id: number; + rootPlaceId: number; + name: string; + description: string; + creatorType: string; + creator: { + id: number; + name: string; + }; + price: number; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: string; + updated: string; + studioAccessToApisAllowed: boolean; + createVipServersAllowed: boolean; + universeAvatarType: string; + genre: string; +}; export type DevelopAgeDataAvailable = { isAgeDataAvailable: boolean; }; -export type ProductAggregation = { +export type DevelopProductAggregation = { developerProductName: string; revenueAmount: number; }; -export type DevelopProductAggregation = { - allDevicesDeveloperProductRevenue: ProductAggregation[]; +export type DevelopProductAggregations = { + allDevicesDeveloperProductRevenue: DevelopProductAggregation[]; developerProductRevenueByDevice: { - Computer: ProductAggregation[]; - Phone: ProductAggregation[]; - Tablet: ProductAggregation[]; - Console: ProductAggregation[]; + Computer: DevelopProductAggregation[]; + Phone: DevelopProductAggregation[]; + Tablet: DevelopProductAggregation[]; + Console: DevelopProductAggregation[]; }; }; @@ -62,26 +84,26 @@ export type DevelopInvitedTeamCreatePlaces = { nextPageCursor: string; data: DevelopInvitedTeamCreatePlace[]; }; -export type GetUniverseLiveStatsOptions = { +export type DevelopGetUniverseLiveStatsOptions = { universeId: number; }; -export type GetUniverseLiveStats = { +export type DevelopGetUniverseLiveStats = { totalPlayerCount: number; playerCountsByDeviceType: Record; gameCount: number; }; -export type GetUniverseRevenueReportsOptions = { +export type DevelopGetUniverseRevenueReportsOptions = { universeId: number; }; -export type GetUniverseRevenueReport = { +export type DevelopGetUniverseRevenueReport = { month: number; year: number; RevenueReportStatus: "NotGenerated" | "ReadyForDownload"; }; -export type GetUniverseRevenueReports = { - monthlyRevenueReportStatusList: GetUniverseRevenueReport[]; +export type DevelopGetUniverseRevenueReports = { + monthlyRevenueReportStatusList: DevelopGetUniverseRevenueReport[]; }; -export type GetUniverseRevenueReportOptions = { +export type DevelopGetUniverseRevenueReportOptions = { universeId: number; yearDashMonth: `${number}-${number}`; }; @@ -91,10 +113,10 @@ export type DevelopCreatorDashboardMetadata = { playFabDataSourceChartsAvailableByKPITypes: string[]; }; -export type GetAssetsVoteInformationOptions = { +export type DevelopGetAssetsVoteInformationOptions = { assetIds: number[]; }; -export type GetAssetsVoteInformation = { +export type DevelopGetAssetsVoteInformation = { data: { assetId: number; hasUserVoted: number; @@ -105,15 +127,15 @@ export type GetAssetsVoteInformation = { reasonForNotAbleToVote: string; }[]; }; -export type GetGameTemplates = { +export type DevelopGetGameTemplates = { gameTemplateType: string; hasTutorials: boolean; - universe: GameUniverseOptions; + universe: DevelopGameUniverseOptions; }[]; -export type GetGameUpdatesHistoryOptions = { +export type DevelopGetGameUpdatesHistoryOptions = { universeId: number; }; -export type GetGameUpdatesHistory = { +export type DevelopGetGameUpdatesHistory = { universeId: number; createdOn: string; createdOnKey: string; @@ -126,26 +148,26 @@ export type GetGameUpdatesHistory = { plays: number; unfollows: number; }[]; -export type PublishGameNotificationOptions = { +export type DevelopPublishGameNotificationOptions = { universeId: number; gameUpdateText: unknown; }; -export type PublishGameNotification = GetGameUpdatesHistory; -export type FilterPublishGameNotificationOptions = { +export type DevelopPublishGameNotification = DevelopGetGameUpdatesHistory; +export type DevelopFilterPublishGameNotificationOptions = { text: string; }; -export type FilterPublishGameNotification = { +export type DevelopFilterPublishGameNotification = { filteredGameUpdateText: string; isFiltered: boolean; moderationLevel: number; }; -export type GetGroupUniversesOptions = { +export type DevelopGetGroupUniversesOptions = { groupId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetGroupUniverses = { +export type DevelopGetGroupUniverses = { previousPageCursor: string; nextPageCursor: string; data: { @@ -163,28 +185,28 @@ export type GetGroupUniverses = { updated: string; }[]; }; -export type GetPlaceCompatibilitiesOptions = { +export type DevelopGetPlaceCompatibilitiesOptions = { placeId: number; }; -export type GetPlaceCompatibilities = { +export type DevelopGetPlaceCompatibilities = { Compatibilities: { status: "Good" | string; platformName: string; crashRatePercentage: number; }[]; }; -export type UpdatePlaceConfigurationOptions = { +export type DevelopUpdatePlaceConfigurationOptions = { placeId: number; name: string; description: string; }; -export type UpdatePlaceConfiguration = { +export type DevelopUpdatePlaceConfiguration = { id: number; universeId: number; name: string; description: string; }; -export type GetPlaceStatisticsByTypeOptions = { +export type DevelopGetPlaceStatisticsByTypeOptions = { placeId: number; type: "Revenue" | "RevenuePerVisit" | "AverageVisitLength" | "Visits"; granularity?: "Hourly" | "Daily" | "Monthly"; @@ -192,18 +214,18 @@ export type GetPlaceStatisticsByTypeOptions = { startTime?: string; endTime?: string; }; -export type GetPlaceStatisticsByType = { +export type DevelopGetPlaceStatisticsByType = { placeId: number; - dataType: GetPlaceStatisticsByTypeOptions["type"]; - dataGranularity: GetPlaceStatisticsByTypeOptions["granularity"]; + dataType: DevelopGetPlaceStatisticsByTypeOptions["type"]; + dataGranularity: DevelopGetPlaceStatisticsByTypeOptions["granularity"]; startTime: string; endTime: string; data: unknown; }; -export type GetPluginsByIdOptions = { +export type DevelopGetPluginsByIdOptions = { pluginIds: number[]; }; -export type GetPluginsById = { +export type DevelopGetPluginsById = { data: { id: number; name: string; @@ -214,14 +236,14 @@ export type GetPluginsById = { updated: string; }[]; }; -export type UpdatePluginOptions = { +export type DevelopUpdatePluginOptions = { pluginId: number; name: string; description: string; commentsEnabled: boolean; }; -export type UpdatePlugin = unknown; -export type SearchUniversesOptions = { +export type DevelopUpdatePlugin = unknown; +export type DevelopSearchUniversesOptions = { q: { creator: "user" | "group" | "team"; archived?: boolean; @@ -245,7 +267,7 @@ export type SearchUniversesOptions = { limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type SearchUniverseData = { +export type DevelopSearchUniverseData = { id: number; name: string; description: string; @@ -259,12 +281,12 @@ export type SearchUniverseData = { created: string; updated: string; }; -export type SearchUniverses = { +export type DevelopSearchUniverses = { previousPageCursor: string | null; nextPageCursor: string | null; - data: SearchUniverseData[]; + data: DevelopSearchUniverseData[]; }; -export type SearchToolboxOptions = { +export type DevelopSearchToolboxOptions = { category: string; keyword?: string; sort?: string; @@ -274,7 +296,7 @@ export type SearchToolboxOptions = { groupId?: number; cacheMode?: "Normal" | "Bypass" | "ForceUpdate"; }; -export type SearchToolbox = { +export type DevelopSearchToolbox = { TotalResults: number; Results: { Asset: { @@ -317,32 +339,32 @@ export type SearchToolbox = { }; }[]; }; -export type GetUniverseOptions = { +export type DevelopGetUniverseOptions = { universeId: number; }; -export type GetUniverse = GameUniverseOptions; -export type GetUniversePermissionsOptions = { +export type DevelopGetUniverse = DevelopGameUniverseOptions; +export type DevelopGetUniversePermissionsOptions = { universeId: number; }; -export type GetUniversePermissions = { +export type DevelopGetUniversePermissions = { canManage: boolean; canCloudEdit: boolean; }; -export type GetUniversePlacesOptions = { +export type DevelopGetUniversePlacesOptions = { universeId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetUniversePlaces = { +export type DevelopGetUniversePlaces = { previousPageCursor: string; nextPageCursor: string; data: unknown[]; }; -export type GetUniverseStatisticsReportsOptions = { +export type DevelopGetUniverseStatisticsReportsOptions = { universeId: number; }; -export type GetUniverseStatisticsReports = { +export type DevelopGetUniverseStatisticsReports = { reports: { universeId: number; yearDashMonth: string; @@ -350,52 +372,52 @@ export type GetUniverseStatisticsReports = { spreadsheetId: string; }[]; }; -export type GetUniverseStatisticsReportsByTimeOptions = { +export type DevelopGetUniverseStatisticsReportsByTimeOptions = { universeId: number; yearDashMonth: string; }; -export type GetUniverseStatisticsReportByTime = { +export type DevelopGetUniverseStatisticsReportByTime = { universeId: number; yearDashMonth: string; status: "NotGenerated" | string; spreadsheetId: string; }; -export type DownloadUniverseStatisticsReportByTimeOptions = { +export type DevelopDownloadUniverseStatisticsReportByTimeOptions = { universeId: number; yearDashMonth: string; }; -export type DownloadUniverseStatisticsReportByTime = unknown; -export type MultiGetUniversesOptions = { +export type DevelopDownloadUniverseStatisticsReportByTime = unknown; +export type DevelopMultiGetUniversesOptions = { ids: number[]; }; -export type MultiGetUniverses = GameUniverseOptions[]; -export type MultiGetUniversesPermissionsOptions = { +export type DevelopMultiGetUniverses = DevelopGameUniverseOptions[]; +export type DevelopMultiGetUniversesPermissionsOptions = { ids: number[]; }; -export type MultiGetUniversesPermissions = { +export type DevelopMultiGetUniversesPermissions = { data: { universeId: number; canManage: boolean; canCloudEdit: boolean; }[]; }; -export type ActivateUniverseOptions = { +export type DevelopActivateUniverseOptions = { universeId: number; }; -export type ActivateUniverse = unknown; -export type DeactivateUniverseOptions = { +export type DevelopActivateUniverse = unknown; +export type DevelopDeactivateUniverseOptions = { universeId: number; }; -export type DeactivateUniverse = unknown; -export type GenerateUniverseStatisticReportsByTimeOptions = { +export type DevelopDeactivateUniverse = unknown; +export type DevelopGenerateUniverseStatisticReportsByTimeOptions = { universeId: number; yearDashMonth: string; }; -export type GenerateUniverseStatisticReportsByTime = unknown; -export type GetUniverseConfigurationOptions = { +export type DevelopGenerateUniverseStatisticReportsByTime = unknown; +export type DevelopGetUniverseConfigurationOptions = { universeId: number; }; -export type GetUniverseConfiguration = { +export type DevelopGetUniverseConfiguration = { id: number; name: string; universeAvatarType: "MorphToR6" | "MorphToR15"; @@ -411,41 +433,42 @@ export type GetUniverseConfiguration = { isForSale: boolean; price: number; }; -export type UpdateUniverseConfigurationOptions = Omit< - GetUniverseConfiguration, +export type DevelopUpdateUniverseConfigurationOptions = Omit< + DevelopGetUniverseConfiguration, "id" > & { universeId: number }; -export type UpdateUniverseConfiguration = GetUniverseConfiguration; -export type GetUniverseVIPServersConfigurationOptions = { +export type DevelopUpdateUniverseConfiguration = + DevelopGetUniverseConfiguration; +export type DevelopGetUniverseVIPServersConfigurationOptions = { universeId: number; }; -export type GetUniverseVIPServersConfiguration = { +export type DevelopGetUniverseVIPServersConfiguration = { isEnabled: boolean; price: number; activeServersCount: number; activeSubscriptionsCount: number; }; -export type GetUniverseTeamCreateSettingsOptions = { +export type DevelopGetUniverseTeamCreateSettingsOptions = { universeId: number; }; -export type GetUniverseTeamCreateSettings = { +export type DevelopGetUniverseTeamCreateSettings = { isEnabled: boolean; }; -export type UpdateUniverseTeamCreateSettingsOptions = - GetUniverseTeamCreateSettingsOptions; -export type UpdateUniverseTeamCreateSettings = unknown; -export type RemoveUserFromUniverseTeamCreateOptions = { +export type DevelopUpdateUniverseTeamCreateSettingsOptions = + DevelopGetUniverseTeamCreateSettingsOptions; +export type DevelopUpdateUniverseTeamCreateSettings = unknown; +export type DevelopRemoveUserFromUniverseTeamCreateOptions = { universeId: number; userId: number; }; -export type RemoveUserFromUniverseTeamCreate = unknown; -export type GetUsersInUniverseTeamCreateOptions = { +export type DevelopRemoveUserFromUniverseTeamCreate = unknown; +export type DevelopGetUsersInUniverseTeamCreateOptions = { universeId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetUsersInUniverseTeamCreate = { +export type DevelopGetUsersInUniverseTeamCreate = { previousPageCursor: string; nextPageCursor: string; data: { @@ -455,20 +478,20 @@ export type GetUsersInUniverseTeamCreate = { displayName: string; }[]; }; -export type GetSelfTeamCreateUniversesAccessOptions = { +export type DevelopGetSelfTeamCreateUniversesAccessOptions = { sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetSelfTeamCreateUniversesAccess = { +export type DevelopGetSelfTeamCreateUniversesAccess = { previousPageCursor: string; nextPageCursor: string; - data: GameUniverseOptions[]; + data: DevelopGameUniverseOptions[]; }; -export type GetSelfGroupsAccess = { +export type DevelopGetSelfGroupsAccess = { data: PartialGroupOptions[]; }; -export type GetNotificationsStatisticReports = { +export type DevelopGetNotificationsStatisticReports = { data: { UserId: number; UniverseId: number; @@ -477,55 +500,56 @@ export type GetNotificationsStatisticReports = { GameName: string; }[]; }; -export type GetStudioDataOptions = { +export type DevelopGetStudioDataOptions = { clientKey: string; }; -export type GetStudioData = unknown; -export type SetStudioDataOptions = { +export type DevelopGetStudioData = unknown; +export type DevelopSetStudioDataOptions = { clientKey: string; data: unknown; }; -export type SetStudioData = { +export type DevelopSetStudioData = { success: boolean; }; -export type GetSelfUniversesOptions = { +export type DevelopGetSelfUniversesOptions = { sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetSelfUniverses = { +export type DevelopGetSelfUniverses = { previousPageCursor: string; nextPageCursor: string; - data: GameUniverseOptions[]; + data: DevelopGameUniverseOptions[]; }; -export type CreateUniverseAliasOptions = { +export type DevelopCreateUniverseAliasOptions = { name: string; type: "Asset" | string; targetId: number; }; -export type CreateUniverseAlias = unknown; -export type DeleteUniverseAliasOptions = { +export type DevelopCreateUniverseAlias = unknown; +export type DevelopDeleteUniverseAliasOptions = { universeId: number; name: string; }; -export type DeleteUniverseAlias = unknown; -export type UpdateUniverseAliasOptions = CreateUniverseAliasOptions; -export type UpdateUniverseAlias = unknown; -export type CreateDeveloperProductOptions = { +export type DevelopDeleteUniverseAlias = unknown; +export type DevelopUpdateUniverseAliasOptions = + DevelopCreateUniverseAliasOptions; +export type DevelopUpdateUniverseAlias = unknown; +export type DevelopCreateDeveloperProductOptions = { universeId: number; name: string; description: string; priceInRobux: number; iconImageAssetId?: number; }; -export type CreateDeveloperProduct = { +export type DevelopCreateDeveloperProduct = { id: number; name: string; Description: string; shopId: number; iconImageAssetId: number; }; -export type UpdateDeveloperProductOptions = { +export type DevelopUpdateDeveloperProductOptions = { universeId: number; developerProductId: number; Name: string; @@ -533,7 +557,7 @@ export type UpdateDeveloperProductOptions = { IconImageAssetId?: number; PriceInRobux: number; }; -export type UpdateDeveloperProduct = unknown; +export type DevelopUpdateDeveloperProduct = unknown; export default class DevelopAPI extends BaseAPI { constructor(client: Client) { @@ -543,7 +567,7 @@ export default class DevelopAPI extends BaseAPI { }); } - getGameTemplates(): Promise { + getGameTemplates(): Promise { return this.request({ requiresAuth: false, request: { @@ -554,8 +578,8 @@ export default class DevelopAPI extends BaseAPI { } getGameUpdatesHistory( - options: GetGameUpdatesHistoryOptions - ): Promise { + options: DevelopGetGameUpdatesHistoryOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -566,8 +590,8 @@ export default class DevelopAPI extends BaseAPI { } publishGameUpdateNotification( - options: PublishGameNotificationOptions - ): Promise { + options: DevelopPublishGameNotificationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -580,8 +604,8 @@ export default class DevelopAPI extends BaseAPI { } filterGameUpdateNotificationText( - options: FilterPublishGameNotificationOptions - ): Promise { + options: DevelopFilterPublishGameNotificationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -594,8 +618,8 @@ export default class DevelopAPI extends BaseAPI { } getGroupUniverses( - options: GetGroupUniversesOptions - ): Promise { + options: DevelopGetGroupUniversesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -607,8 +631,8 @@ export default class DevelopAPI extends BaseAPI { } getPlaceCompatibilities( - options: GetPlaceCompatibilitiesOptions - ): Promise { + options: DevelopGetPlaceCompatibilitiesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -619,8 +643,8 @@ export default class DevelopAPI extends BaseAPI { } updatePlaceConfiguration( - options: UpdatePlaceConfigurationOptions - ): Promise { + options: DevelopUpdatePlaceConfigurationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -633,8 +657,8 @@ export default class DevelopAPI extends BaseAPI { } getPlaceStatistics( - options: GetPlaceStatisticsByTypeOptions - ): Promise { + options: DevelopGetPlaceStatisticsByTypeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -661,7 +685,7 @@ export default class DevelopAPI extends BaseAPI { getDeveloperProductAggregation(options: { placeId: number; timeFrame: "Hourly" | "Daily" | "Monthly"; - }): Promise { + }): Promise { return this.request({ requiresAuth: false, request: { @@ -715,7 +739,9 @@ export default class DevelopAPI extends BaseAPI { }).then(() => true); } - getMultiPlugins(options: GetPluginsByIdOptions): Promise { + getMultiPlugins( + options: DevelopGetPluginsByIdOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -728,7 +754,9 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - updatePlugin(options: UpdatePluginOptions): Promise { + updatePlugin( + options: DevelopUpdatePluginOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -740,7 +768,9 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - searchUniverses(options: SearchUniversesOptions): Promise { + searchUniverses( + options: DevelopSearchUniversesOptions + ): Promise { const encodedQuery = `${options.q.search || ""} creator:${ options.q.creator.slice(0, 1).toUpperCase() + options.q.creator.slice(1) } ${ @@ -768,7 +798,9 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - searchToolbox(options: SearchToolboxOptions): Promise { + searchToolbox( + options: DevelopSearchToolboxOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -779,7 +811,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getUniverse(options: GetUniverseOptions): Promise { + getUniverse(options: DevelopGetUniverseOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -790,8 +822,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseLiveStats( - options: GetUniverseLiveStatsOptions - ): Promise { + options: DevelopGetUniverseLiveStatsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -802,8 +834,8 @@ export default class DevelopAPI extends BaseAPI { } getSelfUniversePermissions( - options: GetUniversePermissionsOptions - ): Promise { + options: DevelopGetUniversePermissionsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -814,8 +846,8 @@ export default class DevelopAPI extends BaseAPI { } getPlacesInUniverse( - options: GetUniversePlacesOptions - ): Promise { + options: DevelopGetUniversePlacesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -827,8 +859,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseRevenueReports( - options: GetUniverseRevenueReportsOptions - ): Promise { + options: DevelopGetUniverseRevenueReportsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -840,8 +872,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseRevenueReport( - options: GetUniverseRevenueReportOptions - ): Promise { + options: DevelopGetUniverseRevenueReportOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -852,7 +884,7 @@ export default class DevelopAPI extends BaseAPI { } downloadUniverseRevenueReport( - options: GetUniverseRevenueReportOptions + options: DevelopGetUniverseRevenueReportOptions ): Promise { return this.request({ requiresAuth: true, @@ -864,8 +896,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseStatisticReports( - options: GetUniverseStatisticsReportsOptions - ): Promise { + options: DevelopGetUniverseStatisticsReportsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -876,8 +908,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseStatisticReportsByTime( - options: GetUniverseStatisticsReportsByTimeOptions - ): Promise { + options: DevelopGetUniverseStatisticsReportsByTimeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -888,8 +920,8 @@ export default class DevelopAPI extends BaseAPI { } downloadUniverseStatisticReportsByTime( - options: DownloadUniverseStatisticsReportByTimeOptions - ): Promise { + options: DevelopDownloadUniverseStatisticsReportByTimeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -900,8 +932,8 @@ export default class DevelopAPI extends BaseAPI { } getMultiUniverses( - options: MultiGetUniversesOptions - ): Promise { + options: DevelopMultiGetUniversesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -915,8 +947,8 @@ export default class DevelopAPI extends BaseAPI { } getMultiUniversesPermissions( - options: MultiGetUniversesPermissionsOptions - ): Promise { + options: DevelopMultiGetUniversesPermissionsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -930,8 +962,8 @@ export default class DevelopAPI extends BaseAPI { } activateUniverse( - options: ActivateUniverseOptions - ): Promise { + options: DevelopActivateUniverseOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -943,8 +975,8 @@ export default class DevelopAPI extends BaseAPI { } deactivateUniverse( - options: DeactivateUniverseOptions - ): Promise { + options: DevelopDeactivateUniverseOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -956,8 +988,8 @@ export default class DevelopAPI extends BaseAPI { } generateUniverseStatisticReportsByTime( - options: GenerateUniverseStatisticReportsByTimeOptions - ): Promise { + options: DevelopGenerateUniverseStatisticReportsByTimeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -969,8 +1001,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseConfiguration( - options: GetUniverseConfigurationOptions - ): Promise { + options: DevelopGetUniverseConfigurationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -981,8 +1013,8 @@ export default class DevelopAPI extends BaseAPI { } updateUniverseConfiguration( - options: UpdateUniverseConfigurationOptions - ): Promise { + options: DevelopUpdateUniverseConfigurationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -995,8 +1027,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseVIPServersConfiguration( - options: GetUniverseVIPServersConfigurationOptions - ): Promise { + options: DevelopGetUniverseVIPServersConfigurationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1007,8 +1039,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseTeamCreateSettings( - options: GetUniverseTeamCreateSettingsOptions - ): Promise { + options: DevelopGetUniverseTeamCreateSettingsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1019,8 +1051,8 @@ export default class DevelopAPI extends BaseAPI { } removeUserFromUniverseTeamCreate( - options: RemoveUserFromUniverseTeamCreateOptions - ): Promise { + options: DevelopRemoveUserFromUniverseTeamCreateOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1033,8 +1065,8 @@ export default class DevelopAPI extends BaseAPI { } getUniverseTeamCreateMembers( - options: GetUsersInUniverseTeamCreateOptions - ): Promise { + options: DevelopGetUsersInUniverseTeamCreateOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1046,8 +1078,8 @@ export default class DevelopAPI extends BaseAPI { } getSelfUniversesTeamCreateAccess( - options: GetSelfTeamCreateUniversesAccessOptions - ): Promise { + options: DevelopGetSelfTeamCreateUniversesAccessOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1058,7 +1090,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfManageableGroups(): Promise { + getSelfManageableGroups(): Promise { return this.request({ requiresAuth: false, request: { @@ -1068,7 +1100,7 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getSelfNotificationStatisticReports(): Promise { + getSelfNotificationStatisticReports(): Promise { return this.request({ requiresAuth: false, request: { @@ -1078,7 +1110,9 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - getStudioData(options: GetStudioDataOptions): Promise { + getStudioData( + options: DevelopGetStudioDataOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1089,7 +1123,9 @@ export default class DevelopAPI extends BaseAPI { }).then((response) => response.body); } - setStudioData(options: SetStudioDataOptions): Promise { + setStudioData( + options: DevelopSetStudioDataOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1105,8 +1141,8 @@ export default class DevelopAPI extends BaseAPI { } getSelfUniverses( - options: GetSelfUniversesOptions - ): Promise { + options: DevelopGetSelfUniversesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1118,8 +1154,8 @@ export default class DevelopAPI extends BaseAPI { } createUniverseAlias( - options: CreateUniverseAliasOptions - ): Promise { + options: DevelopCreateUniverseAliasOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1130,8 +1166,8 @@ export default class DevelopAPI extends BaseAPI { } deleteUniverseAlias( - options: DeleteUniverseAliasOptions - ): Promise { + options: DevelopDeleteUniverseAliasOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1143,8 +1179,8 @@ export default class DevelopAPI extends BaseAPI { } updateUniverseAlias( - options: UpdateUniverseAliasOptions - ): Promise { + options: DevelopUpdateUniverseAliasOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1157,8 +1193,8 @@ export default class DevelopAPI extends BaseAPI { } createDeveloperProduct( - options: CreateDeveloperProductOptions - ): Promise { + options: DevelopCreateDeveloperProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1171,8 +1207,8 @@ export default class DevelopAPI extends BaseAPI { } updateDeveloperProduct( - options: UpdateDeveloperProductOptions - ): Promise { + options: DevelopUpdateDeveloperProductOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/EconomyAPI.ts b/src/client/apis/EconomyAPI.ts index 9f40bada6..febe78a19 100644 --- a/src/client/apis/EconomyAPI.ts +++ b/src/client/apis/EconomyAPI.ts @@ -1,11 +1,11 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { SubmitDeveloperExchangeOptions as BillingAPISubmitDeveloperExchangeOptions } from "./BillingAPI"; +import { BillingSubmitDeveloperExchangeOptions } from "./BillingAPI"; -export type GetAssetResaleDataOptions = { +export type EconomyGetAssetResaleDataOptions = { assetId: number; }; -export type GetAssetResaleData = { +export type EconomyGetAssetResaleData = { assetStock: number; sales: number; numberRemaining: number; @@ -20,12 +20,12 @@ export type GetAssetResaleData = { date: string; }[]; }; -export type GetAssetResellersOptions = { +export type EconomyGetAssetResellersOptions = { assetId: number; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetAssetResellers = { +export type EconomyGetAssetResellers = { previousPageCursor: string; nextPageCursor: string; data: { @@ -39,24 +39,24 @@ export type GetAssetResellers = { serialNumber: number; }[]; }; -export type GetUserResellableAssetCopiesOptions = { +export type EconomyGetUserResellableAssetCopiesOptions = { userId: number; assetId: number; }; -export type GetUserResellableAssetCopies = { - data: GetAssetResellers["data"]; +export type EconomyGetUserResellableAssetCopies = { + data: EconomyGetAssetResellers["data"]; }; -export type GetResaleTaxRate = { +export type EconomyGetResaleTaxRate = { taxRate: number; minimumFee: number; }; -export type SetAssetCopiesOptions = { +export type EconomySetAssetCopiesOptions = { assetId: number; userAssetId: number; price: number; }; -export type SetAssetCopies = unknown; -export type GetDeveloperExchangeAbility = { +export type EconomySetAssetCopies = unknown; +export type EconomyGetDeveloperExchangeAbility = { canCashOut: boolean; meetsPremiumRequirement: boolean; hasVerifiedEmail: boolean; @@ -65,11 +65,11 @@ export type GetDeveloperExchangeAbility = { hasCashedOutThisMonth: boolean; lastImbursementStatusIsValid: boolean; }; -export type GetDeveloperExchangeHelp = unknown; -export type GetDeveloperExchangeInfoOptions = { +export type EconomyGetDeveloperExchangeHelp = unknown; +export type EconomyGetDeveloperExchangeInfoOptions = { fromDevExPage: boolean; }; -export type GetDeveloperExchangeInfo = { +export type EconomyGetDeveloperExchangeInfo = { hasCurrencyOperationError: boolean; currencyOperationErrorMessage: string; showOnlyExchangeRates: boolean; @@ -85,9 +85,9 @@ export type GetDeveloperExchangeInfo = { lastImbursementSubmissionDate: string; conversionPercent: number; }; -export type SubmitDeveloperExchangeOptions = - BillingAPISubmitDeveloperExchangeOptions; -export type SubmitDeveloperExchange = { +export type EconomySubmitDeveloperExchangeOptions = + BillingSubmitDeveloperExchangeOptions; +export type EconomySubmitDeveloperExchange = { submitted: boolean; cashOutAbility: { canCashOut: boolean; @@ -100,23 +100,23 @@ export type SubmitDeveloperExchange = { }; errors: unknown; }; -export type GetGroupCurrencyOptions = { +export type EconomyGetGroupCurrencyOptions = { groupId: number; }; -export type GetGroupCurrency = { +export type EconomyGetGroupCurrency = { robux: number; }; -export type GetSelfCurrencyOptions = { +export type EconomyGetSelfCurrencyOptions = { userId: number; }; -export type GetSelfCurrency = { +export type EconomyGetSelfCurrency = { robux: number; }; -export type GetGroupRevenueSummaryInTimeFrameOptions = { +export type EconomyGetGroupRevenueSummaryInTimeFrameOptions = { groupId: number; timeFrame: "Day" | "Week" | "Month" | "Year"; }; -export type GetGroupRevenueSummaryInTimeFrame = { +export type EconomyGetGroupRevenueSummaryInTimeFrame = { recurringRobuxStipend: number; itemSaleRobux: number; purchasedRoblox: number; @@ -124,27 +124,27 @@ export type GetGroupRevenueSummaryInTimeFrame = { pendingRobux: number; groupPayoutRobux: number; }; -export type GetSelfRevenueSummaryInTimeFrameOptions = Omit< -GetGroupRevenueSummaryInTimeFrameOptions, -"groupId" +export type EconomyGetSelfRevenueSummaryInTimeFrameOptions = Omit< + EconomyGetGroupRevenueSummaryInTimeFrameOptions, + "groupId" > & { userId: number; }; -export type GetSelfRevenueSummaryInTimeFrame = - GetGroupRevenueSummaryInTimeFrame; -export type GetGroupTransactionsOptions = { +export type EconomyGetSelfRevenueSummaryInTimeFrame = + EconomyGetGroupRevenueSummaryInTimeFrame; +export type EconomyGetGroupTransactionsOptions = { groupId: number; transactionType: - | "Sale" - | "Purchase" - | "AffiliateSale" - | "DevEx" - | "GroupPayout" - | "AdImpressionPayout"; + | "Sale" + | "Purchase" + | "AffiliateSale" + | "DevEx" + | "GroupPayout" + | "AdImpressionPayout"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetGroupTransactions = { +export type EconomyGetGroupTransactions = { previousPageCursor: string; nextPageCursor: string; data: { @@ -162,25 +162,25 @@ export type GetGroupTransactions = { }; }[]; }; -export type GetSelfTransactionsOptions = Omit< -GetGroupTransactionsOptions, -"groupId" +export type EconomyGetSelfTransactionsOptions = Omit< + EconomyGetGroupTransactionsOptions, + "groupId" > & { userId: number; }; -export type GetSelfTransactions = GetGroupTransactions; +export type EconomyGetSelfTransactions = EconomyGetGroupTransactions; export default class EconomyAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://economy.roblox.com/" }); } - getAssetResaleData ( - options: GetAssetResaleDataOptions - ): Promise { + getAssetResaleData( + options: EconomyGetAssetResaleDataOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -190,9 +190,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getAssetResellers ( - options: GetAssetResellersOptions - ): Promise { + getAssetResellers( + options: EconomyGetAssetResellersOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -203,9 +203,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getUserResellableAssetCopies ( - options: GetUserResellableAssetCopiesOptions - ): Promise { + getUserResellableAssetCopies( + options: EconomyGetUserResellableAssetCopiesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -215,7 +215,7 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getResaleTaxRate (): Promise { + getResaleTaxRate(): Promise { return this.request({ requiresAuth: false, request: { @@ -225,9 +225,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - setAssetCopiesForSale ( - options: SetAssetCopiesOptions - ): Promise { + setAssetCopiesForSale( + options: EconomySetAssetCopiesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -241,7 +241,7 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getDeveloperExchangeAbility (): Promise { + getDeveloperExchangeAbility(): Promise { return this.request({ requiresAuth: true, request: { @@ -251,7 +251,7 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getDeveloperExchangeHelp (): Promise { + getDeveloperExchangeHelp(): Promise { return this.request({ requiresAuth: true, request: { @@ -261,9 +261,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getDeveloperExchangeInfo ( - options: GetDeveloperExchangeInfoOptions - ): Promise { + getDeveloperExchangeInfo( + options: EconomyGetDeveloperExchangeInfoOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -274,9 +274,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - submitDeveloperExchange ( - options: SubmitDeveloperExchangeOptions - ): Promise { + submitDeveloperExchange( + options: EconomySubmitDeveloperExchangeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -288,9 +288,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getGroupCurrency ( - options: GetGroupCurrencyOptions - ): Promise { + getGroupCurrency( + options: EconomyGetGroupCurrencyOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -300,7 +300,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getSelfCurrency (options: GetSelfCurrencyOptions): Promise { + getSelfCurrency( + options: EconomyGetSelfCurrencyOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -310,9 +312,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getGroupRevenueByTime ( - options: GetGroupRevenueSummaryInTimeFrameOptions - ): Promise { + getGroupRevenueByTime( + options: EconomyGetGroupRevenueSummaryInTimeFrameOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -322,9 +324,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getSelfRevenueSummaryByTIme ( - options: GetSelfRevenueSummaryInTimeFrameOptions - ): Promise { + getSelfRevenueSummaryByTIme( + options: EconomyGetSelfRevenueSummaryInTimeFrameOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -334,9 +336,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getGroupTransactions ( - options: GetGroupTransactionsOptions - ): Promise { + getGroupTransactions( + options: EconomyGetGroupTransactionsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -347,9 +349,9 @@ export default class EconomyAPI extends BaseAPI { }).then((response) => response.body); } - getSelfTransactions ( - options: GetSelfTransactionsOptions - ): Promise { + getSelfTransactions( + options: EconomyGetSelfTransactionsOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/EconomyCreatorStatsAPI.ts b/src/client/apis/EconomyCreatorStatsAPI.ts index 0e46c1131..8858cb5e2 100644 --- a/src/client/apis/EconomyCreatorStatsAPI.ts +++ b/src/client/apis/EconomyCreatorStatsAPI.ts @@ -1,28 +1,28 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetUniverseStatsOptions = { +export type EconomyCreatorStatsGetUniverseStatsOptions = { universeId: number; type: "PremiumUpsells" | "PremiumVisits"; startTime: string; endTime: string; }; -export type GetUniverseStats = { +export type EconomyCreatorStatsGetUniverseStats = { dataGranularity: "Hourly" | string; data: unknown; }; export default class EconomyCreatorStatsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://economycreatorstats.roblox.com/" }); } - getUniverseStats ( - options: GetUniverseStatsOptions - ): Promise { + getUniverseStats( + options: EconomyCreatorStatsGetUniverseStatsOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/EngagementPayoutsAPI.ts b/src/client/apis/EngagementPayoutsAPI.ts index cd7154257..4543c4b53 100644 --- a/src/client/apis/EngagementPayoutsAPI.ts +++ b/src/client/apis/EngagementPayoutsAPI.ts @@ -1,24 +1,24 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetUniversePayoutHistoryOptions = { +export type EngagementPayoutsGetUniversePayoutHistoryOptions = { universeId: number; startDate: string; endDate: string; }; -export type GetUniversePayoutHistory = unknown; +export type EngagementPayoutsGetUniversePayoutHistory = unknown; export default class EngagementPayoutsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://engagementpayouts.roblox.com/" }); } - getUniversePayoutHistory ( - options: GetUniversePayoutHistoryOptions - ): Promise { + getUniversePayoutHistory( + options: EngagementPayoutsGetUniversePayoutHistoryOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/FollowingsAPI.ts b/src/client/apis/FollowingsAPI.ts index 8cc219fc4..f2132a87a 100644 --- a/src/client/apis/FollowingsAPI.ts +++ b/src/client/apis/FollowingsAPI.ts @@ -1,18 +1,18 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetUserFollowedUniversesOptions = { +export type FollowingsGetUserFollowedUniversesOptions = { userId: number; }; -export type GetUserFollowedUniverses = { +export type FollowingsGetUserFollowedUniverses = { universeId: number; userId: number; }[]; -export type GetUserFollowingUniverseStatusOptions = { +export type FollowingsGetUserFollowingUniverseStatusOptions = { userId: number; universeId: number; }; -export type GetUserFollowingUniverseStatus = { +export type FollowingsGetUserFollowingUniverseStatus = { UniverseId: number; UserId: number; CanFollow: boolean; @@ -20,28 +20,28 @@ export type GetUserFollowingUniverseStatus = { FollowingCountByType: number; FollowingLimitByType: number; }; -export type UnFollowUniverseOptions = { +export type FollowingsUnFollowUniverseOptions = { userId: number; universeId: number; }; -export type UnFollowUniverse = { +export type FollowingsUnFollowUniverse = { universeId: number; userId: number; }; -export type FollowUniverseOptions = UnFollowUniverseOptions; -export type FollowUniverse = UnFollowUniverse; +export type FollowingsFollowUniverseOptions = FollowingsUnFollowUniverseOptions; +export type FollowingsFollowUniverse = FollowingsUnFollowUniverse; export default class FollowingsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://followings.roblox.com/" }); } - getUserFollowedUniverses ( - options: GetUserFollowedUniversesOptions - ): Promise { + getUserFollowedUniverses( + options: FollowingsGetUserFollowedUniversesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -51,9 +51,9 @@ export default class FollowingsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFollowingUniverseStatus ( - options: GetUserFollowingUniverseStatusOptions - ): Promise { + getUserFollowingUniverseStatus( + options: FollowingsGetUserFollowingUniverseStatusOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -63,9 +63,9 @@ export default class FollowingsAPI extends BaseAPI { }).then((response) => response.body); } - unFollowUniverse ( - options: UnFollowUniverseOptions - ): Promise { + unFollowUniverse( + options: FollowingsUnFollowUniverseOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -76,7 +76,9 @@ export default class FollowingsAPI extends BaseAPI { }).then((response) => response.body); } - followUniverse (options: FollowUniverseOptions): Promise { + followUniverse( + options: FollowingsFollowUniverseOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/FriendsAPI.ts b/src/client/apis/FriendsAPI.ts index f1585534e..cff91cf5d 100644 --- a/src/client/apis/FriendsAPI.ts +++ b/src/client/apis/FriendsAPI.ts @@ -1,57 +1,60 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { GetUserFriendsCount, GetUserFriendsCountOptions } from "./GeneralAPI"; +import { + GeneralGetUserFriendsCount, + GeneralGetUserFriendsCountOptions +} from "./GeneralAPI"; import { PartialUser } from "../../structures/User"; import { EnumUserPresence, UserPresence } from "../../interfaces/GeneralInterfaces"; -export type FindFriendByCodeOptions = { +export type FriendsFindFriendByCodeOptions = { code: string; }; -export type FindFriendByCode = { +export type FriendsFindFriendByCode = { userId: number; username: string; friendshipStatus: "NoFriendship" | string; }; -export type CheckSessionHealth = unknown; -export type RedeemNearbyFriendCodeOptions = { +export type FriendsCheckSessionHealth = unknown; +export type FriendsRedeemNearbyFriendCodeOptions = { code: string; }; -export type RedeemNearbyFriendCode = unknown; -export type DeleteSession = unknown; -export type GetOrCreateNearbySession = { +export type FriendsRedeemNearbyFriendCode = unknown; +export type FriendsDeleteSession = unknown; +export type FriendsGetOrCreateNearbySession = { code: string; expires: number; }; -export type RedeemQRCodeOptions = { +export type FriendsRedeemQRCodeOptions = { code: string; }; -export type RedeemQRCode = { +export type FriendsRedeemQRCode = { userId: number; username: string; }; -export type DeleteQRCodeSession = unknown; -export type GetOrCreateQRCodeSession = GetOrCreateNearbySession; -export type GetMetaDataOptions = { +export type FriendsDeleteQRCodeSession = unknown; +export type FriendsGetOrCreateQRCodeSession = FriendsGetOrCreateNearbySession; +export type FriendsGetMetaDataOptions = { targetUserId: number; }; -export type GetMetaData = { +export type FriendsGetMetaData = { isFriendFinderEnabled: boolean; isNearbyUpsellEnabled: boolean; isFriendsUserDataStoreCacheEnabled: boolean; userName: string; }; -export type GetSelfFriendsCount = { +export type FriendsGetSelfFriendsCount = { count: number; }; -export type GetSelfFriendRequestsOptions = { +export type FriendsGetSelfFriendRequestsOptions = { sortOrder?: "Desc" | "Asc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetSelfFriendRequests = { +export type FriendsGetSelfFriendRequests = { previousPageCursor: string; nextPageCursor: string; data: { @@ -62,16 +65,16 @@ export type GetSelfFriendRequests = { username: string; }[]; }; -export type GetSelfFriendRequestsCount = { +export type FriendsGetSelfFriendRequestsCount = { count: number; }; -export type GetUserFollowersOptions = { +export type FriendsGetUserFollowersOptions = { userId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetUserFollowers = { +export type FriendsGetUserFollowers = { previousPageCursor: string; nextPageCursor: string; data: { @@ -84,22 +87,23 @@ export type GetUserFollowers = { name: string; }[]; }; -export type GetUserFollowersCountOptions = { +export type FriendsGetUserFollowersCountOptions = { userId: number; }; -export type GetUserFollowersCount = { +export type FriendsGetUserFollowersCount = { count: number; }; -export type GetUserFollowingOptions = GetUserFollowersOptions; -export type GetUserFollowing = GetUserFollowers; -export type GetUserFollowingCountOptions = GetUserFollowersCountOptions; -export type GetUserFollowingCount = GetUserFollowersCount; -export type GetUserFriendsOptions = { +export type FriendsGetUserFollowingOptions = FriendsGetUserFollowersOptions; +export type FriendsGetUserFollowing = FriendsGetUserFollowers; +export type FriendsGetUserFollowingCountOptions = + FriendsGetUserFollowersCountOptions; +export type FriendsGetUserFollowingCount = FriendsGetUserFollowersCount; +export type FriendsGetUserFriendsOptions = { cursor?: string; limit?: 10 | 25 | 50 | 100; userId: number; }; -export type GetUserFriends = { +export type FriendsGetUserFriends = { data: { isOnline: boolean; isDeleted: boolean; @@ -110,10 +114,10 @@ export type GetUserFriends = { name: string; }[]; }; -export type GetUserOnlineFriendsOptions = { +export type FriendsGetUserOnlineFriendsOptions = { userId: number; }; -export type GetUserOnlineFriends = { +export type FriendsGetUserOnlineFriends = { data: { userId: number; username: string; @@ -128,61 +132,62 @@ export type GetUserOnlineFriends = { }; }[]; }; -export type GetUserFriendsWithStatusesOptions = { +export type FriendsGetUserFriendsWithStatusesOptions = { userId: number; withUserIds: number[]; }; -export type GetUserFriendsWithStatuses = { +export type FriendsGetUserFriendsWithStatuses = { data: { id: number; status: "NotFriends" | string; }[]; }; -export type DeclineAllFriendRequests = unknown; -export type AcceptFriendRequestOptions = { +export type FriendsDeclineAllFriendRequests = unknown; +export type FriendsAcceptFriendRequestOptions = { userId: number; }; -export type AcceptFriendRequest = unknown; -export type DeclineFriendRequestOptions = AcceptFriendRequestOptions; -export type DeclineFriendRequest = unknown; -export type FollowUserOptions = { +export type FriendsAcceptFriendRequest = unknown; +export type FriendsDeclineFriendRequestOptions = + FriendsAcceptFriendRequestOptions; +export type FriendsDeclineFriendRequest = unknown; +export type FriendsFollowUserOptions = { userId: number; }; -export type FollowUser = { +export type FriendsFollowUser = { success: boolean; isCaptchaRequired: boolean; }; -export type SendFriendRequestOptions = { +export type FriendsSendFriendRequestOptions = { userId: number; source?: "Unknown" | string; }; -export type SendFriendRequest = { +export type FriendsSendFriendRequest = { success: boolean; isCaptchaRequired: boolean; }; -export type UnFollowUserOptions = FollowUserOptions; -export type UnFollowUser = FollowUser; -export type UnfriendUserOptions = { +export type FriendsUnFollowUserOptions = FriendsFollowUserOptions; +export type FriendsUnFollowUser = FriendsFollowUser; +export type FriendsUnfriendUserOptions = { userId: number; }; -export type UnfriendUser = unknown; -export type GetSelfRecommendedUsers = { +export type FriendsUnfriendUser = unknown; +export type FriendsGetSelfRecommendedUsers = { user: PartialUser; profileUrl: string; presenceType: EnumUserPresence; }[]; export default class FriendsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://friends.roblox.com/" }); } - findFriendByCode ( - options: FindFriendByCodeOptions - ): Promise { + findFriendByCode( + options: FriendsFindFriendByCodeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -192,7 +197,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - checkSessionHealth (): Promise { + checkSessionHealth(): Promise { return this.request({ requiresAuth: true, request: { @@ -202,9 +207,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - redeemFriendCode ( - options: RedeemNearbyFriendCodeOptions - ): Promise { + redeemFriendCode( + options: FriendsRedeemNearbyFriendCodeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -215,7 +220,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - deleteFriendSession (): Promise { + deleteFriendSession(): Promise { return this.request({ requiresAuth: true, request: { @@ -226,7 +231,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getSession (): Promise { + getSession(): Promise { return this.request({ requiresAuth: true, request: { @@ -237,7 +242,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - redeemFriendQRCode (options: RedeemQRCodeOptions): Promise { + redeemFriendQRCode( + options: FriendsRedeemQRCodeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -248,7 +255,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - deleteFriendQRSession (): Promise { + deleteFriendQRSession(): Promise { return this.request({ requiresAuth: true, request: { @@ -259,7 +266,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getFriendQRSession (): Promise { + getFriendQRSession(): Promise { return this.request({ requiresAuth: true, request: { @@ -270,7 +277,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getMetaData (options: GetMetaDataOptions): Promise { + getMetaData(options: FriendsGetMetaDataOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -281,7 +288,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getSelfFriendsCount (): Promise { + getSelfFriendsCount(): Promise { return this.request({ requiresAuth: true, request: { @@ -291,9 +298,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getSelfFriendRequests ( - options: GetSelfFriendRequestsOptions - ): Promise { + getSelfFriendRequests( + options: FriendsGetSelfFriendRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -304,7 +311,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getSelfFriendRequestsCount (): Promise { + getSelfFriendRequestsCount(): Promise { return this.request({ requiresAuth: true, request: { @@ -314,9 +321,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFollowers ( - options: GetUserFollowersOptions - ): Promise { + getUserFollowers( + options: FriendsGetUserFollowersOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -327,9 +334,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFollowersCount ( - options: GetUserFollowersCountOptions - ): Promise { + getUserFollowersCount( + options: FriendsGetUserFollowersCountOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -339,9 +346,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFollowing ( - options: GetUserFollowingOptions - ): Promise { + getUserFollowing( + options: FriendsGetUserFollowingOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -352,9 +359,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFollowingCount ( - options: GetUserFollowingCountOptions - ): Promise { + getUserFollowingCount( + options: FriendsGetUserFollowingCountOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -364,7 +371,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFriends (options: GetUserFriendsOptions): Promise { + getUserFriends( + options: FriendsGetUserFriendsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -375,9 +384,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFriendsCount ( - options: GetUserFriendsCountOptions - ): Promise { + getUserFriendsCount( + options: GeneralGetUserFriendsCountOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -387,9 +396,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFriendsOnline ( - options: GetUserOnlineFriendsOptions - ): Promise { + getUserFriendsOnline( + options: FriendsGetUserOnlineFriendsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -399,9 +408,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getUserFriendsWithStatuses ( - options: GetUserFriendsWithStatusesOptions - ): Promise { + getUserFriendsWithStatuses( + options: FriendsGetUserFriendsWithStatusesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -414,7 +423,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - declineAllFriendRequests (): Promise { + declineAllFriendRequests(): Promise { return this.request({ requiresAuth: true, request: { @@ -425,9 +434,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - acceptFriendRequest ( - options: AcceptFriendRequestOptions - ): Promise { + acceptFriendRequest( + options: FriendsAcceptFriendRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -438,9 +447,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - declineFriendRequest ( - options: DeclineFriendRequestOptions - ): Promise { + declineFriendRequest( + options: FriendsDeclineFriendRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -451,7 +460,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - followUser (options: FollowUserOptions): Promise { + followUser(options: FriendsFollowUserOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -462,9 +471,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - sendFriendRequest ( - options: SendFriendRequestOptions - ): Promise { + sendFriendRequest( + options: FriendsSendFriendRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -478,7 +487,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - unFollowUser (options: UnFollowUserOptions): Promise { + unFollowUser( + options: FriendsUnFollowUserOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -489,7 +500,9 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - unfriendUser (options: UnfriendUserOptions): Promise { + unfriendUser( + options: FriendsUnfriendUserOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -500,7 +513,7 @@ export default class FriendsAPI extends BaseAPI { }).then((response) => response.body); } - getRecommendedUsers (): Promise { + getRecommendedUsers(): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/GameInternationalizationAPI.ts b/src/client/apis/GameInternationalizationAPI.ts index 239454369..b4e6f86de 100644 --- a/src/client/apis/GameInternationalizationAPI.ts +++ b/src/client/apis/GameInternationalizationAPI.ts @@ -1,31 +1,31 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetGameInfoOptions = { +export type GameInternationalizationGetGameInfoOptions = { gameId: number; }; -export type GetGameInfo = { +export type GameInternationalizationGetGameInfo = { data: { name: string; description: string; languageCode: string; }[]; }; -export type UpdateGameInfoOptions = { +export type GameInternationalizationUpdateGameInfoOptions = { gameId: number; - data: GetGameInfo; + data: GameInternationalizationGetGameInfo; }; -export type UpdateGameInfo = { - successOperations: GetGameInfo["data"]; +export type GameInternationalizationUpdateGameInfo = { + successOperations: GameInternationalizationGetGameInfo["data"]; failedOperations: { languageCode: string; errorCode: number; }[]; }; -export type GetNameDescriptionMetaData = { +export type GameInternationalizationGetNameDescriptionMetaData = { isNameDescriptionMigrationEnabled: boolean; }; -export type GetGameInfoHistoryOptions = { +export type GameInternationalizationGetGameInfoHistoryOptions = { gameId: number; requestType: string; languageCode: string; @@ -33,7 +33,7 @@ export type GetGameInfoHistoryOptions = { count: number; sortOrder: "Asc" | "Desc" | string; }; -export type GetGameInfoHistory = { +export type GameInternationalizationGetGameInfoHistory = { history: { translationText: string; translator: { @@ -44,30 +44,30 @@ export type GetGameInfoHistory = { }[]; lastEvaluatedId: string; }; -export type GetGameSourceLanguageOptions = { +export type GameInternationalizationGetGameSourceLanguageOptions = { gameId: number; }; -export type GetGameSourceLanguage = { +export type GameInternationalizationGetGameSourceLanguage = { name: string; nativeName: string; languageCode: string; }; -export type UpdateGameSourceLanguageOptions = { +export type GameInternationalizationUpdateGameSourceLanguageOptions = { gameId: number; languageCode: string; }; -export type UpdateGameSourceLanguage = unknown; -export type GetGameSupportedLanguagesOptions = { +export type GameInternationalizationUpdateGameSourceLanguage = unknown; +export type GameInternationalizationGetGameSupportedLanguagesOptions = { gameId: number; }; -export type GetGameSupportedLanguages = { +export type GameInternationalizationGetGameSupportedLanguages = { data: { name: string; languageCodeType: string; languageCode: string; }[]; }; -export type ModifyGameSupportedLanguagesOptions = { +export type GameInternationalizationModifyGameSupportedLanguagesOptions = { data: { languageCodeType: string; languageCode: string; @@ -75,18 +75,19 @@ export type ModifyGameSupportedLanguagesOptions = { }[]; gameId: number; }; -export type ModifyGameSupportedLanguages = unknown; -export type GetGameAutomaticTranslationResultsOptions = { - gameId: number; -}; -export type GetGameAutomaticTranslationResults = { +export type GameInternationalizationModifyGameSupportedLanguages = unknown; +export type GameInternationalizationGetGameAutomaticTranslationResultsOptions = + { + gameId: number; + }; +export type GameInternationalizationGetGameAutomaticTranslationResults = { data: { languageCodeType: string; languageCode: string; isAutomaticTranslationEnabled: boolean; }[]; }; -export type GetSupportedLanguagesMetaData = { +export type GameInternationalizationGetSupportedLanguagesMetaData = { isFeatureEnabled: boolean; areAllLanguagesEnabled: boolean; minimumUniverseIdForFeature: number; @@ -94,26 +95,28 @@ export type GetSupportedLanguagesMetaData = { isAutomaticTranslationProgressUIEnabled: boolean; isSupportedLanguagesChildLocalesUIEnabled: boolean; }; -export type ToggleAutomaticGameTranslationOptions = { +export type GameInternationalizationToggleAutomaticGameTranslationOptions = { gameId: number; languageCode: string; enableAutomaticTranslation: boolean; }; -export type ToggleAutomaticGameTranslation = { +export type GameInternationalizationToggleAutomaticGameTranslation = { gameId: number; languageCode: string; isAutomaticTranslationEnabled: boolean; }; export default class GameInternationalizationAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://gameinternationalization.roblox.com/" }); } - getGameInfo (options: GetGameInfoOptions): Promise { + getGameInfo( + options: GameInternationalizationGetGameInfoOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -123,7 +126,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - updateGameInfo (options: UpdateGameInfoOptions): Promise { + updateGameInfo( + options: GameInternationalizationUpdateGameInfoOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -137,7 +142,7 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - getNameDescriptionMetaData (): Promise { + getNameDescriptionMetaData(): Promise { return this.request({ requiresAuth: true, request: { @@ -147,9 +152,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - getGameInfoHistory ( - options: GetGameInfoHistoryOptions - ): Promise { + getGameInfoHistory( + options: GameInternationalizationGetGameInfoHistoryOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -161,9 +166,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - getGameSourceLanguage ( - options: GetGameSourceLanguageOptions - ): Promise { + getGameSourceLanguage( + options: GameInternationalizationGetGameSourceLanguageOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -173,9 +178,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - updateGameSourceLanguage ( - options: UpdateGameSourceLanguageOptions - ): Promise { + updateGameSourceLanguage( + options: GameInternationalizationUpdateGameSourceLanguageOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -189,9 +194,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - getGameSupportedLanguages ( - options: GetGameSupportedLanguagesOptions - ): Promise { + getGameSupportedLanguages( + options: GameInternationalizationGetGameSupportedLanguagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -201,9 +206,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - modifyGameSupportedLanguages ( - options: ModifyGameSupportedLanguagesOptions - ): Promise { + modifyGameSupportedLanguages( + options: GameInternationalizationModifyGameSupportedLanguagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -215,9 +220,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - getGameAutomaticTranslationStatus ( - options: GetGameAutomaticTranslationResultsOptions - ): Promise { + getGameAutomaticTranslationStatus( + options: GameInternationalizationGetGameAutomaticTranslationResultsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -227,7 +232,7 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - getSupportedLanguagesMetaData (): Promise { + getSupportedLanguagesMetaData(): Promise { return this.request({ requiresAuth: true, request: { @@ -237,9 +242,9 @@ export default class GameInternationalizationAPI extends BaseAPI { }).then((response) => response.body); } - toggleGameAutomaticTranslation ( - options: ToggleAutomaticGameTranslationOptions - ): Promise { + toggleGameAutomaticTranslation( + options: GameInternationalizationToggleAutomaticGameTranslationOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/GamesAPI.ts b/src/client/apis/GamesAPI.ts index 1ab22adab..44d393647 100644 --- a/src/client/apis/GamesAPI.ts +++ b/src/client/apis/GamesAPI.ts @@ -7,7 +7,7 @@ import { VIPServerOptions } from "../../structures/Game"; -export type GameServer = { +export type GamesGameServer = { id: string; maxPlayers: number; playing: number; @@ -18,26 +18,26 @@ export type GameServer = { accessCode: string; }; -export type GetGameUniversesOptions = { +export type GamesGetGameUniversesOptions = { universeIds: number[]; }; -export type GetGameUniverses = GameUniverseOptions[]; -export type GetGameServersByTypeOptions = { +export type GamesGetGameUniverses = GameUniverseOptions[]; +export type GamesGetGameServersByTypeOptions = { placeId: number; serverType: "Public" | "Friend" | "VIP"; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetGameServersByType = { +export type GamesGetGameServersByType = { previousPageCursor: string; nextPageCursor: string; - data: GameServer[]; + data: GamesGameServer[]; }; -export type GetGamesProductInfoOptions = { +export type GamesGetGamesProductInfoOptions = { universeIds: number[]; }; -export type GameGamesProductInfo = { +export type GamesGameGamesProductInfo = { data: { universeId: number; isForSale: boolean; @@ -46,7 +46,7 @@ export type GameGamesProductInfo = { productId: number; }[]; }; -export type ListGamesOptions = { +export type GamesListGamesOptions = { sortToken?: string; gameFilter?: string; timeFilter?: string; @@ -64,7 +64,7 @@ export type ListGamesOptions = { pageContextSeeAll?: boolean; sortPosition?: number; }; -export type ListGames = { +export type GamesListGames = { games: { creatorId: number; creatorName: string; @@ -96,44 +96,45 @@ export type ListGames = { algorithmQueryType: string; suggestionAlgorithm: string; }; -export type MultiGetPlacesOptions = { +export type GamesMultiGetPlacesOptions = { placeIds: number[]; }; -export type MultiGetPlaces = PlaceOptions[]; -export type MultiGetGameUniversesPlayabilityOptions = { +export type GamesMultiGetPlaces = PlaceOptions[]; +export type GamesMultiGetGameUniversesPlayabilityOptions = { universeIds: number[]; }; -export type MultiGetGameUniversesPlayability = { +export type GamesMultiGetGameUniversesPlayability = { playabilityStatus: "UnplayableOtherReason" | string; isPlayable: boolean; universeId: number; }[]; -export type GetGameRecommendationsByAlgorithmOptions = { +export type GamesGetGameRecommendationsByAlgorithmOptions = { algorithmName: string; paginationKey?: string; maxRows?: number; }; -export type GetGameRecommendationsByAlgorithm = { - games: ListGames["games"]; +export type GamesGetGameRecommendationsByAlgorithm = { + games: GamesListGames["games"]; nextPaginationKey: string | null; }; -export type GetGameRecommendationsByGameOptions = { +export type GamesGetGameRecommendationsByGameOptions = { universeId: number; paginationKey?: string; maxRows?: number; }; -export type GetGameRecommendationsByGame = GetGameRecommendationsByAlgorithm; -export type GetGameSortsOptions = { +export type GamesGetGameRecommendationsByGame = + GamesGetGameRecommendationsByAlgorithm; +export type GamesGetGameSortsOptions = { gameSortsContext?: - | "GamesDefaultSorts" - | "GamesAllSorts" - | "HomeSorts" - | "ChatSorts" - | "UnifiedHomeSorts" - | "GamesPageAbTestSorts1" - | "GamesPageAbTestSorts2"; -}; -export type GetGameSorts = { + | "GamesDefaultSorts" + | "GamesAllSorts" + | "HomeSorts" + | "ChatSorts" + | "UnifiedHomeSorts" + | "GamesPageAbTestSorts1" + | "GamesPageAbTestSorts2"; +}; +export type GamesGetGameSorts = { sorts: { token: string; name: string; @@ -163,30 +164,30 @@ export type GetGameSorts = { isSeeAllPage: boolean; }; }; -export type IsGameFavoritedOptions = { +export type GamesIsGameFavoritedOptions = { universeId: number; }; -export type IsGameFavorited = { +export type GamesIsGameFavorited = { isFavorited: boolean; }; -export type ToggleGameFavoriteOptions = { +export type GamesToggleGameFavoriteOptions = { universeId: number; favorite: boolean; }; -export type ToggleGameFavorite = unknown; -export type GetGameFavoriteCountOptions = { +export type GamesToggleGameFavorite = unknown; +export type GamesGetGameFavoriteCountOptions = { universeId: number; }; -export type GetGameFavoriteCount = { +export type GamesGetGameFavoriteCount = { favoritesCount: number; }; -export type GetGameGamePassesOptions = { +export type GamesGetGameGamePassesOptions = { universeId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetGameGamePasses = { +export type GamesGetGameGamePasses = { previousPageCursor: string; nextPageCursor: string; data: { @@ -197,53 +198,53 @@ export type GetGameGamePasses = { price: number; }[]; }; -export type GetSelfUniverseVoteStatusOptions = { +export type GamesGetSelfUniverseVoteStatusOptions = { universeId: number; }; -export type GetSelfUniverseVoteStatus = { +export type GamesGetSelfUniverseVoteStatus = { canVote: boolean; userVote: boolean; reasonForNotVoteable: string; }; -export type GetGamesVotesOptions = { +export type GamesGetGamesVotesOptions = { universeIds: number[]; }; -export type GetGamesVotes = { +export type GamesGetGamesVotes = { data: { number: PartialGameUniverse; upVotes: number; downVotes: number; }[]; }; -export type SetSelfGameVoteOptions = { +export type GamesSetSelfGameVoteOptions = { universeId: number; vote: boolean; }; -export type SetSelfGameVote = unknown; -export type CanSelfInviteUserToVIPServerOptions = { +export type GamesSetSelfGameVote = unknown; +export type GamesCanSelfInviteUserToVIPServerOptions = { userId: number; }; -export type CanSelfInviteUserToVIPServer = { +export type GamesCanSelfInviteUserToVIPServer = { canInvite: boolean; }; -export type GetVIPServerOptions = { +export type GamesGetVIPServerOptions = { id: number; }; -export type GetVIPServer = VIPServerOptions; -export type UpdateVIPServerOptions = { +export type GamesGetVIPServer = VIPServerOptions; +export type GamesUpdateVIPServerOptions = { id: number; name: string; newJoinCode: boolean; active: boolean; }; -export type UpdateVIPServer = VIPServerOptions; -export type CreateVIPServerOptions = { +export type GamesUpdateVIPServer = VIPServerOptions; +export type GamesCreateVIPServerOptions = { universeId: number; name: string; expectedPrice: number; }; -export type CreateVIPServer = GameServer; -export type UpdateVIPServerPermissionsOptions = { +export type GamesCreateVIPServer = GamesGameServer; +export type GamesUpdateVIPServerPermissionsOptions = { id: number; clanAllowed: boolean; enemyClanId: number; @@ -251,7 +252,7 @@ export type UpdateVIPServerPermissionsOptions = { usersToAdd: number[]; usersToRemove: number[]; }; -export type UpdateVIPServerPermissions = { +export type GamesUpdateVIPServerPermissions = { clanAllowed: boolean; enemyClanId: number; friendsAllowed: boolean; @@ -261,12 +262,12 @@ export type UpdateVIPServerPermissions = { displayName: string; }[]; }; -export type UpdateVIPServerSubscriptionOptions = { +export type GamesUpdateVIPServerSubscriptionOptions = { id: number; active: boolean; price: number; }; -export type UpdateVIPServerSubscription = { +export type GamesUpdateVIPServerSubscription = { active: boolean; expired: boolean; expirationDate: string; @@ -274,14 +275,16 @@ export type UpdateVIPServerSubscription = { }; export default class GamesAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://games.roblox.com/" }); } - getGames (options: GetGameUniversesOptions): Promise { + getGames( + options: GamesGetGameUniversesOptions + ): Promise { const universeIdsQueryString = `universeIds=${options.universeIds.join( "&universeIds=" )}`; @@ -294,9 +297,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGameServersByType ( - options: GetGameServersByTypeOptions - ): Promise { + getGameServersByType( + options: GamesGetGameServersByTypeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -307,9 +310,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGamesProductInfo ( - options: GetGamesProductInfoOptions - ): Promise { + getGamesProductInfo( + options: GamesGetGamesProductInfoOptions + ): Promise { const universeIdsQueryString = `universeIds=${options.universeIds.join( "&universeIds=" )}`; @@ -322,7 +325,7 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - listGames (options: ListGamesOptions): Promise { + listGames(options: GamesListGamesOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -351,7 +354,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getMultiPlaces (options: MultiGetPlacesOptions): Promise { + getMultiPlaces( + options: GamesMultiGetPlacesOptions + ): Promise { const placeIdsQueryString = `placeIds=${options.placeIds.join( "&placeIds=" )}`; @@ -365,9 +370,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getMultiGamesPlayabilityStatus ( - options: MultiGetGameUniversesPlayabilityOptions - ): Promise { + getMultiGamesPlayabilityStatus( + options: GamesMultiGetGameUniversesPlayabilityOptions + ): Promise { const universeIdsQueryString = `universeIds=${options.universeIds.join( "&universeIds=" )}`; @@ -380,9 +385,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGameRecommendationsByAlgorithm ( - options: GetGameRecommendationsByAlgorithmOptions - ): Promise { + getGameRecommendationsByAlgorithm( + options: GamesGetGameRecommendationsByAlgorithmOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -396,9 +401,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGameRecommendationsByGame ( - options: GetGameRecommendationsByGameOptions - ): Promise { + getGameRecommendationsByGame( + options: GamesGetGameRecommendationsByGameOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -412,7 +417,7 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGameSorts (options: GetGameSortsOptions): Promise { + getGameSorts(options: GamesGetGameSortsOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -425,7 +430,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - isGameFavorited (options: IsGameFavoritedOptions): Promise { + isGameFavorited( + options: GamesIsGameFavoritedOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -435,9 +442,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - toggleGameFavorite ( - options: ToggleGameFavoriteOptions - ): Promise { + toggleGameFavorite( + options: GamesToggleGameFavoriteOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -451,9 +458,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGameFavoriteCount ( - options: GetGameFavoriteCountOptions - ): Promise { + getGameFavoriteCount( + options: GamesGetGameFavoriteCountOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -463,9 +470,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGameGamePasses ( - options: GetGameGamePassesOptions - ): Promise { + getGameGamePasses( + options: GamesGetGameGamePassesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -476,9 +483,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getSelfGameVote ( - options: GetSelfUniverseVoteStatusOptions - ): Promise { + getSelfGameVote( + options: GamesGetSelfUniverseVoteStatusOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -488,7 +495,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getGamesVotes (options: GetGamesVotesOptions): Promise { + getGamesVotes( + options: GamesGetGamesVotesOptions + ): Promise { const universeIdsQueryString = `universeIds=${options.universeIds.join( "&universeIds=" )}`; @@ -501,7 +510,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - setSelfGameVote (options: SetSelfGameVoteOptions): Promise { + setSelfGameVote( + options: GamesSetSelfGameVoteOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -515,9 +526,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - canSelfInviteUserToVIPServer ( - options: CanSelfInviteUserToVIPServerOptions - ): Promise { + canSelfInviteUserToVIPServer( + options: GamesCanSelfInviteUserToVIPServerOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -527,7 +538,7 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - getVIPServer (options: GetVIPServerOptions): Promise { + getVIPServer(options: GamesGetVIPServerOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -538,7 +549,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - updateVIPServer (options: UpdateVIPServerOptions): Promise { + updateVIPServer( + options: GamesUpdateVIPServerOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -550,7 +563,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - createVIPServer (options: CreateVIPServerOptions): Promise { + createVIPServer( + options: GamesCreateVIPServerOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -562,9 +577,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - updateVIPServerPermissions ( - options: UpdateVIPServerPermissionsOptions - ): Promise { + updateVIPServerPermissions( + options: GamesUpdateVIPServerPermissionsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -576,9 +591,9 @@ export default class GamesAPI extends BaseAPI { }).then((response) => response.body); } - updateVIPServerSubscription ( - options: UpdateVIPServerSubscriptionOptions - ): Promise { + updateVIPServerSubscription( + options: GamesUpdateVIPServerSubscriptionOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/GeneralAPI.ts b/src/client/apis/GeneralAPI.ts index d99f75556..c333f89a1 100644 --- a/src/client/apis/GeneralAPI.ts +++ b/src/client/apis/GeneralAPI.ts @@ -2,104 +2,104 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { AssetVersionOptions, ProductOptions } from "../../structures/Asset"; -export declare type GetAssetVersionOptions = number; -export declare type AwardBadgeOptions = { +export declare type GeneralGetAssetVersionOptions = number; +export declare type GeneralAwardBadgeOptions = { userId: number; badgeId: number; placeId: number; }; -export declare type GetUserFriendsOptions = { +export declare type GeneralGetUserFriendsOptions = { userId: number; page: number; }; -export declare type AcceptFriendRequestOptions = { +export declare type GeneralAcceptFriendRequestOptions = { userId: number; }; -export declare type DeclineFriendRequestOptions = { +export declare type GeneralDeclineFriendRequestOptions = { userId: number; }; -export declare type SendFriendRequestOptions = { +export declare type GeneralSendFriendRequestOptions = { userId: number; }; -export declare type GetUserFriendsCountOptions = { +export declare type GeneralGetUserFriendsCountOptions = { userId: number; }; -export declare type UnfriendUserOptions = { +export declare type GeneralUnfriendUserOptions = { userId: number; }; -export declare type IsUserFollowingOptions = { +export declare type GeneralIsUserFollowingOptions = { userId: number; followUserId: number; }; -export declare type FollowUserOptions = { +export declare type GeneralFollowUserOptions = { userId: number; }; -export declare type UnfollowUserOptions = { +export declare type GeneralUnfollowUserOptions = { userId: number; }; -export declare type GetUserGroupsOptions = { +export declare type GeneralGetUserGroupsOptions = { userId: number; }; -export declare type GetGroupOptions = { +export declare type GeneralGetGroupOptions = { groupId: number; }; -export declare type GetGroupAlliesOptions = { +export declare type GeneralGetGroupAlliesOptions = { groupId: number; page: number; }; -export declare type GetGroupEnemiesOptions = { +export declare type GeneralGetGroupEnemiesOptions = { groupId: number; page: number; }; -export declare type GetProductInfoOptions = { +export declare type GeneralGetProductInfoOptions = { assetId: number; }; -export declare type GetGamePassProductInfoOptions = { +export declare type GeneralGetGamePassProductInfoOptions = { gamePassId: number; }; -export declare type UserOwnsAssetOptions = { +export declare type GeneralUserOwnsAssetOptions = { userId: number; assetId: number; }; -export declare type BlockUserOptions = { +export declare type GeneralBlockUserOptions = { userId: number; }; -export declare type UnblockUserOptions = { +export declare type GeneralUnblockUserOptions = { userId: number; }; -export declare type GetUserByUsernameOptions = { +export declare type GeneralGetUserByUsernameOptions = { username: string; }; -export declare type UserCanManageAssetOptions = { +export declare type GeneralUserCanManageAssetOptions = { userId: number; assetId: number; }; -export declare type GetUserByIdOptions = { +export declare type GeneralGetUserByIdOptions = { userId: number; }; -export declare type GetAssetVersions = AssetVersionOptions[]; -export declare type AwardBadge = boolean; -export declare type GetBalance = { +export declare type GeneralGetAssetVersions = AssetVersionOptions[]; +export declare type GeneralAwardBadge = boolean; +export declare type GeneralGetBalance = { robux: number; }; -export declare type GetUserFriends = { +export declare type GeneralGetUserFriends = { Id: number; Username: string; AvatarUri: string; AvatarFinal: boolean; IsOnline: boolean; }[]; -export declare type AcceptFriendRequest = boolean; -export declare type DeclineFriendRequest = boolean; -export declare type SendFriendRequest = boolean; -export declare type GetUserFriendsCount = { +export declare type GeneralAcceptFriendRequest = boolean; +export declare type GeneralDeclineFriendRequest = boolean; +export declare type GeneralSendFriendRequest = boolean; +export declare type GeneralGetUserFriendsCount = { count: number; }; -export declare type UnfriendUser = boolean; -export declare type IsUserFollowing = boolean; -export declare type FollowUser = boolean; -export declare type UnfollowUser = boolean; -export declare type GetUserGroups = { +export declare type GeneralUnfriendUser = boolean; +export declare type GeneralIsUserFollowing = boolean; +export declare type GeneralFollowUser = boolean; +export declare type GeneralUnfollowUser = boolean; +export declare type GeneralGetUserGroups = { id: number; name: string; emblemId: number | null; @@ -111,7 +111,7 @@ export declare type GetUserGroups = { inClan: boolean; primary: boolean; }[]; -export declare type GetGroup = { +export declare type GeneralGetGroup = { Name: string; Id: number; Owner: { @@ -125,41 +125,43 @@ export declare type GetGroup = { Rank: number; }[]; }; -export declare type GetGroupAllies = { - Groups: GetGroup[]; +export declare type GeneralGetGroupAllies = { + Groups: GeneralGetGroup[]; FinalPage: boolean; }; -export declare type GetGroupEnemies = GetGroupAllies; -export declare type GetIncomingItems = { +export declare type GeneralGetGroupEnemies = GeneralGetGroupAllies; +export declare type GeneralGetIncomingItems = { unreadMessageCount: number; friendRequestsCount: number; }; -export declare type GetProductInfo = ProductOptions; -export declare type GetGamePassProductInfo = ProductOptions; -export declare type UserOwnsAsset = boolean; -export declare type GetDeviceInfo = { +export declare type GeneralGetProductInfo = ProductOptions; +export declare type GeneralGetGamePassProductInfo = ProductOptions; +export declare type GeneralUserOwnsAsset = boolean; +export declare type GeneralGetDeviceInfo = { platformType: string; deviceType: string; operatingSystemType: string; }; -export declare type BlockUser = boolean; -export declare type UnblockUser = boolean; -export declare type GetUserById = { +export declare type GeneralBlockUser = boolean; +export declare type GeneralUnblockUser = boolean; +export declare type GeneralGetUserById = { id: number; name: string; }; -export declare type GetUserByUsername = GetUserById; -export declare type UserCanManageAsset = boolean; +export declare type GeneralGetUserByUsername = GeneralGetUserById; +export declare type GeneralUserCanManageAsset = boolean; export default class GeneralAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ baseUrl: "https://api.roblox.com/", client }); } - getAssetVersions (options: GetAssetVersionOptions): Promise { + getAssetVersions( + options: GeneralGetAssetVersionOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -169,7 +171,7 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - awardBadge (options: AwardBadgeOptions): Promise { + awardBadge(options: GeneralAwardBadgeOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -180,16 +182,18 @@ export default class GeneralAPI extends BaseAPI { }).then(() => true); } - getBalance (): Promise { + getBalance(): Promise { return this.request({ requiresAuth: true, request: { path: "currency/balance" } - }).then((response) => response.body as GetBalance); + }).then((response) => response.body as GeneralGetBalance); } - getUserFriends (options: GetUserFriendsOptions): Promise { + getUserFriends( + options: GeneralGetUserFriendsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -202,9 +206,9 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - acceptFriendRequest ( - options: AcceptFriendRequestOptions - ): Promise { + acceptFriendRequest( + options: GeneralAcceptFriendRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -214,12 +218,12 @@ export default class GeneralAPI extends BaseAPI { requesterUserId: options.userId } } - }).then(() => true as AcceptFriendRequest); + }).then(() => true as GeneralAcceptFriendRequest); } - declineFriendRequest ( - options: DeclineFriendRequestOptions - ): Promise { + declineFriendRequest( + options: GeneralDeclineFriendRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -229,12 +233,12 @@ export default class GeneralAPI extends BaseAPI { requesterUserId: options.userId } } - }).then(() => true as DeclineFriendRequest); + }).then(() => true as GeneralDeclineFriendRequest); } - sendFriendRequest ( - options: SendFriendRequestOptions - ): Promise { + sendFriendRequest( + options: GeneralSendFriendRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -244,12 +248,12 @@ export default class GeneralAPI extends BaseAPI { recipientUserId: options.userId } } - }).then(() => true as SendFriendRequest); + }).then(() => true as GeneralSendFriendRequest); } - getUserFriendsCount ( - options: GetUserFriendsCountOptions - ): Promise { + getUserFriendsCount( + options: GeneralGetUserFriendsCountOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -260,7 +264,9 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body.count); } - unfriendUser (options: UnfriendUserOptions): Promise { + unfriendUser( + options: GeneralUnfriendUserOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -270,10 +276,12 @@ export default class GeneralAPI extends BaseAPI { friendUserId: options.userId } } - }).then(() => true as UnfriendUser); + }).then(() => true as GeneralUnfriendUser); } - isUserFollowing (options: IsUserFollowingOptions): Promise { + isUserFollowing( + options: GeneralIsUserFollowingOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -283,7 +291,7 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body.isFollowing); } - followUser (options: FollowUserOptions): Promise { + followUser(options: GeneralFollowUserOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -293,10 +301,12 @@ export default class GeneralAPI extends BaseAPI { followedUserId: options.userId } } - }).then(() => true as FollowUser); + }).then(() => true as GeneralFollowUser); } - unfollowUser (options: UnfollowUserOptions): Promise { + unfollowUser( + options: GeneralUnfollowUserOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -306,10 +316,12 @@ export default class GeneralAPI extends BaseAPI { followedUserId: options.userId } } - }).then(() => true as UnfollowUser); + }).then(() => true as GeneralUnfollowUser); } - getUserGroups (options: GetUserGroupsOptions): Promise { + getUserGroups( + options: GeneralGetUserGroupsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -318,7 +330,7 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - getGroup (options: GetGroupOptions): Promise { + getGroup(options: GeneralGetGroupOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -328,7 +340,9 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - getGroupAllies (options: GetGroupAlliesOptions): Promise { + getGroupAllies( + options: GeneralGetGroupAlliesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -341,7 +355,9 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - getGroupEnemies (options: GetGroupEnemiesOptions): Promise { + getGroupEnemies( + options: GeneralGetGroupEnemiesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -354,7 +370,7 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - getIncomingItems (): Promise { + getIncomingItems(): Promise { return this.request({ requiresAuth: true, request: { @@ -367,7 +383,9 @@ export default class GeneralAPI extends BaseAPI { })); } - getProductInfo (options: GetProductInfoOptions): Promise { + getProductInfo( + options: GeneralGetProductInfoOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -378,9 +396,9 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - getGamePassProductInfo ( - options: GetGamePassProductInfoOptions - ): Promise { + getGamePassProductInfo( + options: GeneralGetGamePassProductInfoOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -391,7 +409,9 @@ export default class GeneralAPI extends BaseAPI { }).then((response) => response.body); } - userOwnsAsset (options: UserOwnsAssetOptions): Promise { + userOwnsAsset( + options: GeneralUserOwnsAssetOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -399,11 +419,12 @@ export default class GeneralAPI extends BaseAPI { qs: options } }).then( - (response) => (response.body as string).includes("true") as UserOwnsAsset + (response) => + (response.body as string).includes("true") as GeneralUserOwnsAsset ); } - getDeviceInfo (): Promise { + getDeviceInfo(): Promise { return this.request({ requiresAuth: false, request: { @@ -416,7 +437,7 @@ export default class GeneralAPI extends BaseAPI { })); } - blockUser (options: BlockUserOptions): Promise { + blockUser(options: GeneralBlockUserOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -425,10 +446,10 @@ export default class GeneralAPI extends BaseAPI { method: "POST" }, json: true - }).then((response) => response.body.success === (true as BlockUser)); + }).then((response) => response.body.success === (true as GeneralBlockUser)); } - unblockUser (options: UnblockUserOptions): Promise { + unblockUser(options: GeneralUnblockUserOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -437,10 +458,12 @@ export default class GeneralAPI extends BaseAPI { method: "POST" }, json: true - }).then((response) => response.body.success === (true as UnblockUser)); + }).then( + (response) => response.body.success === (true as GeneralUnblockUser) + ); } - getUserById (options: GetUserByIdOptions): Promise { + getUserById(options: GeneralGetUserByIdOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -453,9 +476,9 @@ export default class GeneralAPI extends BaseAPI { })); } - getUserByUsername ( - options: GetUserByUsernameOptions - ): Promise { + getUserByUsername( + options: GeneralGetUserByUsernameOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -469,9 +492,9 @@ export default class GeneralAPI extends BaseAPI { })); } - userCanManageAsset ( - options: UserCanManageAssetOptions - ): Promise { + userCanManageAsset( + options: GeneralUserCanManageAssetOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -479,7 +502,8 @@ export default class GeneralAPI extends BaseAPI { }, json: true }).then( - (response) => response.body.CanManage === (true as UserCanManageAsset) + (response) => + response.body.CanManage === (true as GeneralUserCanManageAsset) ); } } diff --git a/src/client/apis/GroupsAPI.ts b/src/client/apis/GroupsAPI.ts index 366bf5906..f12dd54c1 100644 --- a/src/client/apis/GroupsAPI.ts +++ b/src/client/apis/GroupsAPI.ts @@ -1,15 +1,83 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -import { - GroupOptions, - GroupRoleOptions, - GroupRolePermissionsOptions -} from "../../structures/Group"; -export type GetGroupOptions = { +export type GroupsGroupRolePermissionsOptions = { + groupId: number; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + permissions: { + groupPostsPermissions: { + viewWall: boolean; + postToWall: boolean; + deleteFromWall: boolean; + viewStatus: boolean; + postToStatus: boolean; + }; + groupMembershipPermissions: { + changeRank: boolean; + inviteMembers: boolean; + removeMembers: boolean; + }; + groupManagementPermissions: { + manageRelationships: boolean; + manageClan: boolean; + viewAuditLogs: boolean; + }; + groupEconomyPermissions: { + spendGroupFunds: boolean; + advertiseGroup: boolean; + createItems: boolean; + manageItems: boolean; + addGroupPlaces: boolean; + manageGroupGames: boolean; + viewGroupPayouts: boolean; + }; + }; +}; +export type GroupsGroupRoleOptions = { + id?: number; + name?: string; + rank?: number; + group: { + id: number; + name?: string; + }; +}; +export type GroupsGroupOptions = { + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + } | null; + shout: { + body: string; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + created: string; + updated: string; + } | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; +}; +export type GroupsGetGroupOptions = { groupId: number; }; -export type GetGroup = { +export type GroupsGetGroup = { id: number; name: string; description: string; @@ -35,13 +103,13 @@ export type GetGroup = { publicEntryAllowed: boolean; isLocked: boolean; }; -export type GetMultiGroupsOptions = { +export type GroupsGetMultiGroupsOptions = { groupIds: number[]; }; -export type GetMultiGroups = { - data: GroupOptions[]; +export type GroupsGetMultiGroups = { + data: GroupsGroupOptions[]; }; -export type GetGroupAuditLogsOptions = { +export type GroupsGetGroupAuditLogsOptions = { groupId: number; actionType: | "DeletePost" @@ -90,7 +158,7 @@ export type GetGroupAuditLogsOptions = { limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetGroupAuditLogs = { +export type GroupsGetGroupAuditLogs = { previousPageCursor: string; nextPageCursor: string; data: { @@ -114,10 +182,10 @@ export type GetGroupAuditLogs = { created: string; }[]; }; -export type GetGroupSettingsOptions = { +export type GroupsGetGroupSettingsOptions = { groupId: number; }; -export type GetGroupSettings = { +export type GroupsGetGroupSettings = { groupId: number; isApprovalRequired: boolean; isBuildersClubRequired: boolean; @@ -125,9 +193,9 @@ export type GetGroupSettings = { areGroupFundsVisible: boolean; areGroupGamesVisible: boolean; }; -export type UpdateGroupSettingsOptions = GetGroupSettings; -export type UpdateGroupSettings = unknown; -export type GetGroupConfigurationMetaData = { +export type GroupsUpdateGroupSettingsOptions = GroupsGetGroupSettings; +export type GroupsUpdateGroupSettings = unknown; +export type GroupsGetGroupConfigurationMetaData = { groupConfiguration: { nameMaxLength: number; descriptionMaxLength: number; @@ -148,7 +216,7 @@ export type GetGroupConfigurationMetaData = { isPremiumPayoutsEnabled: boolean; isDefaultEmblemPolicyEnabled: boolean; }; -export type GetGroupsMetaData = { +export type GroupsGetGroupsMetaData = { groupLimit: number; currentGroupCount: number; groupStatusMaxLength: number; @@ -159,43 +227,43 @@ export type GetGroupsMetaData = { isGroupDetailsPolicyEnabled: boolean; showPreviousGroupNames: boolean; }; -export type CreateGroupOptions = { +export type GroupsCreateGroupOptions = { name: string; description: string; publicGroup: boolean; buildersClubMembersOnly: boolean; files: unknown; }; -export type CreateGroup = GroupOptions; -export type UpdateGroupDescriptionOptions = { +export type GroupsCreateGroup = GroupsGroupOptions; +export type GroupsUpdateGroupDescriptionOptions = { groupId: number; description: string; }; -export type UpdateGroupDescription = { +export type GroupsUpdateGroupDescription = { newDescription: string; }; -export type UpdateGroupStatusOptions = { +export type GroupsUpdateGroupStatusOptions = { groupId: number; message: string; }; -export type UpdateGroupStatus = GroupOptions["shout"]; -export type UpdateGroupIconOptions = { +export type GroupsUpdateGroupStatus = GroupsGroupOptions["shout"]; +export type GroupsUpdateGroupIconOptions = { groupId: number; files: unknown; }; -export type UpdateGroupIcon = unknown; -export type DeclineJoinRequestsOptions = { +export type GroupsUpdateGroupIcon = unknown; +export type GroupsDeclineJoinRequestsOptions = { groupId: number; userIds: number[]; }; -export type DeclineJoinRequests = unknown; -export type GetJoinRequestsOptions = { +export type GroupsDeclineJoinRequests = unknown; +export type GroupsGetJoinRequestsOptions = { groupId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetJoinRequests = { +export type GroupsGetJoinRequests = { previousPageCursor: string; nextPageCursor: string; data: { @@ -207,30 +275,30 @@ export type GetJoinRequests = { created: string; }[]; }; -export type AcceptJoinRequestsOptions = { +export type GroupsAcceptJoinRequestsOptions = { groupId: number; userIds: number[]; }; -export type AcceptJoinRequests = unknown; -export type DeclineJoinRequestOptions = { +export type GroupsAcceptJoinRequests = unknown; +export type GroupsDeclineJoinRequestOptions = { groupId: number; userId: number; }; -export type DeclineJoinRequest = unknown; -export type GetJoinRequestOptions = { +export type GroupsDeclineJoinRequest = unknown; +export type GroupsGetJoinRequestOptions = { groupId: number; userId: number; }; -export type GetJoinRequest = GetJoinRequests["data"][0]; -export type AcceptJoinRequestOptions = { +export type GroupsGetJoinRequest = GroupsGetJoinRequests["data"][0]; +export type GroupsAcceptJoinRequestOptions = { groupId: number; userId: number; }; -export type AcceptJoinRequest = unknown; -export type GetSelfGroupMembershipOptions = { +export type GroupsAcceptJoinRequest = unknown; +export type GroupsGetSelfGroupMembershipOptions = { groupId: number; }; -export type GetSelfGroupMembership = { +export type GroupsGetSelfGroupMembership = { groupId: number; isPrimary: boolean; isPendingJoin: boolean; @@ -249,12 +317,12 @@ export type GetSelfGroupMembership = { memberCount: number; }; }; - permissions: GroupRolePermissionsOptions["permissions"]; + permissions: GroupsGroupRolePermissionsOptions["permissions"]; }; -export type GetGroupRolesOptions = { +export type GroupsGetGroupRolesOptions = { groupId: number; }; -export type GetGroupRoles = { +export type GroupsGetGroupRoles = { groupId: number; roles: { id: number; @@ -264,14 +332,14 @@ export type GetGroupRoles = { memberCount: number; }[]; }; -export type GetMembersWithRoleOptions = { +export type GroupsGetMembersWithRoleOptions = { groupId: number; roleId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetMembersWithRole = { +export type GroupsGetMembersWithRole = { previousPageCursor: string; nextPageCursor: string; data: { @@ -281,55 +349,55 @@ export type GetMembersWithRole = { displayName: string; }[]; }; -export type GetMembersOptions = { +export type GroupsGetMembersOptions = { groupId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetMembers = GetMembersWithRole; -export type JoinGroupOptions = { +export type GroupsGetMembers = GroupsGetMembersWithRole; +export type GroupsJoinGroupOptions = { groupId: number; captchaToken: string; captchaProvider: "PROVIDER_ARKOSELABS" | string; }; -export type JoinGroup = unknown; -export type GetSelfPendingGroupJoins = { - data: GroupOptions[]; +export type GroupsJoinGroup = unknown; +export type GroupsGetSelfPendingGroupJoins = { + data: GroupsGroupOptions[]; }; -export type GetUserGroupsOptions = { +export type GroupsGetUserGroupsOptions = { userId: number; }; -export type GetUserGroups = { +export type GroupsGetUserGroups = { data: { - group: GroupOptions; - role: GetGroupRoles["roles"][0]; + group: GroupsGroupOptions; + role: GroupsGetGroupRoles["roles"][0]; }[]; }; -export type ChangeOwnerOptions = { +export type GroupsChangeOwnerOptions = { groupId: number; userId: number; }; -export type ChangeOwner = unknown; -export type ClaimGroupOptions = { +export type GroupsChangeOwner = unknown; +export type GroupsClaimGroupOptions = { groupId: number; }; -export type ClaimGroup = unknown; -export type KickMemberOptions = { +export type GroupsClaimGroup = unknown; +export type GroupsKickMemberOptions = { groupId: number; userId: number; }; -export type KickMember = unknown; -export type UpdateMemberOptions = { +export type GroupsKickMember = unknown; +export type GroupsUpdateMemberOptions = { groupId: number; userId: number; roleId: number; }; -export type UpdateMember = unknown; -export type GetGroupPayoutsOptions = { +export type GroupsUpdateMember = unknown; +export type GroupsGetGroupPayoutsOptions = { groupId: number; }; -export type GetGroupPayouts = { +export type GroupsGetGroupPayouts = { data: { user: { buildersClubMembershipType: "None" | string; @@ -340,7 +408,7 @@ export type GetGroupPayouts = { percentage: number; }[]; }; -export type PayoutMembersOptions = { +export type GroupsPayoutMembersOptions = { groupId: number; users: { userId: number; @@ -348,63 +416,64 @@ export type PayoutMembersOptions = { }[]; type: "FixedAmount" | "Percentage" | string; }; -export type PayoutMembers = unknown; -export type UpdateRecurringPayoutsOptions = PayoutMembersOptions; -export type UpdateRecurringPayouts = unknown; -export type GetGroupRelationshipsOptions = { +export type GroupsPayoutMembers = unknown; +export type GroupsUpdateRecurringPayoutsOptions = GroupsPayoutMembersOptions; +export type GroupsUpdateRecurringPayouts = unknown; +export type GroupsGetGroupRelationshipsOptions = { groupId: number; relationshipType: "enemies" | "allies"; startRowIndex?: number; maxRows?: number; }; -export type GetGroupRelationships = { +export type GroupsGetGroupRelationships = { groupId: number; - relationshipType: GetGroupRelationshipsOptions["relationshipType"]; + relationshipType: GroupsGetGroupRelationshipsOptions["relationshipType"]; totalGroupCount: number; - relatedGroups: GroupOptions[]; + relatedGroups: GroupsGroupOptions[]; nextRowIndex: number; }; -export type DeclineRelationshipRequestsOptions = { +export type GroupsDeclineRelationshipRequestsOptions = { groupId: number; - relationshipType: GetGroupRelationshipsOptions["relationshipType"]; + relationshipType: GroupsGetGroupRelationshipsOptions["relationshipType"]; withGroups: number[]; }; -export type DeclineRelationshipRequests = unknown; -export type GetRelationshipRequestsOptions = GetGroupRelationshipsOptions; -export type GetRelationshipRequests = GetGroupRelationships; -export type AcceptRelationshipRequestsOptions = - DeclineRelationshipRequestsOptions; -export type AcceptRelationshipRequests = unknown; -export type DeleteRelationshipOptions = Omit< - DeclineRelationshipRequestsOptions, +export type GroupsDeclineRelationshipRequests = unknown; +export type GroupsGetRelationshipRequestsOptions = + GroupsGetGroupRelationshipsOptions; +export type GroupsGetRelationshipRequests = GroupsGetGroupRelationships; +export type GroupsAcceptRelationshipRequestsOptions = + GroupsDeclineRelationshipRequestsOptions; +export type GroupsAcceptRelationshipRequests = unknown; +export type GroupsDeleteRelationshipOptions = Omit< + GroupsDeclineRelationshipRequestsOptions, "withGroups" > & { withGroup: number; }; -export type DeleteRelationship = unknown; -export type CreateRelationshipOptions = Omit< - DeclineRelationshipRequestsOptions, +export type GroupsDeleteRelationship = unknown; +export type GroupsCreateRelationshipOptions = Omit< + GroupsDeclineRelationshipRequestsOptions, "withGroups" > & { withGroup: number; }; -export type CreateRelationship = unknown; -export type DeclineRelationshipRequestOptions = Omit< - DeclineRelationshipRequestsOptions, +export type GroupsCreateRelationship = unknown; +export type GroupsDeclineRelationshipRequestOptions = Omit< + GroupsDeclineRelationshipRequestsOptions, "withGroups" > & { withGroup: number; }; -export type DeclineRelationshipRequest = unknown; -export type AcceptRelationshipRequestOptions = - DeclineRelationshipRequestOptions; -export type AcceptRelationshipRequest = unknown; -export type GetRolePermissionsOptions = { +export type GroupsDeclineRelationshipRequest = unknown; +export type GroupsAcceptRelationshipRequestOptions = + GroupsDeclineRelationshipRequestOptions; +export type GroupsAcceptRelationshipRequest = unknown; +export type GroupsGetRolePermissionsOptions = { groupId: number; roleId: number; }; -export type GetRolePermissions = GroupRolePermissionsOptions; -export type UpdateRolePermissionsOptions = { +export type GroupsGetRolePermissions = GroupsGroupRolePermissionsOptions; +export type GroupsUpdateRolePermissionsOptions = { groupId: number; roleId: number; DeleteFromWall: boolean; @@ -425,21 +494,21 @@ export type UpdateRolePermissionsOptions = { ManageClan: boolean; ManageGroupGames: boolean; }; -export type UpdateRolePermissions = unknown; -export type GetGuestPermissionsOptions = { +export type GroupsUpdateRolePermissions = unknown; +export type GroupsGetGuestPermissionsOptions = { groupId: number; }; -export type GetGuestPermissions = GroupRolePermissionsOptions; -export type GetAllRolesPermissionsOptions = { +export type GroupsGetGuestPermissions = GroupsGroupRolePermissionsOptions; +export type GroupsGetAllRolesPermissionsOptions = { groupId: number; }; -export type GetAllRolesPermissions = { - data: GroupRolePermissionsOptions[]; +export type GroupsGetAllRolesPermissions = { + data: GroupsGroupRolePermissionsOptions[]; }; -export type GetSocialLinksOptions = { +export type GroupsGetSocialLinksOptions = { groupId: number; }; -export type GetSocialLinks = { +export type GroupsGetSocialLinks = { data: { id: number; type: "Facebook" | string; @@ -447,33 +516,33 @@ export type GetSocialLinks = { title: string; }[]; }; -export type PostSocialLinkOptions = { +export type GroupsPostSocialLinkOptions = { groupId: number; type: "Facebook" | string; url: string; title: string; }; -export type PostSocialLink = GetSocialLinks["data"][0]; -export type DeleteSocialLinkOptions = { +export type GroupsPostSocialLink = GroupsGetSocialLinks["data"][0]; +export type GroupsDeleteSocialLinkOptions = { groupId: number; id: number; }; -export type DeleteSocialLink = unknown; -export type UpdateSocialLinkOptions = { +export type GroupsDeleteSocialLink = unknown; +export type GroupsUpdateSocialLinkOptions = { groupId: number; id: number; type: "Facebook" | string; url: string; title: string; }; -export type UpdateSocialLink = unknown; -export type GetWallPostsOptions = { +export type GroupsUpdateSocialLink = unknown; +export type GroupsGetWallPostsOptions = { groupId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetWallPosts = { +export type GroupsGetWallPosts = { previousPageCursor: string; nextPageCursor: string; data: { @@ -489,29 +558,29 @@ export type GetWallPosts = { }; }[]; }; -export type CreateWallPostOptions = { +export type GroupsCreateWallPostOptions = { groupId: number; body: string; captchaToken: string; captchaProvider: "PROVIDER_ARKOSELABS" | string; }; -export type CreateWallPost = GetWallPosts["data"][0]; -export type DeleteWallPostOptions = { +export type GroupsCreateWallPost = GroupsGetWallPosts["data"][0]; +export type GroupsDeleteWallPostOptions = { groupId: number; id: number; }; -export type DeleteWallPost = unknown; -export type DeleteWallPostsByUserOptions = { +export type GroupsDeleteWallPost = unknown; +export type GroupsDeleteWallPostsByUserOptions = { groupId: number; userId: number; }; -export type DeleteWallPostsByUser = unknown; -export type SearchGroupsByKeywordOptions = { +export type GroupsDeleteWallPostsByUser = unknown; +export type GroupsSearchGroupsByKeywordOptions = { keyword: string; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type SearchGroupsByKeyword = { +export type GroupsSearchGroupsByKeyword = { keyword: string; previousPageCursor: string; nextPageCursor: string; @@ -525,23 +594,23 @@ export type SearchGroupsByKeyword = { updated: string; }[]; }; -export type SearchGroupsOptions = { +export type GroupsSearchGroupsOptions = { groupName: string; }; -export type SearchGroups = { +export type GroupsSearchGroups = { data: { id: number; name: string; memberCount: number; }[]; }; -export type GetGroupSearchMetaData = { +export type GroupsGetGroupSearchMetaData = { SuggestedGroupKeywords: string[]; }; -export type GetRolesByIdsOptions = { +export type GroupsGetRolesByIdsOptions = { roleIds: number[]; }; -export type GetRolesByIds = { +export type GroupsGetRolesByIds = { data: { groupId: number; id: number; @@ -551,40 +620,40 @@ export type GetRolesByIds = { memberCount: number; }[]; }; -export type GetUserPrimaryGroupOptions = { +export type GroupsGetUserPrimaryGroupOptions = { userId: number; }; -export type GetUserPrimaryGroup = { - group?: GroupOptions; - role?: GroupRoleOptions; +export type GroupsGetUserPrimaryGroup = { + group?: GroupsGroupOptions; + role?: GroupsGroupRoleOptions; isPrimaryGroup?: boolean; }; -export type RemovePrimaryGroup = unknown; -export type SetPrimaryGroupOptions = { +export type GroupsRemovePrimaryGroup = unknown; +export type GroupsSetPrimaryGroupOptions = { groupId: number; }; -export type SetPrimaryGroup = unknown; -export type CreateRoleOptions = { +export type GroupsSetPrimaryGroup = unknown; +export type GroupsCreateRoleOptions = { groupId: number; name: string; description: string; rank: number; usingGroupFunds: boolean; }; -export type CreateRole = Omit; -export type DeleteRoleOptions = { +export type GroupsCreateRole = Omit; +export type GroupsDeleteRoleOptions = { groupId: number; roleId: number; }; -export type DeleteRole = unknown; -export type UpdateRoleOptions = { +export type GroupsDeleteRole = unknown; +export type GroupsUpdateRoleOptions = { groupId: number; roleId: number; name: string; description: string; rank: number; }; -export type UpdateRole = CreateRole; +export type GroupsUpdateRole = GroupsCreateRole; export default class GroupsAPI extends BaseAPI { constructor(client: Client) { @@ -594,7 +663,7 @@ export default class GroupsAPI extends BaseAPI { }); } - getGroup(options: GetGroupOptions): Promise { + getGroup(options: GroupsGetGroupOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -604,7 +673,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getMultiGroups(options: GetMultiGroupsOptions): Promise { + getMultiGroups( + options: GroupsGetMultiGroupsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -617,7 +688,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getAuditLogs(options: GetGroupAuditLogsOptions): Promise { + getAuditLogs( + options: GroupsGetGroupAuditLogsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -629,8 +702,8 @@ export default class GroupsAPI extends BaseAPI { } getGroupSettings( - options: GetGroupSettingsOptions - ): Promise { + options: GroupsGetGroupSettingsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -641,8 +714,8 @@ export default class GroupsAPI extends BaseAPI { } updateGroupSettings( - options: UpdateGroupSettingsOptions - ): Promise { + options: GroupsUpdateGroupSettingsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -654,7 +727,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupConfigurationMetaData(): Promise { + getGroupConfigurationMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -664,7 +737,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupsMetaData(): Promise { + getGroupsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -674,7 +747,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createGroup(options: CreateGroupOptions): Promise { + createGroup(options: GroupsCreateGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -693,8 +766,8 @@ export default class GroupsAPI extends BaseAPI { } updateGroupDescription( - options: UpdateGroupDescriptionOptions - ): Promise { + options: GroupsUpdateGroupDescriptionOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -707,8 +780,8 @@ export default class GroupsAPI extends BaseAPI { } updateGroupStatus( - options: UpdateGroupStatusOptions - ): Promise { + options: GroupsUpdateGroupStatusOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -720,7 +793,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateGroupIcon(options: UpdateGroupIconOptions): Promise { + updateGroupIcon( + options: GroupsUpdateGroupIconOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -733,8 +808,8 @@ export default class GroupsAPI extends BaseAPI { } declineJoinRequests( - options: DeclineJoinRequestsOptions - ): Promise { + options: GroupsDeclineJoinRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -748,7 +823,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getJoinRequests(options: GetJoinRequestsOptions): Promise { + getJoinRequests( + options: GroupsGetJoinRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -760,8 +837,8 @@ export default class GroupsAPI extends BaseAPI { } acceptJoinRequests( - options: AcceptJoinRequestsOptions - ): Promise { + options: GroupsAcceptJoinRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -776,8 +853,8 @@ export default class GroupsAPI extends BaseAPI { } declineJoinRequest( - options: DeclineJoinRequestOptions - ): Promise { + options: GroupsDeclineJoinRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -788,7 +865,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getJoinRequest(options: GetJoinRequestOptions): Promise { + getJoinRequest( + options: GroupsGetJoinRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -799,8 +878,8 @@ export default class GroupsAPI extends BaseAPI { } acceptJoinRequest( - options: AcceptJoinRequestOptions - ): Promise { + options: GroupsAcceptJoinRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -812,8 +891,8 @@ export default class GroupsAPI extends BaseAPI { } getSelfGroupMembership( - options: GetSelfGroupMembershipOptions - ): Promise { + options: GroupsGetSelfGroupMembershipOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -823,7 +902,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupRoles(options: GetGroupRolesOptions): Promise { + getGroupRoles( + options: GroupsGetGroupRolesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -834,8 +915,8 @@ export default class GroupsAPI extends BaseAPI { } getMembersWithRole( - options: GetMembersWithRoleOptions - ): Promise { + options: GroupsGetMembersWithRoleOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -849,7 +930,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getMembers(options: GetMembersOptions): Promise { + getMembers(options: GroupsGetMembersOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -860,7 +941,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - joinGroup(options: JoinGroupOptions): Promise { + joinGroup(options: GroupsJoinGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -872,7 +953,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getSelfPendingGroupJoins(): Promise { + getSelfPendingGroupJoins(): Promise { return this.request({ requiresAuth: true, request: { @@ -882,7 +963,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getUserGroups(options: GetUserGroupsOptions): Promise { + getUserGroups( + options: GroupsGetUserGroupsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -892,7 +975,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - changeGroupOwner(options: ChangeOwnerOptions): Promise { + changeGroupOwner( + options: GroupsChangeOwnerOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -904,7 +989,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - claimGroup(options: ClaimGroupOptions): Promise { + claimGroup(options: GroupsClaimGroupOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -916,7 +1001,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - kickMember(options: KickMemberOptions): Promise { + kickMember(options: GroupsKickMemberOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -927,7 +1012,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateMember(options: UpdateMemberOptions): Promise { + updateMember( + options: GroupsUpdateMemberOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -939,7 +1026,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupPayouts(options: GetGroupPayoutsOptions): Promise { + getGroupPayouts( + options: GroupsGetGroupPayoutsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -949,7 +1038,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - payoutMembers(options: PayoutMembersOptions): Promise { + payoutMembers( + options: GroupsPayoutMembersOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -969,8 +1060,8 @@ export default class GroupsAPI extends BaseAPI { } updateRecurringPayouts( - options: UpdateRecurringPayoutsOptions - ): Promise { + options: GroupsUpdateRecurringPayoutsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -990,8 +1081,8 @@ export default class GroupsAPI extends BaseAPI { } getGroupRelationships( - options: GetGroupRelationshipsOptions - ): Promise { + options: GroupsGetGroupRelationshipsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1006,8 +1097,8 @@ export default class GroupsAPI extends BaseAPI { } declineRelationshipRequests( - options: DeclineRelationshipRequestsOptions - ): Promise { + options: GroupsDeclineRelationshipRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1022,8 +1113,8 @@ export default class GroupsAPI extends BaseAPI { } getRelationshipRequests( - options: GetRelationshipRequestsOptions - ): Promise { + options: GroupsGetRelationshipRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1035,8 +1126,8 @@ export default class GroupsAPI extends BaseAPI { } acceptRelationshipRequests( - options: AcceptRelationshipRequestsOptions - ): Promise { + options: GroupsAcceptRelationshipRequestsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1051,8 +1142,8 @@ export default class GroupsAPI extends BaseAPI { } deleteRelationship( - options: DeleteRelationshipOptions - ): Promise { + options: GroupsDeleteRelationshipOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1064,8 +1155,8 @@ export default class GroupsAPI extends BaseAPI { } createRelationship( - options: CreateRelationshipOptions - ): Promise { + options: GroupsCreateRelationshipOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1077,8 +1168,8 @@ export default class GroupsAPI extends BaseAPI { } acceptRelationshipRequest( - options: AcceptRelationshipRequestOptions - ): Promise { + options: GroupsAcceptRelationshipRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1089,8 +1180,8 @@ export default class GroupsAPI extends BaseAPI { } declineRelationshipRequest( - options: DeclineRelationshipRequestOptions - ): Promise { + options: GroupsDeclineRelationshipRequestOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1102,8 +1193,8 @@ export default class GroupsAPI extends BaseAPI { } getRolePermissions( - options: GetRolePermissionsOptions - ): Promise { + options: GroupsGetRolePermissionsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1114,8 +1205,8 @@ export default class GroupsAPI extends BaseAPI { } updateRolePermissions( - options: UpdateRolePermissionsOptions - ): Promise { + options: GroupsUpdateRolePermissionsOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1128,8 +1219,8 @@ export default class GroupsAPI extends BaseAPI { } getGuestPermissions( - options: GetGuestPermissionsOptions - ): Promise { + options: GroupsGetGuestPermissionsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1140,8 +1231,8 @@ export default class GroupsAPI extends BaseAPI { } getAllRolesPermissions( - options: GetAllRolesPermissionsOptions - ): Promise { + options: GroupsGetAllRolesPermissionsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1151,7 +1242,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getSocialLinks(options: GetSocialLinksOptions): Promise { + getSocialLinks( + options: GroupsGetSocialLinksOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1161,7 +1254,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createSocialLink(options: PostSocialLinkOptions): Promise { + createSocialLink( + options: GroupsPostSocialLinkOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1174,8 +1269,8 @@ export default class GroupsAPI extends BaseAPI { } deleteSocialLink( - options: DeleteSocialLinkOptions - ): Promise { + options: GroupsDeleteSocialLinkOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1187,8 +1282,8 @@ export default class GroupsAPI extends BaseAPI { } updateSocialLink( - options: UpdateSocialLinkOptions - ): Promise { + options: GroupsUpdateSocialLinkOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1200,7 +1295,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getWallPosts(options: GetWallPostsOptions): Promise { + getWallPosts( + options: GroupsGetWallPostsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1211,7 +1308,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createWallPost(options: CreateWallPostOptions): Promise { + createWallPost( + options: GroupsCreateWallPostOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1223,7 +1322,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteWallPost(options: DeleteWallPostOptions): Promise { + deleteWallPost( + options: GroupsDeleteWallPostOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1235,8 +1336,8 @@ export default class GroupsAPI extends BaseAPI { } deleteUserWallPosts( - options: DeleteWallPostsByUserOptions - ): Promise { + options: GroupsDeleteWallPostsByUserOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1248,8 +1349,8 @@ export default class GroupsAPI extends BaseAPI { } searchGroupsByKeyword( - options: SearchGroupsByKeywordOptions - ): Promise { + options: GroupsSearchGroupsByKeywordOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1260,7 +1361,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - searchGroups(options: SearchGroupsOptions): Promise { + searchGroups( + options: GroupsSearchGroupsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1271,7 +1374,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupSearchMetaData(): Promise { + getGroupSearchMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -1281,7 +1384,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - getRolesByIds(options: GetRolesByIdsOptions): Promise { + getRolesByIds( + options: GroupsGetRolesByIdsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1295,8 +1400,8 @@ export default class GroupsAPI extends BaseAPI { } getUserPrimaryGroup( - options: GetUserPrimaryGroupOptions - ): Promise { + options: GroupsGetUserPrimaryGroupOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -1306,7 +1411,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - removePrimaryGroup(): Promise { + removePrimaryGroup(): Promise { return this.request({ requiresAuth: true, request: { @@ -1317,7 +1422,9 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - setPrimaryGroup(options: SetPrimaryGroupOptions): Promise { + setPrimaryGroup( + options: GroupsSetPrimaryGroupOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -1329,7 +1436,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - createRole(options: CreateRoleOptions): Promise { + createRole(options: GroupsCreateRoleOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1341,7 +1448,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - deleteRole(options: DeleteRoleOptions): Promise { + deleteRole(options: GroupsDeleteRoleOptions): Promise { return this.request({ requiresAuth: true, request: { @@ -1352,7 +1459,7 @@ export default class GroupsAPI extends BaseAPI { }).then((response) => response.body); } - updateRole(options: UpdateRoleOptions): Promise { + updateRole(options: GroupsUpdateRoleOptions): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/InventoryAPI.ts b/src/client/apis/InventoryAPI.ts index 6206e8408..1b2a8c3f0 100644 --- a/src/client/apis/InventoryAPI.ts +++ b/src/client/apis/InventoryAPI.ts @@ -1,7 +1,7 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type CanViewInventory = { +export type InventoryCanViewInventory = { canView: boolean; }; export type InventoryItem = { @@ -21,13 +21,13 @@ export type InventoryCategory = { export type InventoryCategories = { categories: InventoryCategory[]; }; -export type GetPackageAssetsOptions = { +export type InventoryGetPackageAssetsOptions = { packageId: number; }; -export type GetPackageAssets = { +export type InventoryGetPackageAssets = { assetIds: number[]; }; -export type GetUserCollectiblesOptions = { +export type InventoryGetUserCollectiblesOptions = { userId: number; assetType?: | "Image" @@ -89,7 +89,7 @@ export type GetUserCollectiblesOptions = { limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetUserCollectibles = { +export type InventoryGetUserCollectibles = { previousPageCursor: string; nextPageCursor: string; data: { @@ -103,28 +103,28 @@ export type GetUserCollectibles = { buildersClubMembershipType: "None" | string; }[]; }; -export type GetUserItemsByTypeAndTargetIdOptions = { +export type InventoryGetUserItemsByTypeAndTargetIdOptions = { userId: number; itemType: "Asset" | "GamePass" | "Badge" | "Bundle"; itemTargetId: number; }; -export type GetUserItemsByTypeAndTargetId = { +export type InventoryGetUserItemsByTypeAndTargetId = { previousPageCursor: string; nextPageCursor: string; data: { Id: number; Name: string; - Type: GetUserItemsByTypeAndTargetIdOptions["itemType"]; + Type: InventoryGetUserItemsByTypeAndTargetIdOptions["itemType"]; InstanceId: number; }[]; }; -export type GetAssetOwnersOptions = { +export type InventoryGetAssetOwnersOptions = { assetId: number; sortOrder?: "Asc" | "Desc"; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type GetAssetOwners = { +export type InventoryGetAssetOwners = { previousPageCursor: string; nextPageCursor: string; data: { @@ -139,30 +139,30 @@ export type GetAssetOwners = { updated: string; }; }; -export type GetUserInventoryOptions = { +export type InventoryGetUserInventoryOptions = { userId: number; - assetTypes: GetUserCollectiblesOptions["assetType"][]; + assetTypes: InventoryGetUserCollectiblesOptions["assetType"][]; limit?: 10 | 25 | 50 | 100; cursor?: string; sortOrder?: "Asc" | "Desc"; }; -export type GetUserInventory = { +export type InventoryGetUserInventory = { previousPageCursor: string; nextPageCursor: string; data: { assetId: number; name: string; - assetType: GetUserCollectiblesOptions["assetType"]; + assetType: InventoryGetUserCollectiblesOptions["assetType"]; created: string; }[]; }; -export type GetUserInventoryByAssetTypeIdOptions = Omit< - GetUserInventoryOptions, +export type InventoryGetUserInventoryByAssetTypeIdOptions = Omit< + InventoryGetUserInventoryOptions, "assetTypes" > & { assetTypeId: number; }; -export type GetUserInventoryByAssetTypeId = { +export type InventoryGetUserInventoryByAssetTypeId = { previousPageCursor: string; nextPageCursor: string; data: { @@ -189,8 +189,8 @@ export default class InventoryAPI extends BaseAPI { } getPackageAssets( - options: GetPackageAssetsOptions - ): Promise { + options: InventoryGetPackageAssetsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -201,8 +201,8 @@ export default class InventoryAPI extends BaseAPI { } getUserCollectibles( - options: GetUserCollectiblesOptions - ): Promise { + options: InventoryGetUserCollectiblesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -214,8 +214,8 @@ export default class InventoryAPI extends BaseAPI { } getUserItemsByTypeAndTargetId( - options: GetUserItemsByTypeAndTargetIdOptions - ): Promise { + options: InventoryGetUserItemsByTypeAndTargetIdOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -225,7 +225,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - canViewInventory(options: { userId: number }): Promise { + canViewInventory(options: { + userId: number; + }): Promise { return this.request({ requiresAuth: false, request: { @@ -257,7 +259,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getAssetOwners(options: GetAssetOwnersOptions): Promise { + getAssetOwners( + options: InventoryGetAssetOwnersOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -269,8 +273,8 @@ export default class InventoryAPI extends BaseAPI { } getUserInventory( - options: GetUserInventoryOptions - ): Promise { + options: InventoryGetUserInventoryOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -282,8 +286,8 @@ export default class InventoryAPI extends BaseAPI { } getUserInventoryByAssetTypeId( - options: GetUserInventoryByAssetTypeIdOptions - ): Promise { + options: InventoryGetUserInventoryByAssetTypeIdOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/ItemConfigurationAPI.ts b/src/client/apis/ItemConfigurationAPI.ts index 152b48bfe..7d2d63829 100644 --- a/src/client/apis/ItemConfigurationAPI.ts +++ b/src/client/apis/ItemConfigurationAPI.ts @@ -1,13 +1,13 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetCreatedAssetsOptions = { +export type ItemConfigurationGetCreatedAssetsOptions = { assetType: string; isArchived?: boolean; groupId?: number; sortOrder?: "Asc" | "Desc"; }; -export type GetCreatedAssets = { +export type ItemConfigurationGetCreatedAssets = { previousPageCursor: string; nextPageCursor: string; data: { @@ -15,10 +15,10 @@ export type GetCreatedAssets = { name: string; }[]; }; -export type GetMultiCreatedAssetDetailsOptions = { +export type ItemConfigurationGetMultiCreatedAssetDetailsOptions = { assetIds: number[]; }; -export type GetMultiCreatedAssetDetails = { +export type ItemConfigurationGetMultiCreatedAssetDetails = { assetId: number; name: string; status: string; @@ -34,10 +34,10 @@ export type GetMultiCreatedAssetDetails = { isArchived: boolean; assetType: string; }[]; -export type GetItemTagsByItemIdsOptions = { +export type ItemConfigurationGetItemTagsByItemIdsOptions = { itemIds: number[]; }; -export type GetItemTagsByItemIds = { +export type ItemConfigurationGetItemTagsByItemIds = { data: { id: string; itemTags: { @@ -51,43 +51,47 @@ export type GetItemTagsByItemIds = { }[]; }[]; }; -export type CreateItemTagOptions = { +export type ItemConfigurationCreateItemTagOptions = { itemId: number; tagId: string; }; -export type CreateItemTag = GetItemTagsByItemIds["data"][0]["itemTags"][0]; -export type GetItemTagsMetaData = { +export type ItemConfigurationCreateItemTag = + ItemConfigurationGetItemTagsByItemIds["data"][0]["itemTags"][0]; +export type ItemConfigurationGetItemTagsMetaData = { isItemTagsFeatureEnabled: boolean; enabledAssetTypes: string[]; maximumItemTagsPerItem: number; }; -export type DeleteItemTagOptions = { +export type ItemConfigurationDeleteItemTagOptions = { itemTagId: number; }; -export type DeleteItemTag = unknown; -export type GetTagsByTagIdsOptions = { +export type ItemConfigurationDeleteItemTag = unknown; +export type ItemConfigurationGetTagsByTagIdsOptions = { tagIds: number[]; }; -export type GetTagsByTagIds = { - data: Omit[]; +export type ItemConfigurationGetTagsByTagIds = { + data: Omit< + ItemConfigurationGetItemTagsByItemIds["data"][0]["itemTags"][0], + "id" + >[]; }; -export type SearchTagsOptions = { +export type ItemConfigurationSearchTagsOptions = { prefix: string; results: number; }; -export type SearchTags = GetTagsByTagIds; +export type ItemConfigurationSearchTags = ItemConfigurationGetTagsByTagIds; export default class InventoryAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://itemconfiguration.roblox.com/" }); } - getCreatedAssets ( - options: GetCreatedAssetsOptions - ): Promise { + getCreatedAssets( + options: ItemConfigurationGetCreatedAssetsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -98,9 +102,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getMultiCreatedAssets ( - options: GetMultiCreatedAssetDetailsOptions - ): Promise { + getMultiCreatedAssets( + options: ItemConfigurationGetMultiCreatedAssetDetailsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -112,9 +116,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getItemTagsByItemIds ( - options: GetItemTagsByItemIdsOptions - ): Promise { + getItemTagsByItemIds( + options: ItemConfigurationGetItemTagsByItemIdsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -127,7 +131,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - createItemTag (options: CreateItemTagOptions): Promise { + createItemTag( + options: ItemConfigurationCreateItemTagOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -139,7 +145,7 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getItemTagsMetaData (): Promise { + getItemTagsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -149,7 +155,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - deleteItemTag (options: DeleteItemTagOptions): Promise { + deleteItemTag( + options: ItemConfigurationDeleteItemTagOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -160,7 +168,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - getTagsByTagIds (options: GetTagsByTagIdsOptions): Promise { + getTagsByTagIds( + options: ItemConfigurationGetTagsByTagIdsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -173,7 +183,9 @@ export default class InventoryAPI extends BaseAPI { }).then((response) => response.body); } - searchTags (options: SearchTagsOptions): Promise { + searchTags( + options: ItemConfigurationSearchTagsOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/LocaleAPI.ts b/src/client/apis/LocaleAPI.ts index 3ca3862e9..c68e199a0 100644 --- a/src/client/apis/LocaleAPI.ts +++ b/src/client/apis/LocaleAPI.ts @@ -1,20 +1,20 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetCountryRegionsOptions = { +export type LocaleGetCountryRegionsOptions = { locale: string; }; -export type GetCountryRegions = { +export type LocaleGetCountryRegions = { countryRegionList: { code: string; name: string; displayName: string; }[]; }; -export type GetLocalesOptions = { +export type LocaleGetLocalesOptions = { displayValueLocale?: string; }; -export type GetLocales = { +export type LocaleGetLocales = { data: { locale: { id: number; @@ -33,21 +33,21 @@ export type GetLocales = { isEnabledForInGameUgc: boolean; }[]; }; -export type GetSupportedLocales = { - supportedLocales: GetLocales["data"][0]["locale"][]; +export type LocaleGetSupportedLocales = { + supportedLocales: LocaleGetLocales["data"][0]["locale"][]; }; -export type GetUserLocale = { - supportedLocale: GetLocales["data"][0]["locale"]; +export type LocaleGetUserLocale = { + supportedLocale: LocaleGetLocales["data"][0]["locale"]; }; -export type GetLocusSupportedLocales = { - signupAndLogin: GetLocales["data"][0]["locale"]; - generalExperience: GetLocales["data"][0]["locale"]; - ugc: GetLocales["data"][0]["locale"]; +export type LocaleGetLocusSupportedLocales = { + signupAndLogin: LocaleGetLocales["data"][0]["locale"]; + generalExperience: LocaleGetLocales["data"][0]["locale"]; + ugc: LocaleGetLocales["data"][0]["locale"]; }; -export type SetUserLocaleOptions = { +export type LocaleSetUserLocaleOptions = { supportedLocaleCode: string; }; -export type SetUserLocale = { +export type LocaleSetUserLocale = { success: boolean; }; @@ -60,8 +60,8 @@ export default class LocaleAPI extends BaseAPI { } getCountryRegions( - options: GetCountryRegionsOptions - ): Promise { + options: LocaleGetCountryRegionsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -72,7 +72,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getLocales(options: GetLocalesOptions): Promise { + getLocales(options: LocaleGetLocalesOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -83,7 +83,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getSupportedLocales(): Promise { + getSupportedLocales(): Promise { return this.request({ requiresAuth: false, request: { @@ -93,7 +93,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getSupportedLocalsForCreators(): Promise { + getSupportedLocalsForCreators(): Promise { return this.request({ requiresAuth: false, request: { @@ -103,7 +103,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getUserLocale(): Promise { + getUserLocale(): Promise { return this.request({ requiresAuth: true, request: { @@ -113,7 +113,7 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - getLocusSupportedLocales(): Promise { + getLocusSupportedLocales(): Promise { return this.request({ requiresAuth: false, request: { @@ -123,7 +123,9 @@ export default class LocaleAPI extends BaseAPI { }).then((response) => response.body); } - setUserLocale(options: SetUserLocaleOptions): Promise { + setUserLocale( + options: LocaleSetUserLocaleOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/MetricsAPI.ts b/src/client/apis/MetricsAPI.ts index b5fe25367..26f43127e 100644 --- a/src/client/apis/MetricsAPI.ts +++ b/src/client/apis/MetricsAPI.ts @@ -1,16 +1,16 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetThumbnailsMetaData = { +export type MetricsGetThumbnailsMetaData = { logRatio: number; }; -export type RecordThumbnailLoadOptions = { +export type MetricsRecordThumbnailLoadOptions = { duration: number; loadState: string; thumbnailType: string; }; -export type RecordThumbnailLoad = unknown; -export type ReportBundleLoadOptions = { +export type MetricsRecordThumbnailLoad = unknown; +export type MetricsReportBundleLoadOptions = { bundleUrl: string; bundleName: string; loadTimeInMilliseconds: number; @@ -18,7 +18,7 @@ export type ReportBundleLoadOptions = { loadState: string; bundleContentType: string; }; -export type ReportBundleLoad = unknown; +export type MetricsReportBundleLoad = unknown; export default class LocaleAPI extends BaseAPI { constructor(client: Client) { @@ -28,7 +28,7 @@ export default class LocaleAPI extends BaseAPI { }); } - getThumbnailsMetaData(): Promise { + getThumbnailsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -39,8 +39,8 @@ export default class LocaleAPI extends BaseAPI { } recordThumbnailLoad( - options: RecordThumbnailLoadOptions - ): Promise { + options: MetricsRecordThumbnailLoadOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -53,8 +53,8 @@ export default class LocaleAPI extends BaseAPI { } recordBundleLoad( - options: ReportBundleLoadOptions - ): Promise { + options: MetricsReportBundleLoadOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/NotificationsAPI.ts b/src/client/apis/NotificationsAPI.ts index 769046052..475e1e2eb 100644 --- a/src/client/apis/NotificationsAPI.ts +++ b/src/client/apis/NotificationsAPI.ts @@ -1,7 +1,7 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetNotificationsSettings = { +export type NotificationsGetNotificationsSettings = { notificationBandSettings: { notificationSourceType: string; receiverDestinationType: string; @@ -21,42 +21,43 @@ export type GetNotificationsSettings = { optedOutNotificationSourceTypes: string[]; optedOutReceiverDestinationTypes: string[]; }; -export type GetRealtimeNotificationsSettings = { +export type NotificationsGetRealtimeNotificationsSettings = { primaryDomain: string; fallbackDomain: string; }; -export type AllowNotificationSourceOptions = { +export type NotificationsAllowNotificationSourceOptions = { sourceType: string; }; -export type AllowNotificationSource = unknown; -export type DisallowNotificationSourceOptions = AllowNotificationSourceOptions; -export type DisallowNotificationSource = unknown; -export type AllowNotificationsDestinationOptions = { +export type NotificationsAllowNotificationSource = unknown; +export type NotificationsDisallowNotificationSourceOptions = + NotificationsAllowNotificationSourceOptions; +export type NotificationsDisallowNotificationSource = unknown; +export type NotificationsAllowNotificationsDestinationOptions = { destinationType: string; }; -export type AllowNotificationsDestination = unknown; -export type DisallowNotificationsDestinationOptions = - AllowNotificationsDestinationOptions; -export type DisallowNotificationsDestination = unknown; -export type UpdateNotificationDestinationSettingsOptions = { +export type NotificationsAllowNotificationsDestination = unknown; +export type NotificationsDisallowNotificationsDestinationOptions = + NotificationsAllowNotificationsDestinationOptions; +export type NotificationsDisallowNotificationsDestination = unknown; +export type NotificationsUpdateNotificationDestinationSettingsOptions = { notificationSourceType: string; destinationId: number; isEnabled: boolean; }; -export type UpdateNotificationDestinationSettings = unknown; -export type UpdateNotificationSettingsOptions = { +export type NotificationsUpdateNotificationDestinationSettings = unknown; +export type NotificationsUpdateNotificationSettingsOptions = { updatedSettings: { notificationSourceType: string; receiverDestination: string; isEnabled: boolean; }[]; }; -export type UpdateNotificationSettings = unknown; -export type GetChromeNotificationsManifest = { +export type NotificationsUpdateNotificationSettings = unknown; +export type NotificationsGetChromeNotificationsManifest = { name: string; gcm_sender_id: string; }; -export type GetCurrentNotificationDeviceDestination = { +export type NotificationsGetCurrentNotificationDeviceDestination = { destination: { user: { name: string; @@ -71,15 +72,15 @@ export type GetCurrentNotificationDeviceDestination = { }; statusMessage: string; }; -export type GetNotificationDestinations = { - destinations: GetCurrentNotificationDeviceDestination["destination"][]; +export type NotificationsGetNotificationDestinations = { + destinations: NotificationsGetCurrentNotificationDeviceDestination["destination"][]; statusMessage: string; }; -export type GetNotificationsMetaDataOptions = { +export type NotificationsGetNotificationsMetaDataOptions = { notificationToken: string; notificationId: number; }; -export type GetNotificationsMetaData = { +export type NotificationsGetNotificationsMetaData = { metadata: { notificationId: string; type: string; @@ -88,52 +89,52 @@ export type GetNotificationsMetaData = { }; statusMessage: string; }; -export type GetNotificationIdsOptions = { +export type NotificationsGetNotificationIdsOptions = { notificationToken: string; limit: number; cursor?: string; }; -export type GetNotificationIds = { +export type NotificationsGetNotificationIds = { ids: string[]; statusMessage: string; }; -export type DeregisterAllDevices = { +export type NotificationsDeregisterAllDevices = { statusMessage: string; }; -export type DeregisterCurrentDevice = { +export type NotificationsDeregisterCurrentDevice = { statusMessage: string; }; -export type MarkNotificationReadOptions = { +export type NotificationsMarkNotificationReadOptions = { platformType: string; notificationId: string; }; -export type MarkNotificationRead = { +export type NotificationsMarkNotificationRead = { statusMessage: string; }; -export type MarkNotificationCategoryReadOptions = { +export type NotificationsMarkNotificationCategoryReadOptions = { notificationType: string; category: string; latestNotificationId: string; }; -export type MarkNotificationCategoryRead = { +export type NotificationsMarkNotificationCategoryRead = { statusMessage: string; }; -export type MarkNotificationInteractionOptions = { +export type NotificationsMarkNotificationInteractionOptions = { platformType: string; notificationToken: string; notificationId: number; interactionType: string; }; -export type MarkNotificationInteraction = { +export type NotificationsMarkNotificationInteraction = { statusMessage: string; }; -export type RegisterAmazonAndroidOptions = { +export type NotificationsRegisterAmazonAndroidOptions = { notificationToken: string; authorizeForUser: boolean; oldNotificationToken: string; deviceName: string; }; -export type RegisterAmazonAndroid = { +export type NotificationsRegisterAmazonAndroid = { registration: { userPushNotificationDestinationId: number; name: string; @@ -143,32 +144,37 @@ export type RegisterAmazonAndroid = { }; statusMessage: string; }; -export type RegisterAndroidNativeOptions = RegisterAmazonAndroidOptions; -export type RegisterAndroidNative = RegisterAmazonAndroid; -export type RegisterAndroidTencentServiceOptions = RegisterAmazonAndroidOptions; -export type RegisterAndroidTencentService = RegisterAmazonAndroid; -export type RegisterChromeOptions = { +export type NotificationsRegisterAndroidNativeOptions = + NotificationsRegisterAmazonAndroidOptions; +export type NotificationsRegisterAndroidNative = + NotificationsRegisterAmazonAndroid; +export type NotificationsRegisterAndroidTencentServiceOptions = + NotificationsRegisterAmazonAndroidOptions; +export type NotificationsRegisterAndroidTencentService = + NotificationsRegisterAmazonAndroid; +export type NotificationsRegisterChromeOptions = { notificationToken: string; initiatedByUser: boolean; }; -export type RegisterChrome = RegisterAmazonAndroid; -export type RegisterFirefoxOptions = RegisterChromeOptions & { - notificationEndpoint: string; -}; -export type RegisterFirefox = RegisterAmazonAndroid; -export type RegisterIOSNativeOptions = { +export type NotificationsRegisterChrome = NotificationsRegisterAmazonAndroid; +export type NotificationsRegisterFirefoxOptions = + NotificationsRegisterChromeOptions & { + notificationEndpoint: string; + }; +export type NotificationsRegisterFirefox = NotificationsRegisterAmazonAndroid; +export type NotificationsRegisterIOSNativeOptions = { notificationToken: string; destinationIdentifier: string; authorizeForUser: boolean; oldNotificationToken: string; deviceName: string; }; -export type RegisterIOSNative = RegisterAmazonAndroid; -export type GetLatestUniversesUpdatesOptions = { +export type NotificationsRegisterIOSNative = NotificationsRegisterAmazonAndroid; +export type NotificationsGetLatestUniversesUpdatesOptions = { universeIds: number[]; sinceDateTime?: string; }; -export type GetLatestUniverseUpdates = { +export type NotificationsGetLatestUniverseUpdates = { universeId: number; rootPlaceId: number; createdOn: string; @@ -176,15 +182,15 @@ export type GetLatestUniverseUpdates = { content: string; universeName: string; }[]; -export type GetStreamNotificationsPromptSettings = { +export type NotificationsGetStreamNotificationsPromptSettings = { hasUserInteractedWithNotificationsStream: boolean; showNotificationStreamPrompt: boolean; }; -export type GetRecentStreamNotificationsOptions = { +export type NotificationsGetRecentStreamNotificationsOptions = { startIndex?: number; maxRows?: number; }; -export type GetRecentStreamNotifications = { +export type NotificationsGetRecentStreamNotifications = { id: number; notificationSourceType: string; eventDate: string; @@ -192,55 +198,55 @@ export type GetRecentStreamNotifications = { metadataCollection: unknown[]; eventCount: number; }[]; -export type GetStreamNotificationsMetaData = { +export type NotificationsGetStreamNotificationsMetaData = { bannerDismissTimeSpan: number; signalRDisconnectionResponseInMilliseconds: number; canLaunchGameFromGameUpdate: boolean; useFriendsApiForAjaxRequests: boolean; }; -export type GetStreamNotificationsUnreadCount = { +export type NotificationsGetStreamNotificationsUnreadCount = { unreadNotifications: number; statusMessage: string; }; -export type ClearUnreadStreamNotifications = { +export type NotificationsClearUnreadStreamNotifications = { statusMessage: string; }; -export type SendGameUpdateNotificationInteractedOptions = { +export type NotificationsSendGameUpdateNotificationInteractedOptions = { universeId: number; createdOnKey: string; interactioNType: string; currentUserId: number; }; -export type SendGameUpdateNotificationInteracted = { +export type NotificationsSendGameUpdateNotificationInteracted = { statusMessage: string; }; -export type SendGameUpdateNotificationReadOptions = { +export type NotificationsSendGameUpdateNotificationReadOptions = { universeId: number; createdOn: string; currentUserId: number; }; -export type SendGameUpdateNotificationRead = { +export type NotificationsSendGameUpdateNotificationRead = { statusMessage: string; }; -export type MarkStreamNotificationInteractedOptions = { +export type NotificationsMarkStreamNotificationInteractedOptions = { eventId: string; }; -export type MarkStreamNotificationInteracted = { +export type NotificationsMarkStreamNotificationInteracted = { statusMessage: string; }; -export type SuppressStreamNotificationsPrompt = { +export type NotificationsSuppressStreamNotificationsPrompt = { statusMessage: string; }; export default class NotificationsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://notifications.roblox.com/" }); } - getNotificationsSettings (): Promise { + getNotificationsSettings(): Promise { return this.request({ requiresAuth: false, request: { @@ -250,7 +256,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getRealtimeNotificationSettings (): Promise { + getRealtimeNotificationSettings(): Promise { return this.request({ requiresAuth: false, request: { @@ -260,9 +266,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - allowNotificationSource ( - options: AllowNotificationSourceOptions - ): Promise { + allowNotificationSource( + options: NotificationsAllowNotificationSourceOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -274,9 +280,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - disallowNotificationSource ( - options: DisallowNotificationSourceOptions - ): Promise { + disallowNotificationSource( + options: NotificationsDisallowNotificationSourceOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -288,9 +294,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - allowNotificationDestination ( - options: AllowNotificationsDestinationOptions - ): Promise { + allowNotificationDestination( + options: NotificationsAllowNotificationsDestinationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -302,9 +308,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - disallowNotificationDestination ( - options: DisallowNotificationsDestinationOptions - ): Promise { + disallowNotificationDestination( + options: NotificationsDisallowNotificationsDestinationOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -316,9 +322,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - updateDestinationSetting ( - options: UpdateNotificationDestinationSettingsOptions - ): Promise { + updateDestinationSetting( + options: NotificationsUpdateNotificationDestinationSettingsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -330,9 +336,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - updateNotificationSettings ( - options: UpdateNotificationSettingsOptions - ): Promise { + updateNotificationSettings( + options: NotificationsUpdateNotificationSettingsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -344,7 +350,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getChromeManifest (): Promise { + getChromeManifest(): Promise { return this.request({ requiresAuth: false, request: { @@ -354,7 +360,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getCurrentDeviceDestination (): Promise { + getCurrentDeviceDestination(): Promise { return this.request({ requiresAuth: false, request: { @@ -364,7 +370,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getDestinations (): Promise { + getDestinations(): Promise { return this.request({ requiresAuth: false, request: { @@ -374,7 +380,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getPushNotificationsMetaData (): Promise { + getPushNotificationsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -384,9 +390,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getNotificationIds ( - options: GetNotificationIdsOptions - ): Promise { + getNotificationIds( + options: NotificationsGetNotificationIdsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -397,7 +403,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - deregisterAllDevices (): Promise { + deregisterAllDevices(): Promise { return this.request({ requiresAuth: false, request: { @@ -408,7 +414,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - deregisterCurrentDevice (): Promise { + deregisterCurrentDevice(): Promise { return this.request({ requiresAuth: false, request: { @@ -418,9 +424,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - markNotificationRead ( - options: MarkNotificationReadOptions - ): Promise { + markNotificationRead( + options: NotificationsMarkNotificationReadOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -432,9 +438,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - markNotificationCategoryRead ( - options: MarkNotificationCategoryReadOptions - ): Promise { + markNotificationCategoryRead( + options: NotificationsMarkNotificationCategoryReadOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -446,9 +452,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - markNotificationInteraction ( - options: MarkNotificationInteractionOptions - ): Promise { + markNotificationInteraction( + options: NotificationsMarkNotificationInteractionOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -460,9 +466,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - registerAndroidAmazon ( - options: RegisterAmazonAndroidOptions - ): Promise { + registerAndroidAmazon( + options: NotificationsRegisterAmazonAndroidOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -474,9 +480,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - registerAndroidNative ( - options: RegisterAndroidNativeOptions - ): Promise { + registerAndroidNative( + options: NotificationsRegisterAndroidNativeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -488,9 +494,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - registerAndroidTencentSerice ( - options: RegisterAndroidTencentServiceOptions - ): Promise { + registerAndroidTencentSerice( + options: NotificationsRegisterAndroidTencentServiceOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -502,7 +508,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - registerChrome (options: RegisterChromeOptions): Promise { + registerChrome( + options: NotificationsRegisterChromeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -514,7 +522,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - registerFirefox (options: RegisterFirefoxOptions): Promise { + registerFirefox( + options: NotificationsRegisterFirefoxOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -526,9 +536,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - registerIOSNative ( - options: RegisterIOSNativeOptions - ): Promise { + registerIOSNative( + options: NotificationsRegisterIOSNativeOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -540,9 +550,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getLatestUniversesUpdates ( - options: GetLatestUniversesUpdatesOptions - ): Promise { + getLatestUniversesUpdates( + options: NotificationsGetLatestUniversesUpdatesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -556,7 +566,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getStreamNotificationsPromptSettings (): Promise { + getStreamNotificationsPromptSettings(): Promise { return this.request({ requiresAuth: false, request: { @@ -566,9 +576,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getRecentStreamNotifications ( - options: GetRecentStreamNotificationsOptions - ): Promise { + getRecentStreamNotifications( + options: NotificationsGetRecentStreamNotificationsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -579,7 +589,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getStreamNotificationsMetaData (): Promise { + getStreamNotificationsMetaData(): Promise { return this.request({ requiresAuth: false, request: { @@ -589,7 +599,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - getUnreadStreamNotificationsCount (): Promise { + getUnreadStreamNotificationsCount(): Promise { return this.request({ requiresAuth: false, request: { @@ -599,7 +609,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - clearUnreadStreamNotifications (): Promise { + clearUnreadStreamNotifications(): Promise { return this.request({ requiresAuth: false, request: { @@ -610,9 +620,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - markGameUpdateNotificationInteracted ( - options: SendGameUpdateNotificationInteractedOptions - ): Promise { + markGameUpdateNotificationInteracted( + options: NotificationsSendGameUpdateNotificationInteractedOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -624,9 +634,9 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - markGameUpdateNotificationRead ( - options: SendGameUpdateNotificationReadOptions - ): Promise { + markGameUpdateNotificationRead( + options: NotificationsSendGameUpdateNotificationReadOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -638,7 +648,7 @@ export default class NotificationsAPI extends BaseAPI { }).then((response) => response.body); } - suppressStreamNotificationsPrompt (): Promise { + suppressStreamNotificationsPrompt(): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/OtherAPI.ts b/src/client/apis/OtherAPI.ts index cf1a5baf5..1278a2cb0 100644 --- a/src/client/apis/OtherAPI.ts +++ b/src/client/apis/OtherAPI.ts @@ -2,10 +2,10 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; -export type GetUserProfileHeaderOptions = { +export type OtherGetUserProfileHeaderOptions = { userId: number; }; -export type GetUserProfileHeader = { +export type OtherGetUserProfileHeader = { UserId: number; ProfileUserId: number; ProfileUserName: string; @@ -46,16 +46,16 @@ export type GetUserProfileHeader = { }; export default class OtherAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://roblox.com/" }); } - getUserProfileHeader ( - options: GetUserProfileHeaderOptions - ): Promise { + getUserProfileHeader( + options: OtherGetUserProfileHeaderOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/PremiumFeaturesAPI.ts b/src/client/apis/PremiumFeaturesAPI.ts index ceaf90933..07367150e 100644 --- a/src/client/apis/PremiumFeaturesAPI.ts +++ b/src/client/apis/PremiumFeaturesAPI.ts @@ -1,28 +1,28 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type PremiumUpsellCheckOptions = { +export type PremiumFeaturesUpsellCheckOptions = { userId: number; universeId: number; placeId: number; }; -export type PremiumUpsellCheck = unknown; -export type ValidateUserMembershipOptions = { +export type PremiumFeaturesUpsellCheck = unknown; +export type PremiumFeaturesValidateUserMembershipOptions = { userId: number; }; -export type ValidateUserMembership = boolean; +export type PremiumFeaturesValidateUserMembership = boolean; export default class PremiumFeaturesAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://premiumfeatures.roblox.com/" }); } - premiumUpsellCheck ( - options: PremiumUpsellCheckOptions - ): Promise { + premiumUpsellCheck( + options: PremiumFeaturesUpsellCheckOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -33,9 +33,9 @@ export default class PremiumFeaturesAPI extends BaseAPI { }).then((response) => response.body); } - validateUserMembership ( - options: ValidateUserMembershipOptions - ): Promise { + validateUserMembership( + options: PremiumFeaturesValidateUserMembershipOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/PresenceAPI.ts b/src/client/apis/PresenceAPI.ts index f6e36ed73..146343730 100644 --- a/src/client/apis/PresenceAPI.ts +++ b/src/client/apis/PresenceAPI.ts @@ -2,16 +2,16 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; -export type RegisterAppPresenceOptions = { +export type PresenceRegisterAppPresenceOptions = { location: string; placeId: number; disconnect: boolean; }; -export type RegisterAppPresence = unknown; -export type GetUsersPresencesOptions = { +export type PresenceRegisterAppPresence = unknown; +export type PresenceGetUsersPresencesOptions = { userIds: number[]; }; -export type GetUsersPresences = { +export type PresenceGetUsersPresences = { userPresences: { userPresenceType: EnumUserPresence; lastLocation: string; @@ -25,16 +25,16 @@ export type GetUsersPresences = { }; export default class PresenceAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://presence.roblox.com/" }); } - registerAppPresence ( - options: RegisterAppPresenceOptions - ): Promise { + registerAppPresence( + options: PresenceRegisterAppPresenceOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -46,9 +46,9 @@ export default class PresenceAPI extends BaseAPI { }).then((response) => response.body); } - getUsersPresences ( - options: GetUsersPresencesOptions - ): Promise { + getUsersPresences( + options: PresenceGetUsersPresencesOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/PrivateMessagesAPI.ts b/src/client/apis/PrivateMessagesAPI.ts index 5cf15040f..e162ea992 100644 --- a/src/client/apis/PrivateMessagesAPI.ts +++ b/src/client/apis/PrivateMessagesAPI.ts @@ -1,7 +1,7 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetAnnouncements = { +export type PrivateMessagesGetAnnouncements = { collection: { id: number; sender: { @@ -16,15 +16,15 @@ export type GetAnnouncements = { }; totalCollectionSize: number; }; -export type GetAnnouncementsMetaData = { +export type PrivateMessagesGetAnnouncementsMetaData = { numOfAnnouncements: number; }; -export type GetMessagesOptions = { +export type PrivateMessagesGetMessagesOptions = { pageNumber?: number; pageSize?: number; messageTab?: "Inbox" | "Sent" | "Archive"; }; -export type GetMessages = { +export type PrivateMessagesGetMessages = { collection: { id: number; sender: { @@ -49,27 +49,30 @@ export type GetMessages = { totalPages: number; pageNumber: number; }; -export type GetMessageOptions = { +export type PrivateMessagesGetMessageOptions = { messageId: number; }; -export type GetMessage = GetMessages["collection"][0]; -export type GetUnreadMessagesCount = { +export type PrivateMessagesGetMessage = + PrivateMessagesGetMessages["collection"][0]; +export type PrivateMessagesGetUnreadMessagesCount = { count: number; }; -export type ArchiveMessagesOptions = { +export type PrivateMessagesArchiveMessagesOptions = { messageIds: number[]; }; -export type ArchiveMessages = { +export type PrivateMessagesArchiveMessages = { failedMessages?: { messageId: number; errorMessage: string; }[]; }; -export type MarkMessagesReadOptions = ArchiveMessagesOptions; -export type MarkMessagesRead = ArchiveMessages; -export type MarkMessagesUnreadOptions = ArchiveMessagesOptions; -export type MarkMessagesUnread = ArchiveMessages; -export type SendMessageOptions = { +export type PrivateMessagesMarkMessagesReadOptions = + PrivateMessagesArchiveMessagesOptions; +export type PrivateMessagesMarkMessagesRead = PrivateMessagesArchiveMessages; +export type PrivateMessagesMarkMessagesUnreadOptions = + PrivateMessagesArchiveMessagesOptions; +export type PrivateMessagesMarkMessagesUnread = PrivateMessagesArchiveMessages; +export type PrivateMessagesSendMessageOptions = { userId: number; subject: string; body: string; @@ -77,13 +80,14 @@ export type SendMessageOptions = { replyMessageId?: number; includePreviousMessage?: boolean; }; -export type SendMessage = { +export type PrivateMessagesSendMessage = { success: boolean; shortMessage: string; message: string; }; -export type UnArchiveMessagesOptions = ArchiveMessagesOptions; -export type UnArchiveMessages = ArchiveMessages; +export type PrivateMessagesUnArchiveMessagesOptions = + PrivateMessagesArchiveMessagesOptions; +export type PrivateMessagesUnArchiveMessages = PrivateMessagesArchiveMessages; export default class PrivateMessagesAPI extends BaseAPI { constructor(client: Client) { @@ -93,7 +97,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }); } - getAnnouncements(): Promise { + getAnnouncements(): Promise { return this.request({ requiresAuth: false, request: { @@ -103,7 +107,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getAnnouncementsMetaData(): Promise { + getAnnouncementsMetaData(): Promise { return this.request({ requiresAuth: true, request: { @@ -113,7 +117,9 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getMessages(options: GetMessagesOptions): Promise { + getMessages( + options: PrivateMessagesGetMessagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -124,7 +130,9 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - getMessage(options: GetMessageOptions): Promise { + getMessage( + options: PrivateMessagesGetMessageOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -144,7 +152,7 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body.canMessage); } - getUnreadMessagesCount(): Promise { + getUnreadMessagesCount(): Promise { return this.request({ requiresAuth: true, request: { @@ -154,7 +162,9 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - archiveMessages(options: ArchiveMessagesOptions): Promise { + archiveMessages( + options: PrivateMessagesArchiveMessagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -167,8 +177,8 @@ export default class PrivateMessagesAPI extends BaseAPI { } markMessagesRead( - options: MarkMessagesReadOptions - ): Promise { + options: PrivateMessagesMarkMessagesReadOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -181,8 +191,8 @@ export default class PrivateMessagesAPI extends BaseAPI { } markMessagesUnread( - options: MarkMessagesUnreadOptions - ): Promise { + options: PrivateMessagesMarkMessagesUnreadOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -194,7 +204,9 @@ export default class PrivateMessagesAPI extends BaseAPI { }).then((response) => response.body); } - sendMessage(options: SendMessageOptions): Promise { + sendMessage( + options: PrivateMessagesSendMessageOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -207,8 +219,8 @@ export default class PrivateMessagesAPI extends BaseAPI { } unArchiveMessages( - options: UnArchiveMessagesOptions - ): Promise { + options: PrivateMessagesUnArchiveMessagesOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/PublishAPI.ts b/src/client/apis/PublishAPI.ts index 61b827425..18e846c82 100644 --- a/src/client/apis/PublishAPI.ts +++ b/src/client/apis/PublishAPI.ts @@ -1,10 +1,10 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type UploadAssetsOptions = { +export type PublishUploadAssetsOptions = { files: unknown; }; -export type UploadAssets = { +export type PublishUploadAssets = { AssetDetails: { assetId: number; assetFileName: string; @@ -21,8 +21,8 @@ export type PublishAudio = { Id: number; Name: string; }; -export type VerifyAudioOptions = PublishAudioOptions; -export type VerifyAudio = { +export type PublishVerifyAudioOptions = PublishAudioOptions; +export type PublishVerifyAudio = { price: number; canAfford: boolean; }; @@ -40,18 +40,18 @@ export type PublishGamePassIconOptions = { export type PublishGamePassIcon = { targetId: number; }; -export type UploadGameThumbnailOptions = { +export type PublishUploadGameThumbnailOptions = { gameId: number; files: unknown; }; -export type UploadGameThumbnail = { +export type PublishUploadGameThumbnail = { targetId: number; }; -export type UploadPluginIconOptions = { +export type PublishUploadPluginIconOptions = { pluginId: number; files: unknown; }; -export type UploadPluginIcon = { +export type PublishUploadPluginIcon = { targetId: number; }; @@ -66,7 +66,9 @@ export default class PublishAPI extends BaseAPI { /** * @hidden */ - uploadAssets(options: UploadAssetsOptions): Promise { + uploadAssets( + options: PublishUploadAssetsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -90,7 +92,7 @@ export default class PublishAPI extends BaseAPI { }).then((response) => response.body); } - verifyAudio(options: VerifyAudioOptions): Promise { + verifyAudio(options: PublishVerifyAudioOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -134,8 +136,8 @@ export default class PublishAPI extends BaseAPI { } uploadGameThumbnail( - options: UploadGameThumbnailOptions - ): Promise { + options: PublishUploadGameThumbnailOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -148,8 +150,8 @@ export default class PublishAPI extends BaseAPI { } uploadPluginIcon( - options: UploadPluginIconOptions - ): Promise { + options: PublishUploadPluginIconOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/ThumbnailsAPI.ts b/src/client/apis/ThumbnailsAPI.ts index d09ad1eb5..8da8c7fbb 100644 --- a/src/client/apis/ThumbnailsAPI.ts +++ b/src/client/apis/ThumbnailsAPI.ts @@ -1,86 +1,87 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetAssetsThumbnailsOptions = { +export type ThumbnailsGetAssetsThumbnailsOptions = { assetIds: number[]; returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; size?: - | "42x42" - | "50x50" - | "75x75" - | "110x110" - | "140x140" - | "150x150" - | "160x100" - | "160x600" - | "250x250" - | "256x144" - | "300x250" - | "304x166" - | "384x216" - | "396x216" - | "420x420" - | "480x270" - | "512x512" - | "576x324" - | "700x700" - | "728x90" - | "768x432"; + | "42x42" + | "50x50" + | "75x75" + | "110x110" + | "140x140" + | "150x150" + | "160x100" + | "160x600" + | "250x250" + | "256x144" + | "300x250" + | "304x166" + | "384x216" + | "396x216" + | "420x420" + | "480x270" + | "512x512" + | "576x324" + | "700x700" + | "728x90" + | "768x432"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetAssetsThumbnails = { +export type ThumbnailsGetAssetsThumbnails = { data: { targetId: number; state: "Error" | string; imageUrl: string; }[]; }; -export type GetBadgesIconsOptions = { +export type ThumbnailsGetBadgesIconsOptions = { badgeIds: number[]; size?: "150x150"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetBadgesIcons = GetAssetsThumbnails; -export type GetBundlesThumbnailsOptions = { +export type ThumbnailsGetBadgesIcons = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetBundlesThumbnailsOptions = { bundleIds: number[]; size?: "150x150" | "420x420"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetBundlesThumbnails = GetAssetsThumbnails; -export type GetDeveloperProductsIconsOptions = { +export type ThumbnailsGetBundlesThumbnails = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetDeveloperProductsIconsOptions = { developerProductIds: number[]; size?: "150x150" | "420x420"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetDeveloperProductsIcons = GetAssetsThumbnails; -export type GetGamePassesIconsOptions = { +export type ThumbnailsGetDeveloperProductsIcons = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetGamePassesIconsOptions = { gamePassIds: number[]; size?: "150x150"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetGamePassesIcons = GetAssetsThumbnails; -export type GetUniverseThumbnailsOptions = { +export type ThumbnailsGetGamePassesIcons = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUniverseThumbnailsOptions = { universeId: number; thumbnailIds: number[]; size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUniverseThumbnails = GetAssetsThumbnails; -export type GetUniversesRootPlaceThumbnailsOptions = { +export type ThumbnailsGetUniverseThumbnails = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUniversesRootPlaceThumbnailsOptions = { universeIds: number[]; returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; size?: "50x50" | "128x128" | "150x150" | "256x256" | "512x512"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUniversesRootPlaceThumbnails = GetAssetsThumbnails; -export type GetUniversesThumbnailsOptions = { +export type ThumbnailsGetUniversesRootPlaceThumbnails = + ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUniversesThumbnailsOptions = { universeIds: number[]; countPerUniverse?: number; defaults?: boolean; @@ -88,7 +89,7 @@ export type GetUniversesThumbnailsOptions = { format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUniversesThumbnails = { +export type ThumbnailsGetUniversesThumbnails = { data: { universeId: number; error?: { @@ -105,84 +106,86 @@ export type GetUniversesThumbnails = { }[]; }[]; }; -export type GetGroupsIconsOptions = { +export type ThumbnailsGetGroupsIconsOptions = { groupIds: number[]; size?: "150x150" | "420x420"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetGroupsIcons = GetAssetsThumbnails; -export type GetUsersFullBodyAvatarImagesOptions = { +export type ThumbnailsGetGroupsIcons = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUsersFullBodyAvatarImagesOptions = { userIds: number[]; size?: - | "30x30" - | "48x48" - | "60x60" - | "75x75" - | "100x100" - | "140x140" - | "150x150" - | "150x200" - | "180x180" - | "250x250" - | "352x352" - | "420x420" - | "720x720"; + | "30x30" + | "48x48" + | "60x60" + | "75x75" + | "100x100" + | "140x140" + | "150x150" + | "150x200" + | "180x180" + | "250x250" + | "352x352" + | "420x420" + | "720x720"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUsersFullBodyAvatarImages = GetAssetsThumbnails; -export type GetUsersAvatarBustImagesOptions = { +export type ThumbnailsGetUsersFullBodyAvatarImages = + ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUsersAvatarBustImagesOptions = { userIds: number[]; size?: "50x50" | "60x60" | "75x75"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUsersAvatarBustImages = GetAssetsThumbnails; -export type GetUsersAvatarHeadShotsImagesOptions = { +export type ThumbnailsGetUsersAvatarBustImages = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUsersAvatarHeadShotsImagesOptions = { userIds: number[]; size?: - | "48x48" - | "50x50" - | "60x60" - | "75x75" - | "110x110" - | "150x150" - | "180x180" - | "352x352" - | "420x420" - | "720x720"; + | "48x48" + | "50x50" + | "60x60" + | "75x75" + | "110x110" + | "150x150" + | "180x180" + | "352x352" + | "420x420" + | "720x720"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUsersAvatarHeadShotsImages = GetAssetsThumbnails; -export type GetUsersOutfitsImagesOptions = { +export type ThumbnailsGetUsersAvatarHeadShotsImages = + ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetUsersOutfitsImagesOptions = { userOutfitIds: number[]; size?: "150x150" | "420x420"; format?: "png" | "jpg"; isCircular?: boolean; }; -export type GetUsersOutfitsImages = GetAssetsThumbnails; -export type GetBatchImagesOptions = { +export type ThumbnailsGetUsersOutfitsImages = ThumbnailsGetAssetsThumbnails; +export type ThumbnailsGetBatchImagesOptions = { requestId: string; targetId: number; type: - | "Avatar" - | "AvatarHeadShot" - | "GameIcon" - | "BadgeIcon" - | "GameThumbnail" - | "GamePass" - | "Asset" - | "BundleThumbnail" - | "Outfit" - | "GroupIcon" - | "DeveloperProduct" - | "AutoGeneratedAsset"; + | "Avatar" + | "AvatarHeadShot" + | "GameIcon" + | "BadgeIcon" + | "GameThumbnail" + | "GamePass" + | "Asset" + | "BundleThumbnail" + | "Outfit" + | "GroupIcon" + | "DeveloperProduct" + | "AutoGeneratedAsset"; size: string; isCircular: boolean; }; -export type GetBatchImages = { +export type ThumbnailsGetBatchImages = { data: { requestId: string; errorCode?: number; @@ -194,16 +197,16 @@ export type GetBatchImages = { }; export default class ThumbnailsAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://thumbnails.roblox.com/" }); } - getAssetsThumbnails ( - options: GetAssetsThumbnailsOptions - ): Promise { + getAssetsThumbnails( + options: ThumbnailsGetAssetsThumbnailsOptions + ): Promise { const assetIdsQueryString = `assetIds=${options.assetIds.join( "&assetIds=" )}`; @@ -219,7 +222,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getBadgesIcons (options: GetBadgesIconsOptions): Promise { + getBadgesIcons( + options: ThumbnailsGetBadgesIconsOptions + ): Promise { const badgeIdsQueryString = `badgeIds=${options.badgeIds.join( "&badgeIds=" )}`; @@ -235,9 +240,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getBundlesThumbnails ( - options: GetBundlesThumbnailsOptions - ): Promise { + getBundlesThumbnails( + options: ThumbnailsGetBundlesThumbnailsOptions + ): Promise { const bundleIdsQueryString = `bundleIds=${options.bundleIds.join( "&bundleIds=" )}`; @@ -253,9 +258,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getDeveloperProductIcons ( - options: GetDeveloperProductsIconsOptions - ): Promise { + getDeveloperProductIcons( + options: ThumbnailsGetDeveloperProductsIconsOptions + ): Promise { const developerProductIdsQueryString = `developerProductIds=${options.developerProductIds.join( "&developerProductIds=" )}`; @@ -271,9 +276,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getGamePassesIcons ( - options: GetGamePassesIconsOptions - ): Promise { + getGamePassesIcons( + options: ThumbnailsGetGamePassesIconsOptions + ): Promise { const gamePassIdsQueryString = `gamePassIds=${options.gamePassIds.join( "&gamePassIds=" )}`; @@ -289,9 +294,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUniverseThumbnailIds ( - options: GetUniverseThumbnailsOptions - ): Promise { + getUniverseThumbnailIds( + options: ThumbnailsGetUniverseThumbnailsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -302,9 +307,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUniversesRootPlaceThumbnail ( - options: GetUniversesRootPlaceThumbnailsOptions - ): Promise { + getUniversesRootPlaceThumbnail( + options: ThumbnailsGetUniversesRootPlaceThumbnailsOptions + ): Promise { const universeIdsQueryString = `universeIds=${options.universeIds.join( "&universeIds=" )}`; @@ -320,9 +325,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUniversesThumbnailIds ( - options: GetUniversesThumbnailsOptions - ): Promise { + getUniversesThumbnailIds( + options: ThumbnailsGetUniversesThumbnailsOptions + ): Promise { const universeIdsQueryString = `universeIds=${options.universeIds.join( "&universeIds=" )}`; @@ -338,7 +343,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getGroupsIcons (options: GetGroupsIconsOptions): Promise { + getGroupsIcons( + options: ThumbnailsGetGroupsIconsOptions + ): Promise { const groupIdsQueryString = `groupIds=${options.groupIds.join( "&groupIds=" )}`; @@ -354,9 +361,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUsersFullBodyAvatarImages ( - options: GetUsersFullBodyAvatarImagesOptions - ): Promise { + getUsersFullBodyAvatarImages( + options: ThumbnailsGetUsersFullBodyAvatarImagesOptions + ): Promise { const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; return this.request({ requiresAuth: false, @@ -370,9 +377,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUsersAvatarBustImages ( - options: GetUsersAvatarBustImagesOptions - ): Promise { + getUsersAvatarBustImages( + options: ThumbnailsGetUsersAvatarBustImagesOptions + ): Promise { const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; return this.request({ requiresAuth: false, @@ -386,9 +393,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUsersAvatarHeadShotImages ( - options: GetUsersAvatarHeadShotsImagesOptions - ): Promise { + getUsersAvatarHeadShotImages( + options: ThumbnailsGetUsersAvatarHeadShotsImagesOptions + ): Promise { const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; return this.request({ requiresAuth: false, @@ -402,9 +409,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getUsersOutfitsImages ( - options: GetUsersOutfitsImagesOptions - ): Promise { + getUsersOutfitsImages( + options: ThumbnailsGetUsersOutfitsImagesOptions + ): Promise { const outfitIdsQueryString = `userOutfitIds=${options.userOutfitIds.join( "&userOutfitIds=" )}`; @@ -420,7 +427,9 @@ export default class ThumbnailsAPI extends BaseAPI { }).then((response) => response.body); } - getBatchImages (options: GetBatchImagesOptions): Promise { + getBatchImages( + options: ThumbnailsGetBatchImagesOptions + ): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/TradesAPI.ts b/src/client/apis/TradesAPI.ts deleted file mode 100644 index 5b813b84a..000000000 --- a/src/client/apis/TradesAPI.ts +++ /dev/null @@ -1,211 +0,0 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; - -export type GetTradeOptions = { - tradeId: number; -}; -export type GetTrade = { - offers: { - user: { - id: number; - name: string; - displayName: string; - }; - userAssets: { - id: number; - serialNumber: number; - assetId: number; - name: string; - recentAveragePrice: number; - originalPrice: number; - assetStock: number; - membershipType: "None" | string; - }[]; - robux: number; - }[]; - id: number; - user: { - id: number; - name: string; - displayName: string; - }; - created: string; - expiration: string; - isActive: boolean; - status: string; -}; -export type GetTradesByStatusTypeOptions = { - tradeStatusType: "Inbound" | "Outbound" | "Completed" | "Inactive"; - sortOrder?: "Asc" | "Desc"; - limit?: 10 | 25 | 50 | 100; - cursor?: string; -}; -export type GetTradesByStatusType = { - previousPageCursor: string; - nextPageCursor: string; - data: { - id: number; - user: { - id: number; - name: string; - displayName: string; - }; - created: string; - expiration: string; - isActive: boolean; - status: string; - }[]; -}; -export type GetTradesCountByStatusTypeOptions = { - tradeStatusType: GetTradesByStatusTypeOptions["tradeStatusType"]; -}; -export type GetTradesCountByStatusType = { - count: number; -}; -export type GetTradesMetaData = { - maxItemsPerSide: number; - minValueRatio: number; - tradeSystemMaxRobuxPercent: number; - tradeSystemRobuxFee: number; -}; -export type CanSelfTradeWithUserOptions = { - userId: number; -}; -export type CanSelfTradeWithUser = { - canTrade: boolean; - status: string; -}; -export type AcceptTradeOptions = { - tradeId: number; -}; -export type AcceptTrade = unknown; -export type CounterTradeOptions = { - tradeId: number; - offers: { - userId: number; - userAssetIds: number[]; - robux: number; - }[]; -}; -export type CounterTrade = { - id: number; -}; -export type DeclineTradeOptions = { - tradeId: number; -}; -export type DeclineTrade = unknown; -export type SendTradeOptions = Omit; -export type SendTrade = { - id: number; -}; - -export default class TradesAPI extends BaseAPI { - constructor (client: Client) { - super({ - client, - baseUrl: "https://trades.roblox.com/" - }); - } - - getTrade (options: GetTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}` - }, - json: true - }).then((response) => response.body); - } - - getTradesByStatusType ( - options: GetTradesByStatusTypeOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeStatusType}` - }, - json: true - }).then((response) => response.body); - } - - getTradesCountByStatusType ( - options: GetTradesCountByStatusTypeOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeStatusType}/count` - }, - json: true - }).then((response) => response.body); - } - - getTradesMetaData (): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/metadata` - }, - json: true - }).then((response) => response.body); - } - - canTradeWith ( - options: CanSelfTradeWithUserOptions - ): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/users/${options.userId}/can-trade-with` - }, - json: true - }).then((response) => response.body); - } - - acceptTrade (options: AcceptTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}/accept`, - method: "POST" - }, - json: true - }).then((response) => response.body); - } - - counterTrade (options: CounterTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}/counter`, - method: "POST", - json: options - }, - json: true - }).then((response) => response.body); - } - - declineTrade (options: DeclineTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/${options.tradeId}/decline`, - method: "POST" - }, - json: true - }).then((response) => response.body); - } - - sendTrade (options: SendTradeOptions): Promise { - return this.request({ - requiresAuth: true, - request: { - path: `v1/trades/send`, - method: "POST", - json: options - }, - json: true - }).then((response) => response.body); - } -} diff --git a/src/client/apis/TranslationRolesAPI.ts b/src/client/apis/TranslationRolesAPI.ts index a59c68995..f9d855183 100644 --- a/src/client/apis/TranslationRolesAPI.ts +++ b/src/client/apis/TranslationRolesAPI.ts @@ -1,29 +1,29 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetSelfGameRolesOptions = { +export type TranslationRolesGetSelfGameRolesOptions = { gameId: number; }; -export type GetSelfGameRoles = { +export type TranslationRolesGetSelfGameRoles = { data: string[]; }; -export type GetGameRoleAssigneesOptions = { +export type TranslationRolesGetGameRoleAssigneesOptions = { gameId: number; role: "translator"; }; -export type GetGameRoleAssignees = { +export type TranslationRolesGetGameRoleAssignees = { data: { id: null; name: string; type: "user"; }[]; }; -export type GetSelfGamesAccessByRoleOptions = { +export type TranslationRolesGetSelfGamesAccessByRoleOptions = { role: "translator"; exclusiveStartKey?: string; pageSize?: number; }; -export type GetSelfGamesAccessByRole = { +export type TranslationRolesGetSelfGamesAccessByRole = { games: { gameId: number; assignee: { @@ -32,25 +32,25 @@ export type GetSelfGamesAccessByRole = { }; }[]; }; -export type UpdateUserAccess = { +export type TranslationRolesUpdateUserAccess = { gameId: number; userId: number; role: "translator"; revoke?: boolean; }; -export type UpdateUser = unknown; +export type TranslationRolesUpdateUser = unknown; export default class TradesAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://translationroles.roblox.com/" }); } - getSelfGameRoles ( - options: GetSelfGameRolesOptions - ): Promise { + getSelfGameRoles( + options: TranslationRolesGetSelfGameRolesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -60,9 +60,9 @@ export default class TradesAPI extends BaseAPI { }).then((response) => response.body); } - getGameRoleAssignees ( - options: GetGameRoleAssigneesOptions - ): Promise { + getGameRoleAssignees( + options: TranslationRolesGetGameRoleAssigneesOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -72,9 +72,9 @@ export default class TradesAPI extends BaseAPI { }).then((response) => response.body); } - getSelfGamesAccessByRole ( - options: GetSelfGamesAccessByRoleOptions - ): Promise { + getSelfGamesAccessByRole( + options: TranslationRolesGetSelfGamesAccessByRoleOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -84,7 +84,9 @@ export default class TradesAPI extends BaseAPI { }).then((response) => response.body); } - updateUserAccess (options: UpdateUserAccess): Promise { + updateUserAccess( + options: TranslationRolesUpdateUserAccess + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/TwoStepVerificationAPI.ts b/src/client/apis/TwoStepVerificationAPI.ts index 87d5a3631..632e2dd33 100644 --- a/src/client/apis/TwoStepVerificationAPI.ts +++ b/src/client/apis/TwoStepVerificationAPI.ts @@ -1,21 +1,21 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type GetTwoStepVerificationMetaDataOptions = { +export type TwoStepVerificationGetMetaDataOptions = { userId: number; challengeId: string; actionType: string; }; -export type GetTwoStepVerificationMetaData = { +export type TwoStepVerificationGetMetaData = { twoStepVerificationEnabled: boolean; authenticatorEnabled: boolean; authenticatorQrCodeSize: string; emailCodeLength: number; authenticatorCodeLength: number; }; -export type GetTwoStepConfigurationOptions = - GetTwoStepVerificationMetaDataOptions; -export type GetTwoStepConfiguration = { +export type TwoStepVerificationGetConfigurationOptions = + TwoStepVerificationGetMetaDataOptions; +export type TwoStepVerificationGetConfiguration = { primaryMediaType: "Email" | string; methods: { mediaType: "Email" | string; @@ -23,67 +23,67 @@ export type GetTwoStepConfiguration = { updated: string; }[]; }; -export type AuthenticatorVerifyOptions = { +export type TwoStepVerificationAuthenticatorVerifyOptions = { challengeId: string; actionType: string; code: string; }; -export type AuthenticatorVerify = { +export type TwoStepVerificationAuthenticatorVerify = { verificationToken: string; }; -export type AuthenticatorDisableOptions = { +export type TwoStepVerificationAuthenticatorDisableOptions = { password: string; }; -export type AuthenticatorDisable = unknown; -export type AuthenticatorEnableOptions = { +export type TwoStepVerificationAuthenticatorDisable = unknown; +export type TwoStepVerificationAuthenticatorEnableOptions = { userId: number; }; -export type AuthenticatorEnable = { +export type TwoStepVerificationAuthenticatorEnable = { setupToken: string; qrCodeImageUrl: string; manualEntryKey: string; }; -export type AuthenticatorVerifySetupOptions = { +export type TwoStepVerificationAuthenticatorVerifySetupOptions = { setupToken: string; code: string; }; -export type AuthenticatorVerifySetup = unknown; -export type EmailSendCodeOptions = { +export type TwoStepVerificationAuthenticatorVerifySetup = unknown; +export type TwoStepVerificationEmailSendCodeOptions = { challengeId: string; actionType: string; }; -export type EmailSendCode = { +export type TwoStepVerificationEmailSendCode = { challengeId: string; actionType: string; }; -export type EmailVerifyOptions = { +export type TwoStepVerificationEmailVerifyOptions = { challengeId: string; actionType: string; code: string; }; -export type EmailVerify = { +export type TwoStepVerificationEmailVerify = { verificationToken: string; }; -export type EmailDisableOptions = { +export type TwoStepVerificationEmailDisableOptions = { password: string; }; -export type EmailDisable = unknown; -export type EmailEnableOptions = { +export type TwoStepVerificationEmailDisable = unknown; +export type TwoStepVerificationEmailEnableOptions = { userId: number; }; -export type EmailEnable = unknown; +export type TwoStepVerificationEmailEnable = unknown; export default class TwoStepVerificationAPI extends BaseAPI { - constructor (client: Client) { + constructor(client: Client) { super({ client, baseUrl: "https://twostepverification.roblox.com/" }); } - getMetaData ( - options: GetTwoStepVerificationMetaDataOptions - ): Promise { + getMetaData( + options: TwoStepVerificationGetMetaDataOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -94,9 +94,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - getConfiguration ( - options?: GetTwoStepConfigurationOptions - ): Promise { + getConfiguration( + options?: TwoStepVerificationGetConfigurationOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -107,9 +107,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - verifyWithAuthenticator ( - options: AuthenticatorVerifyOptions - ): Promise { + verifyWithAuthenticator( + options: TwoStepVerificationAuthenticatorVerifyOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -123,9 +123,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - disableAuthenticator ( - options: AuthenticatorDisableOptions - ): Promise { + disableAuthenticator( + options: TwoStepVerificationAuthenticatorDisableOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -139,9 +139,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - enableAuthenticator ( - options: AuthenticatorEnableOptions - ): Promise { + enableAuthenticator( + options: TwoStepVerificationAuthenticatorEnableOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -155,9 +155,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - verifyAuthenticatorSetup ( - options: AuthenticatorVerifySetupOptions - ): Promise { + verifyAuthenticatorSetup( + options: TwoStepVerificationAuthenticatorVerifySetupOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -171,7 +171,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - sendEmailCode (options: EmailSendCodeOptions): Promise { + sendEmailCode( + options: TwoStepVerificationEmailSendCodeOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -182,7 +184,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - verifyEmail (options: EmailVerifyOptions): Promise { + verifyEmail( + options: TwoStepVerificationEmailVerifyOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -194,7 +198,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - disableEmail (options: EmailDisableOptions): Promise { + disableEmail( + options: TwoStepVerificationEmailDisableOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -206,7 +212,9 @@ export default class TwoStepVerificationAPI extends BaseAPI { }).then((response) => response.body); } - enableEmail (options: EmailEnableOptions): Promise { + enableEmail( + options: TwoStepVerificationEmailEnableOptions + ): Promise { return this.request({ requiresAuth: true, request: { diff --git a/src/client/apis/UsersAPI.ts b/src/client/apis/UsersAPI.ts index 86c177310..5c084f294 100644 --- a/src/client/apis/UsersAPI.ts +++ b/src/client/apis/UsersAPI.ts @@ -1,25 +1,25 @@ import BaseAPI from "./BaseAPI"; import Client from "../Client"; -export type ValidateDisplayNameNewUserOptions = { +export type UsersValidateDisplayNameNewUserOptions = { displayName: string; birthdate: string; }; -export type ValidateDisplayNameNewUser = unknown; -export type ValidateDisplayNameExistingUserOptions = { +export type UsersValidateDisplayNameNewUser = unknown; +export type UsersValidateDisplayNameExistingUserOptions = { userId: number; displayName: string; }; -export type ValidateDisplayNameExistingUser = unknown; -export type SetSelfDisplayNameOptions = { +export type UsersValidateDisplayNameExistingUser = unknown; +export type UsersSetSelfDisplayNameOptions = { userId: number; newDisplayName: string; }; -export type SetSelfDisplayName = unknown; -export type GetUserByIdOptions = { +export type UsersSetSelfDisplayName = unknown; +export type UsersGetUserByIdOptions = { userId: number; }; -export type GetUserById = { +export type UsersGetUserById = { description: string; created: string; isBanned: boolean; @@ -27,16 +27,16 @@ export type GetUserById = { name: string; displayName: string; }; -export type GetSelfAuthenticatedUserInformation = { +export type UsersGetSelfAuthenticatedUserInformation = { id: number; name: string; displayName: string; }; -export type GetUsersByUsernamesOptions = { +export type UsersGetUsersByUsernamesOptions = { usernames: string[]; excludeBannedUsers?: boolean; }; -export type GetUsersByUsernames = { +export type UsersGetUsersByUsernames = { data: { requestedUsername: string; id: number; @@ -44,32 +44,32 @@ export type GetUsersByUsernames = { displayName: string; }[]; }; -export type GetUsersByUserIdsOptions = { +export type UsersGetUsersByUserIdsOptions = { userIds: number[]; excludeBannedUsers?: boolean; }; -export type GetUsersByUserIds = { - data: Omit[]; +export type UsersGetUsersByUserIds = { + data: Omit[]; }; -export type GetUserStatusOptions = { +export type UsersGetUserStatusOptions = { userId: number; }; -export type GetUserStatus = { +export type UsersGetUserStatus = { status: string; }; -export type UpdateSelfStatusOptions = { +export type UsersUpdateSelfStatusOptions = { userId: number; status: string; }; -export type UpdateSelfStatus = { +export type UsersUpdateSelfStatus = { status: string; }; -export type SearchUsersOptions = { +export type UsersSearchUsersOptions = { keyword: string; limit?: 10 | 25 | 50 | 100; cursor?: string; }; -export type SearchUsers = { +export type UsersSearchUsers = { previousPageCursor: string; nextPageCursor: string; data: { @@ -79,7 +79,7 @@ export type SearchUsers = { displayName: string; }[]; }; -export type UserNameHistory = { +export type UsersUserNameHistory = { previousPageCursor: string; nextPageCursor: string; data: { name: string }[]; @@ -94,8 +94,8 @@ export default class UsersAPI extends BaseAPI { } validateDisplayNameNewUser( - options: ValidateDisplayNameNewUserOptions - ): Promise { + options: UsersValidateDisplayNameNewUserOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -107,8 +107,8 @@ export default class UsersAPI extends BaseAPI { } validateDisplayNameExistingUser( - options: ValidateDisplayNameExistingUserOptions - ): Promise { + options: UsersValidateDisplayNameExistingUserOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -120,8 +120,8 @@ export default class UsersAPI extends BaseAPI { } setDisplayName( - options: SetSelfDisplayNameOptions - ): Promise { + options: UsersSetSelfDisplayNameOptions + ): Promise { return this.request({ requiresAuth: true, request: { @@ -133,7 +133,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUserById(options: GetUserByIdOptions): Promise { + getUserById(options: UsersGetUserByIdOptions): Promise { return this.request({ requiresAuth: false, request: { @@ -143,7 +143,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getAuthenticatedUserInformation(): Promise { + getAuthenticatedUserInformation(): Promise { return this.request({ // This should actually be "true", but as it's needed in client.login, it's set to false requiresAuth: false, @@ -155,8 +155,8 @@ export default class UsersAPI extends BaseAPI { } getUsersByUsernames( - options: GetUsersByUsernamesOptions - ): Promise { + options: UsersGetUsersByUsernamesOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -168,7 +168,9 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUsersByIds(options: GetUsersByUserIdsOptions): Promise { + getUsersByIds( + options: UsersGetUsersByUserIdsOptions + ): Promise { return this.request({ requiresAuth: false, request: { @@ -180,7 +182,9 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - getUserNameHistory(options: { userId: number }): Promise { + getUserNameHistory(options: { + userId: number; + }): Promise { return this.request({ requiresAuth: false, request: { @@ -191,7 +195,7 @@ export default class UsersAPI extends BaseAPI { }).then((response) => response.body); } - searchUsers(options: SearchUsersOptions): Promise { + searchUsers(options: UsersSearchUsersOptions): Promise { return this.request({ requiresAuth: false, request: { diff --git a/src/client/apis/index.ts b/src/client/apis/index.ts index 027732f2b..e3b88814a 100644 --- a/src/client/apis/index.ts +++ b/src/client/apis/index.ts @@ -30,7 +30,6 @@ import PresenceAPI from "./PresenceAPI"; import PrivateMessagesAPI from "./PrivateMessagesAPI"; import PublishAPI from "./PublishAPI"; import ThumbnailsAPI from "./ThumbnailsAPI"; -import TradesAPI from "./TradesAPI"; import TranslationRolesAPI from "./TranslationRolesAPI"; import UsersAPI from "./UsersAPI"; import OtherAPI from "./OtherAPI"; @@ -70,11 +69,10 @@ export declare type APIs = { privateMessagesAPI: PrivateMessagesAPI; publishAPI: PublishAPI; thumbnailsAPI: ThumbnailsAPI; - tradesAPI: TradesAPI; translationRolesAPI: TranslationRolesAPI; usersAPI: UsersAPI; generalApi: GeneralAPI; - twpStepVerification: TwoStepVerificationAPI; + twoStepVerification: TwoStepVerificationAPI; }; export default function initAPIs(client: Client): APIs { @@ -112,9 +110,8 @@ export default function initAPIs(client: Client): APIs { privateMessagesAPI: new PrivateMessagesAPI(client), publishAPI: new PublishAPI(client), thumbnailsAPI: new ThumbnailsAPI(client), - tradesAPI: new TradesAPI(client), translationRolesAPI: new TranslationRolesAPI(client), usersAPI: new UsersAPI(client), - twpStepVerification: new TwoStepVerificationAPI(client) + twoStepVerification: new TwoStepVerificationAPI(client) }; } diff --git a/src/client/lib/ChatManager/ChatManager.ts b/src/client/lib/ChatManager/ChatManager.ts index ee91663a3..8b07bef2b 100644 --- a/src/client/lib/ChatManager/ChatManager.ts +++ b/src/client/lib/ChatManager/ChatManager.ts @@ -1,19 +1,19 @@ import Client from "../../Client"; import { - AddUsersToConversation, - GetChatSettings, - MarkConversationsAsSeen, - MarkMessageInConversationAsRead, - RemoveUserFromConversation, - RenameGroupConversation, - ResetConversationUniverse, - SendGameLinkMessageOptions, - SendMessageOptions, - SetConversationUniverse, - StartCloudEditConversation, - StartGroupConversation, - StartOneToOneConversation, - UpdateUserTypingStatus + ChatAddUsersToConversation, + ChatGetChatSettings, + ChatMarkConversationsSeen, + ChatMarkConversationMessagesRead, + ChatRemoveUserFromConversation, + ChatRenameGroupConversation, + ChatResetConversationUniverse, + ChatSendGameLinkMessageOptions, + ChatSendMessageOptions, + ChatSetConversationUniverse, + ChatStartCloudEditConversation, + ChatStartGroupConversation, + ChatStartOneToOneConversation, + ChatUpdateUserTypingStatus } from "../../apis/ChatAPI"; import { ChatConversation, @@ -24,21 +24,21 @@ import { export default class ChatManager { public client: Client; - constructor (client: Client) { + constructor(client: Client) { this.client = client; } - getSettings (): Promise { + getSettings(): Promise { return this.client.apis.chatAPI.getChatSettings(); } - getConversation (conversationId: number): Promise { + getConversation(conversationId: number): Promise { return this.getConversations([conversationId]).then( (data) => data[0] || null ); } - getConversationMessages ( + getConversationMessages( conversationId: number, amount = 100, startMessageId?: string @@ -54,13 +54,13 @@ export default class ChatManager { ); } - getUnreadConversationsCount (): Promise { + getUnreadConversationsCount(): Promise { return this.client.apis.chatAPI .getUnreadConversationCount() .then((response) => response.count); } - getConversations (conversations: number[]): Promise { + getConversations(conversations: number[]): Promise { return this.client.apis.chatAPI .getConversations({ conversationIds: conversations @@ -73,55 +73,55 @@ export default class ChatManager { ); } - addUsersToConversation ( + addUsersToConversation( conversation: number, users: number[] - ): Promise { + ): Promise { return this.client.apis.chatAPI.addUsersToConversation({ conversationId: conversation, participantUserIds: users }); } - markMessageRead ( + markMessageRead( conversation: number, id: string - ): Promise { + ): Promise { return this.client.apis.chatAPI.markConversationMessagesRead({ conversationId: conversation, endMessageId: id }); } - markConversationsRead ( + markConversationsRead( conversations: number[] - ): Promise { + ): Promise { return this.client.apis.chatAPI.markConversationsSeen({ conversationsToMarkSeen: conversations }); } - removeUserFromConversation ( + removeUserFromConversation( conversation: number, user: number - ): Promise { + ): Promise { return this.client.apis.chatAPI.removeUserFromConversation({ conversationId: conversation, participantUserId: user }); } - renameGroupConversation ( + renameGroupConversation( conversation: number, name: string - ): Promise { + ): Promise { return this.client.apis.chatAPI.renameGroupConversation({ conversationId: conversation, newTitle: name }); } - getUnreadMessagesInConversations ( + getUnreadMessagesInConversations( conversations: number[], amount = 100 ): Promise { @@ -142,7 +142,7 @@ export default class ChatManager { ); } - getLatestMessagesInConversations ( + getLatestMessagesInConversations( conversations: number[], amount = 100 ): Promise { @@ -163,68 +163,68 @@ export default class ChatManager { ); } - resetConversationUniverse ( + resetConversationUniverse( conversation: number - ): Promise { + ): Promise { return this.client.apis.chatAPI.resetConversationUniverse({ conversationId: conversation }); } - sendGameLinkMessage ( - options: SendGameLinkMessageOptions + sendGameLinkMessage( + options: ChatSendGameLinkMessageOptions ): Promise { return this.client.apis.chatAPI .sendGameLinkMessage(options) .then((response) => new ChatMessageSent(response, this.client)); } - sendMessage (options: SendMessageOptions): Promise { + sendMessage(options: ChatSendMessageOptions): Promise { return this.client.apis.chatAPI .sendMessage(options) .then((response) => new ChatMessageSent(response, this.client)); } - setConversationUniverse ( + setConversationUniverse( conversation: number, universe: number - ): Promise { + ): Promise { return this.client.apis.chatAPI.setConversationUniverse({ conversationId: conversation, universeId: universe }); } - startCloudEditConversation ( + startCloudEditConversation( placeId: number - ): Promise { + ): Promise { return this.client.apis.chatAPI.startCloudEditConversation({ placeId }); } - startGroupConversation ( + startGroupConversation( title: string, users: number[] - ): Promise { + ): Promise { return this.client.apis.chatAPI.startGroupConversation({ participantUserIds: users, title }); } - startOneToOneConversation ( + startOneToOneConversation( userId: number - ): Promise { + ): Promise { return this.client.apis.chatAPI.startOneToOneConversation({ participantUserId: userId }); } - updateTypingStatus ( + updateTypingStatus( conversation: number, isTyping = true - ): Promise { + ): Promise { return this.client.apis.chatAPI.updateUserTypingStatus({ conversationId: conversation, isTyping diff --git a/src/index.ts b/src/index.ts index 4e379cccd..9d14c9dbd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,973 +1,45 @@ export { default as Client } from "./client"; +export const test = true; -export type { - UserAccountBirthdate, - UserAccountDescription, - UserAccountGender, - UserAccountMetaData, - UserAccountOwnPromotionChannels, - UserAccountPromotionChannels, - UserAccountRobloxBadge, - UserAccountRobloxBadges, - UserAccountSetStarCodeAffiliate, - UserAccountStarCodeAffiliate, - UserAccountXboxConsecutiveLoginDays -} from "./client/apis/AccountInformationAPI"; -export type { - AccountSettingsAppChatPrivacy, - AccountSettingsBlockUser, - AccountSettingsGameChatPrivacy, - AccountSettingsGroup, - AccountSettingsGroups, - AccountSettingsInventoryPrivacy, - AccountSettingsMetaData, - AccountSettingsPrivacy, - AccountSettingsPrivacyInfo, - AccountSettingsPrivateMessagePrivacy, - AccountSettingsVisibilityPrivacy -} from "./client/apis/AccountSettingsAPI"; -export type { - AdConfigurationCreateSponsoredGameAd, - AdConfigurationSponsoredGame, - AdConfigurationSponsoredGames, - AdConfigurationStopSponsoredGameAd, - AdConfigurationTargetAgeBracket, - AdConfigurationTargetDeviceType, - AdConfigurationTargetGender, - AdConfigurationUniverse, - AdConfigurationUniverses -} from "./client/apis/AdConfigurationAPI"; -export type { - BaseAsset, - BaseAssetDeliveryOptions, - BaseAssetRaw, - GetAssetByAlias, - GetAssetByAliasOptions, - GetAssetByAssetId, - GetAssetByAssetIdOptions, - GetAssetByAssetVersionId, - GetAssetByAssetVersionIdOptions, - GetAssetByHash, - GetAssetByHashOptions, - GetAssetById, - GetAssetByIdOptions, - GetAssetByMarAssetHash, - GetAssetByMarAssetHashOptions, - GetAssetByUserAssetId, - GetAssetByUserAssetIdOptions, - GetAssetVersionByAssetId, - GetAssetVersionByAssetIdOptions, - GetBatchAssets, - GetBatchAssetsOptions -} from "./client/apis/AssetDeliveryAPI"; -export type { - ChangeUserPassword, - ChangeUserPasswordOptions, - ChangeUsername, - ChangeUsernameOptions, - GetAuthMetaData, - AuthMetaData, - AuthPin, - AuthTicket, - GetCredentialsVerificationStatus, - GetCredentialsVerificationStatusOptions, - GetCurrentPasswordStatus, - GetExistingUsernames, - GetExistingUsernamesOptions, - GetMetaData as GetAuthAPIMetaData, - GetPasswordResetMetaData, - GetPasswordResetMetaDataOptions, - GetRecoveryMetaData, - GetSAMLMetaData, - GetTwoStepVerificationMetaData as GetAuthTwoStepVerificationMetaData, - Login, - LoginOptions, - Logout, - RecoverUsernames, - RecoverUsernamesOptions, - RequestTwoStepVerification, - ResendTwoStepVerification, - ResendTwoStepVerificationOptions, - ResetPassword, - ResetPasswordOptions, - RevertAccount, - RevertAccountInfo, - RevertAccountInfoOptions, - RevertAccountOptions, - SAMLRequest, - SendCredentialsVerificationMessage, - SendCredentialsVerificationMessageOptions, - SendPasswordReset, - SendPasswordResetOptions, - SignUp, - SignUpOptions, - ValidatePassword, - ValidatePasswordOptions, - ValidateUsername, - ValidateUsernameOptions, - VerifyPasswordReset, - VerifyPasswordResetOptions, - VerifyTwoStepVerification, - VerifyTwoStepVerificationOptions -} from "./client/apis/AuthAPI"; -export type { - BodyColors, - BodyScales, - ColorPalette, - CreateOutfit, - CreateOutfitOptions, - DeleteOutfit, - DeleteOutfitOptions, - GetAvatarMetadata, - GetAvatarRules, - GetOutfit, - GetOutfitOptions, - GetRecentItems, - GetRecentItemsOptions, - GetUserAvatar, - GetUserAvatarOptions, - GetUserCurrentlyWearing, - GetUserCurrentlyWearingOptions, - GetUserOutfits, - GetUserOutfitsOptions, - RedrawThumbnail, - RemoveAssetFromAvatar, - RemoveAssetFromAvatarOptions, - Scale, - SetBodyColors, - SetBodyColorsOptions, - SetPlayerAvatarScales, - SetPlayerAvatarScalesOptions, - SetPlayerAvatarType, - SetPlayerAvatarTypeOptions, - SetPlayerAvatarWearingAssets, - SetPlayerAvatarWearingAssetsOptions, - UpdateOutfit, - UpdateOutfitOptions, - UserAvatar, - WearAssetOnAvatar, - WearAssetOnAvatarOptions, - WearOutfit, - WearOutfitOptions -} from "./client/apis/AvatarAPI"; -export type { - DeleteBadgeFromSelf, - DeleteBadgeFromSelfOptions, - DeleteBadgeFromUser, - DeleteBadgeFromUserOptions, - GetBadge, - GetBadgeOptions, - GetUniverseBadges, - GetUniverseBadgesOptions, - GetUserBadges, - GetUserBadgesAwardedDates, - GetUserBadgesAwardedDatesOptions, - GetUserBadgesOptions, - UpdateBadge, - UpdateBadgeOptions -} from "./client/apis/BadgesAPI"; -export type { BaseAPIRequestOptions } from "./client/apis/BaseAPI"; -export type { - GetDeveloperExchangeRate, - GetLatestLuobuDeveloperExchangeStatus, - GetLuobuDeveloperExchangeBalance, - GetLuobuDeveloperExchangeEligibility, - GetUserPayments, - GetUserPaymentsOptions, - GetXsollaIFrameToken, - GetXsollaIFrameTokenOptions, - IncrementCounterByAgent, - IncrementCounterByAgentOptions, - PurchaseAmazonProduct, - PurchaseAmazonProductOptions, - PurchaseAppleProduct, - PurchaseAppleProductOptions, - PurchaseGoogleProduct, - PurchaseGoogleProductOptions, - RedeemDigitalCode, - RedeemDigitalCodeOptions, - RedeemGameCard, - RedeemGameCardOptions, - RedeemPromoCode, - RedeemPromoCodeOptions, - ReverseGameCard, - ReverseGameCardOptions, - SendXsollaWebhook, - SendXsollaWebhookOptions, - SubmitLuobuDeveloperExchange, - SubmitLuobuDeveloperExchangeOptions, - ValidateAmazonProduct, - ValidateAmazonProductOptions, - ValidateAppleProduct, - ValidateAppleProductOptions, - ValidateGoogleProduct, - ValidateGoogleProductOptions -} from "./client/apis/BillingAPI"; -export type { - FavoriteAsset, - FavoriteAssetOptions, - FavoriteBundle, - FavoriteBundleOptions, - GetAppStoreExclusiveBundles, - GetAppStoreExclusiveBundlesOptions, - GetAssetBundles, - GetAssetBundlesOptions, - GetAssetFavoriteCount, - GetAssetFavoriteCountOptions, - GetAssetToCategory, - GetAssetToSubCategory, - GetBundleDetails, - GetBundleDetailsOptions, - GetBundleFavoriteCount, - GetBundleFavoriteCountOptions, - GetBundleRecommendationsByBundleId, - GetBundleRecommendationsByBundleIdOptions, - GetCategories, - GetMultiBundleDetails, - GetMultiBundleDetailsOptions, - GetSelfFavoriteBundle, - GetSelfFavoriteBundleOptions, - GetSubCategories, - GetUserBundles, - GetUserBundlesByType, - GetUserBundlesByTypeOptions, - GetUserBundlesOptions, - GetUserFavoriteAsset, - GetUserFavoriteAssetOptions, - ProductDetails, - RemoveFavoriteBundle, - RemoveFavoriteBundleOptions, - RemoveSelfAssetFavorite, - RemoveSelfAssetFavoriteOptions, - UnpackBundle, - UnpackBundleOptions -} from "./client/apis/CatalogAPI"; -export type { - AddUsersToConversation, - AddUsersToConversationOptions, - GetChatSettings, - GetConversationMessages, - GetConversationMessagesOptions, - GetConversations, - GetConversationsOptions, - GetMetaData as GetChatAPIMetaData, - GetMultiLatestConversationMessages, - GetMultiLatestConversationMessagesOptions, - GetRolloutSettings, - GetRolloutSettingsOptions, - GetUnreadConversationCount, - GetUnreadMessagesInConversations, - GetUnreadMessagesInConversationsOptions, - GetUserConversations, - GetUserConversationsOptions, - MarkConversationsAsSeen, - MarkConversationsAsSeenOptions, - MarkMessageInConversationAsRead, - MarkMessageInConversationAsReadOptions, - RemoveUserFromConversation, - RemoveUserFromConversationOptions, - RenameGroupConversation, - RenameGroupConversationOptions, - ResetConversationUniverse, - ResetConversationUniverseOptions, - SendGameLinkMessage, - SendGameLinkMessageOptions, - SendMessage as SendChatMessage, - SendMessageOptions as SendChatMessageOptions, - SetConversationUniverse, - SetConversationUniverseOptions, - StartCloudEditConversation, - StartCloudEditConversationOptions, - StartGroupConversation, - StartGroupConversationOptions, - StartOneToOneConversation, - StartOneToOneConversationOptions, - UpdateUserTypingStatus, - UpdateUserTypingStatusOptions -} from "./client/apis/ChatAPI"; -export type { - GetContactsMetaData, - GetUsersTags, - GetUsersTagsOptions, - SetPendingUserTag, - SetPendingUserTagOptions, - SetUserTag, - SetUserTagOptions -} from "./client/apis/ContactsAPI"; -export type { - UploadDataOptions, - UploadDataResult -} from "./client/apis/DataAPI"; -export type { - ActivateUniverse, - ActivateUniverseOptions, - CreateDeveloperProduct, - CreateDeveloperProductOptions, - CreateUniverseAlias, - CreateUniverseAliasOptions, - DeactivateUniverse, - DeactivateUniverseOptions, - DeleteUniverseAlias, - DeleteUniverseAliasOptions, - DownloadUniverseStatisticsReportByTime, - DownloadUniverseStatisticsReportByTimeOptions, - FilterPublishGameNotification, - FilterPublishGameNotificationOptions, - GenerateUniverseStatisticReportsByTime, - GenerateUniverseStatisticReportsByTimeOptions, - GetAssetsVoteInformation, - GetAssetsVoteInformationOptions, - GetGameTemplates, - GetGameUpdatesHistory, - GetGameUpdatesHistoryOptions, - GetGroupUniverses, - GetGroupUniversesOptions, - GetNotificationsStatisticReports, - GetPlaceCompatibilities, - GetPlaceCompatibilitiesOptions, - GetPlaceStatisticsByType, - GetPlaceStatisticsByTypeOptions, - GetPluginsById, - GetPluginsByIdOptions, - GetSelfGroupsAccess, - GetSelfTeamCreateUniversesAccess, - GetSelfTeamCreateUniversesAccessOptions, - GetSelfUniverses, - GetSelfUniversesOptions, - GetStudioData, - GetStudioDataOptions, - GetUniverse, - GetUniverseConfiguration, - GetUniverseConfigurationOptions, - GetUniverseOptions, - GetUniversePermissions, - GetUniversePermissionsOptions, - GetUniversePlaces, - GetUniversePlacesOptions, - GetUniverseStatisticsReportByTime, - GetUniverseStatisticsReports, - GetUniverseStatisticsReportsByTimeOptions, - GetUniverseStatisticsReportsOptions, - GetUniverseTeamCreateSettings, - GetUniverseTeamCreateSettingsOptions, - GetUniverseVIPServersConfiguration, - GetUniverseVIPServersConfigurationOptions, - GetUsersInUniverseTeamCreate, - GetUsersInUniverseTeamCreateOptions, - MultiGetUniverses, - MultiGetUniversesOptions, - MultiGetUniversesPermissions, - MultiGetUniversesPermissionsOptions, - PublishGameNotification, - PublishGameNotificationOptions, - RemoveUserFromUniverseTeamCreate, - RemoveUserFromUniverseTeamCreateOptions, - SearchToolbox, - SearchToolboxOptions, - SearchUniverseData, - SearchUniverses, - SearchUniversesOptions, - SetStudioData, - SetStudioDataOptions, - UpdateDeveloperProduct, - UpdateDeveloperProductOptions, - UpdatePlaceConfiguration, - UpdatePlaceConfigurationOptions, - UpdatePlugin, - UpdatePluginOptions, - UpdateUniverseAlias, - UpdateUniverseAliasOptions, - UpdateUniverseConfiguration, - UpdateUniverseConfigurationOptions, - UpdateUniverseTeamCreateSettings, - UpdateUniverseTeamCreateSettingsOptions -} from "./client/apis/DevelopAPI"; -export type { - GetAssetResaleData, - GetAssetResaleDataOptions, - GetAssetResellers, - GetAssetResellersOptions, - GetDeveloperExchangeAbility, - GetDeveloperExchangeHelp, - GetDeveloperExchangeInfo, - GetDeveloperExchangeInfoOptions, - GetGroupCurrency, - GetGroupCurrencyOptions, - GetGroupRevenueSummaryInTimeFrame, - GetGroupRevenueSummaryInTimeFrameOptions, - GetGroupTransactions, - GetGroupTransactionsOptions, - GetResaleTaxRate, - GetSelfCurrency, - GetSelfCurrencyOptions, - GetSelfRevenueSummaryInTimeFrame, - GetSelfRevenueSummaryInTimeFrameOptions, - GetSelfTransactions, - GetSelfTransactionsOptions, - GetUserResellableAssetCopies, - GetUserResellableAssetCopiesOptions, - SetAssetCopies, - SetAssetCopiesOptions, - SubmitDeveloperExchange, - SubmitDeveloperExchangeOptions -} from "./client/apis/EconomyAPI"; -export type { - GetUniverseStats, - GetUniverseStatsOptions -} from "./client/apis/EconomyCreatorStatsAPI"; -export type { - GetUniversePayoutHistory, - GetUniversePayoutHistoryOptions -} from "./client/apis/EngagementPayoutsAPI"; -export type { - FollowUniverse, - FollowUniverseOptions, - GetUserFollowedUniverses, - GetUserFollowedUniversesOptions, - GetUserFollowingUniverseStatus, - GetUserFollowingUniverseStatusOptions, - UnFollowUniverse, - UnFollowUniverseOptions -} from "./client/apis/FollowingsAPI"; -export type { - CheckSessionHealth, - DeclineAllFriendRequests, - DeleteQRCodeSession, - DeleteSession, - FindFriendByCode, - FindFriendByCodeOptions, - FollowUser as FriendsAPIFollowUser, - FollowUserOptions as FriendsAPIFollowUserOptions, - GetMetaData, - GetMetaDataOptions, - GetOrCreateNearbySession, - GetOrCreateQRCodeSession, - GetSelfFriendRequests, - GetSelfFriendRequestsCount, - GetSelfFriendRequestsOptions, - GetSelfFriendsCount, - GetSelfRecommendedUsers, - GetUserFollowers, - GetUserFollowersCount, - GetUserFollowersCountOptions, - GetUserFollowersOptions, - GetUserFollowing, - GetUserFollowingCount, - GetUserFollowingCountOptions, - GetUserFollowingOptions, - GetUserFriends as FriendsAPIGetUserFriends, - GetUserFriendsOptions as FriendsAPIGetUserFriendsOptions, - GetUserFriendsWithStatuses, - GetUserFriendsWithStatusesOptions, - GetUserOnlineFriends, - GetUserOnlineFriendsOptions, - RedeemNearbyFriendCode, - RedeemNearbyFriendCodeOptions, - RedeemQRCode, - RedeemQRCodeOptions, - SendFriendRequest as FriendsAPISendFriendRequest, - SendFriendRequestOptions as FriendsAPISendFriendRequestOptions, - UnFollowUser, - UnFollowUserOptions, - UnfriendUser as FriendsAPIUnfriendUser, - UnfriendUserOptions as FriendsAPIUnfriendUserOptions -} from "./client/apis/FriendsAPI"; -export type { - GetGameAutomaticTranslationResults, - GetGameAutomaticTranslationResultsOptions, - GetGameInfo, - GetGameInfoHistory, - GetGameInfoHistoryOptions, - GetGameInfoOptions, - GetGameSourceLanguage, - GetGameSourceLanguageOptions, - GetGameSupportedLanguages, - GetGameSupportedLanguagesOptions, - GetNameDescriptionMetaData, - GetSupportedLanguagesMetaData, - ModifyGameSupportedLanguages, - ModifyGameSupportedLanguagesOptions, - ToggleAutomaticGameTranslation, - ToggleAutomaticGameTranslationOptions, - UpdateGameInfo, - UpdateGameInfoOptions, - UpdateGameSourceLanguage, - UpdateGameSourceLanguageOptions -} from "./client/apis/GameInternationalizationAPI"; -export type { - CanSelfInviteUserToVIPServer, - CanSelfInviteUserToVIPServerOptions, - CreateVIPServer, - CreateVIPServerOptions, - GameGamesProductInfo, - GameServer, - GetGameFavoriteCount, - GetGameFavoriteCountOptions, - GetGameGamePasses, - GetGameGamePassesOptions, - GetGameRecommendationsByAlgorithm, - GetGameRecommendationsByAlgorithmOptions, - GetGameRecommendationsByGame, - GetGameRecommendationsByGameOptions, - GetGameServersByType, - GetGameServersByTypeOptions, - GetGameSorts, - GetGameSortsOptions, - GetGameUniverses, - GetGameUniversesOptions, - GetGamesProductInfoOptions, - GetGamesVotes, - GetGamesVotesOptions, - GetSelfUniverseVoteStatus, - GetSelfUniverseVoteStatusOptions, - GetVIPServer, - GetVIPServerOptions, - IsGameFavorited, - IsGameFavoritedOptions, - ListGames, - ListGamesOptions, - MultiGetGameUniversesPlayability, - MultiGetGameUniversesPlayabilityOptions, - MultiGetPlaces, - MultiGetPlacesOptions, - SetSelfGameVote, - SetSelfGameVoteOptions, - ToggleGameFavorite, - ToggleGameFavoriteOptions, - UpdateVIPServer, - UpdateVIPServerOptions, - UpdateVIPServerPermissions, - UpdateVIPServerPermissionsOptions, - UpdateVIPServerSubscription, - UpdateVIPServerSubscriptionOptions -} from "./client/apis/GamesAPI"; -export type { - AcceptFriendRequest, - AcceptFriendRequestOptions, - AwardBadge, - AwardBadgeOptions, - BlockUser, - BlockUserOptions, - DeclineFriendRequest, - DeclineFriendRequestOptions, - FollowUser, - FollowUserOptions, - GetAssetVersionOptions, - GetAssetVersions, - GetBalance, - GetDeviceInfo, - GetGamePassProductInfo, - GetGamePassProductInfoOptions, - GetGroup as GeneralAPIGetGroup, - GetGroupAllies, - GetGroupAlliesOptions, - GetGroupEnemies, - GetGroupEnemiesOptions, - GetGroupOptions as GeneralAPIGetGroupOptions, - GetIncomingItems, - GetProductInfo, - GetProductInfoOptions, - GetUserById as GeneralAPIGetUserById, - GetUserByIdOptions as GeneralAPIGetUserByIdOptions, - GetUserByUsername, - GetUserByUsernameOptions, - GetUserFriends, - GetUserFriendsCount, - GetUserFriendsCountOptions, - GetUserFriendsOptions, - GetUserGroups as GeneralAPIGetUserGroups, - GetUserGroupsOptions as GeneralAPIGetUserGroupsOptions, - IsUserFollowing, - IsUserFollowingOptions, - SendFriendRequest, - SendFriendRequestOptions, - UnblockUser, - UnblockUserOptions, - UnfollowUser, - UnfollowUserOptions, - UnfriendUser, - UnfriendUserOptions, - UserCanManageAsset, - UserCanManageAssetOptions, - UserOwnsAsset, - UserOwnsAssetOptions -} from "./client/apis/GeneralAPI"; -export type { - AcceptJoinRequest, - AcceptJoinRequestOptions, - AcceptJoinRequests, - AcceptJoinRequestsOptions, - AcceptRelationshipRequest, - AcceptRelationshipRequestOptions, - AcceptRelationshipRequests, - AcceptRelationshipRequestsOptions, - ChangeOwner, - ChangeOwnerOptions, - ClaimGroup, - ClaimGroupOptions, - CreateGroup, - CreateGroupOptions, - CreateRelationship, - CreateRelationshipOptions, - CreateRole, - CreateRoleOptions, - CreateWallPost, - CreateWallPostOptions, - DeclineJoinRequest, - DeclineJoinRequestOptions, - DeclineJoinRequests, - DeclineJoinRequestsOptions, - DeclineRelationshipRequest, - DeclineRelationshipRequestOptions, - DeclineRelationshipRequests, - DeclineRelationshipRequestsOptions, - DeleteRelationship, - DeleteRelationshipOptions, - DeleteRole, - DeleteRoleOptions, - DeleteSocialLink, - DeleteSocialLinkOptions, - DeleteWallPost, - DeleteWallPostOptions, - DeleteWallPostsByUser, - DeleteWallPostsByUserOptions, - GetAllRolesPermissions, - GetAllRolesPermissionsOptions, - GetGroup, - GetGroupAuditLogs, - GetGroupAuditLogsOptions, - GetGroupConfigurationMetaData, - GetGroupOptions, - GetGroupPayouts, - GetGroupPayoutsOptions, - GetGroupRelationships, - GetGroupRelationshipsOptions, - GetGroupRoles, - GetGroupRolesOptions, - GetGroupSearchMetaData, - GetGroupSettings, - GetGroupSettingsOptions, - GetGroupsMetaData, - GetGuestPermissions, - GetGuestPermissionsOptions, - GetJoinRequest, - GetJoinRequestOptions, - GetJoinRequests, - GetJoinRequestsOptions, - GetMembers, - GetMembersOptions, - GetMembersWithRole, - GetMembersWithRoleOptions, - GetMultiGroups, - GetMultiGroupsOptions, - GetRelationshipRequests, - GetRelationshipRequestsOptions, - GetRolePermissions, - GetRolePermissionsOptions, - GetRolesByIds, - GetRolesByIdsOptions, - GetSelfGroupMembership, - GetSelfGroupMembershipOptions, - GetSelfPendingGroupJoins, - GetSocialLinks, - GetSocialLinksOptions, - GetUserGroups, - GetUserGroupsOptions, - GetUserPrimaryGroup, - GetUserPrimaryGroupOptions, - GetWallPosts, - GetWallPostsOptions, - JoinGroup, - JoinGroupOptions, - KickMember, - KickMemberOptions, - PayoutMembers, - PayoutMembersOptions, - PostSocialLink, - PostSocialLinkOptions, - RemovePrimaryGroup, - SearchGroups, - SearchGroupsByKeyword, - SearchGroupsByKeywordOptions, - SearchGroupsOptions, - SetPrimaryGroup, - SetPrimaryGroupOptions, - UpdateGroupDescription, - UpdateGroupDescriptionOptions, - UpdateGroupIcon, - UpdateGroupIconOptions, - UpdateGroupSettings, - UpdateGroupSettingsOptions, - UpdateGroupStatus, - UpdateGroupStatusOptions, - UpdateMember, - UpdateMemberOptions, - UpdateRecurringPayouts, - UpdateRecurringPayoutsOptions, - UpdateRole, - UpdateRoleOptions, - UpdateRolePermissions, - UpdateRolePermissionsOptions, - UpdateSocialLink, - UpdateSocialLinkOptions -} from "./client/apis/GroupsAPI"; -export type { - GetAssetOwners, - GetAssetOwnersOptions, - GetPackageAssets, - GetPackageAssetsOptions, - GetUserCollectibles, - GetUserCollectiblesOptions, - GetUserInventory, - GetUserInventoryByAssetTypeId, - GetUserInventoryByAssetTypeIdOptions, - GetUserInventoryOptions, - GetUserItemsByTypeAndTargetId, - GetUserItemsByTypeAndTargetIdOptions -} from "./client/apis/InventoryAPI"; -export type { - CreateItemTag, - CreateItemTagOptions, - DeleteItemTag, - DeleteItemTagOptions, - GetCreatedAssets, - GetCreatedAssetsOptions, - GetItemTagsByItemIds, - GetItemTagsByItemIdsOptions, - GetItemTagsMetaData, - GetMultiCreatedAssetDetails, - GetMultiCreatedAssetDetailsOptions, - GetTagsByTagIds, - GetTagsByTagIdsOptions, - SearchTags, - SearchTagsOptions -} from "./client/apis/ItemConfigurationAPI"; -export type { - GetCountryRegions, - GetCountryRegionsOptions, - GetLocales, - GetLocalesOptions, - GetLocusSupportedLocales, - GetSupportedLocales, - GetUserLocale, - SetUserLocale, - SetUserLocaleOptions -} from "./client/apis/LocaleAPI"; -export type { - GetThumbnailsMetaData, - ReportBundleLoad as RecordBundleLoad, - ReportBundleLoadOptions as RecordBundleLoadOptions, - RecordThumbnailLoad, - RecordThumbnailLoadOptions -} from "./client/apis/MetricsAPI"; -export type { - AllowNotificationSource, - AllowNotificationSourceOptions, - AllowNotificationsDestination, - AllowNotificationsDestinationOptions, - ClearUnreadStreamNotifications, - DeregisterAllDevices, - DeregisterCurrentDevice, - DisallowNotificationSource, - DisallowNotificationSourceOptions, - DisallowNotificationsDestination, - DisallowNotificationsDestinationOptions, - GetChromeNotificationsManifest, - GetCurrentNotificationDeviceDestination, - GetLatestUniverseUpdates, - GetLatestUniversesUpdatesOptions, - GetNotificationDestinations, - GetNotificationIds, - GetNotificationIdsOptions, - GetNotificationsMetaData, - GetNotificationsMetaDataOptions, - GetNotificationsSettings, - GetRealtimeNotificationsSettings, - GetRecentStreamNotifications, - GetRecentStreamNotificationsOptions, - GetStreamNotificationsMetaData, - GetStreamNotificationsPromptSettings, - GetStreamNotificationsUnreadCount, - MarkNotificationCategoryRead, - MarkNotificationCategoryReadOptions, - MarkNotificationInteraction, - MarkNotificationInteractionOptions, - MarkNotificationRead, - MarkNotificationReadOptions, - MarkStreamNotificationInteracted, - MarkStreamNotificationInteractedOptions, - RegisterAmazonAndroid, - RegisterAmazonAndroidOptions, - RegisterAndroidNative, - RegisterAndroidNativeOptions, - RegisterAndroidTencentService, - RegisterAndroidTencentServiceOptions, - RegisterChrome, - RegisterChromeOptions, - RegisterFirefox, - RegisterFirefoxOptions, - RegisterIOSNative, - RegisterIOSNativeOptions, - SendGameUpdateNotificationInteracted, - SendGameUpdateNotificationInteractedOptions, - SendGameUpdateNotificationRead, - SendGameUpdateNotificationReadOptions, - SuppressStreamNotificationsPrompt, - UpdateNotificationDestinationSettings, - UpdateNotificationDestinationSettingsOptions, - UpdateNotificationSettings, - UpdateNotificationSettingsOptions -} from "./client/apis/NotificationsAPI"; -export type { - GetUserProfileHeader, - GetUserProfileHeaderOptions -} from "./client/apis/OtherAPI"; -export type { - PremiumUpsellCheck, - PremiumUpsellCheckOptions, - ValidateUserMembership, - ValidateUserMembershipOptions -} from "./client/apis/PremiumFeaturesAPI"; -export type { - GetUsersPresences, - GetUsersPresencesOptions, - RegisterAppPresence, - RegisterAppPresenceOptions -} from "./client/apis/PresenceAPI"; -export type { - ArchiveMessages, - ArchiveMessagesOptions, - GetAnnouncements, - GetAnnouncementsMetaData, - GetMessage, - GetMessageOptions, - GetMessages, - GetMessagesOptions, - GetUnreadMessagesCount, - MarkMessagesRead, - MarkMessagesReadOptions, - MarkMessagesUnread, - MarkMessagesUnreadOptions, - SendMessage, - SendMessageOptions, - UnArchiveMessages, - UnArchiveMessagesOptions -} from "./client/apis/PrivateMessagesAPI"; -export type { - PublishAudio, - PublishAudioOptions, - PublishBadgeIcon, - PublishBadgeIconOptions, - PublishGamePassIcon, - PublishGamePassIconOptions, - UploadAssets, - UploadAssetsOptions, - UploadGameThumbnail, - UploadGameThumbnailOptions, - UploadPluginIcon, - UploadPluginIconOptions, - VerifyAudio, - VerifyAudioOptions -} from "./client/apis/PublishAPI"; -export type { - GetAssetsThumbnails, - GetAssetsThumbnailsOptions, - GetBadgesIcons, - GetBadgesIconsOptions, - GetBatchImages, - GetBatchImagesOptions, - GetBundlesThumbnails, - GetBundlesThumbnailsOptions, - GetDeveloperProductsIcons, - GetDeveloperProductsIconsOptions, - GetGamePassesIcons, - GetGamePassesIconsOptions, - GetGroupsIcons, - GetGroupsIconsOptions, - GetUniverseThumbnails, - GetUniverseThumbnailsOptions, - GetUniversesRootPlaceThumbnails, - GetUniversesRootPlaceThumbnailsOptions, - GetUniversesThumbnails, - GetUniversesThumbnailsOptions, - GetUsersAvatarBustImages, - GetUsersAvatarBustImagesOptions, - GetUsersAvatarHeadShotsImages, - GetUsersAvatarHeadShotsImagesOptions, - GetUsersFullBodyAvatarImages, - GetUsersFullBodyAvatarImagesOptions, - GetUsersOutfitsImages, - GetUsersOutfitsImagesOptions -} from "./client/apis/ThumbnailsAPI"; -export type { - AcceptTrade, - AcceptTradeOptions, - CanSelfTradeWithUser, - CanSelfTradeWithUserOptions, - CounterTrade, - CounterTradeOptions, - DeclineTrade, - DeclineTradeOptions, - GetTrade, - GetTradeOptions, - GetTradesByStatusType, - GetTradesByStatusTypeOptions, - GetTradesCountByStatusType, - GetTradesCountByStatusTypeOptions, - GetTradesMetaData, - SendTrade, - SendTradeOptions -} from "./client/apis/TradesAPI"; -export type { - GetGameRoleAssignees, - GetGameRoleAssigneesOptions, - GetSelfGameRoles, - GetSelfGameRolesOptions, - GetSelfGamesAccessByRole, - GetSelfGamesAccessByRoleOptions, - UpdateUser, - UpdateUserAccess -} from "./client/apis/TranslationRolesAPI"; -export type { - AuthenticatorDisable, - AuthenticatorDisableOptions, - AuthenticatorEnable, - AuthenticatorEnableOptions, - AuthenticatorVerify, - AuthenticatorVerifyOptions, - AuthenticatorVerifySetup, - AuthenticatorVerifySetupOptions, - EmailDisable, - EmailDisableOptions, - EmailEnable, - EmailEnableOptions, - EmailSendCode, - EmailSendCodeOptions, - EmailVerify, - EmailVerifyOptions, - GetTwoStepConfiguration, - GetTwoStepConfigurationOptions, - GetTwoStepVerificationMetaData, - GetTwoStepVerificationMetaDataOptions -} from "./client/apis/TwoStepVerificationAPI"; -export type { - GetSelfAuthenticatedUserInformation, - GetUserById, - GetUserByIdOptions, - GetUserStatus, - GetUserStatusOptions, - GetUsersByUserIds, - GetUsersByUserIdsOptions, - GetUsersByUsernames, - GetUsersByUsernamesOptions, - SearchUsers, - SearchUsersOptions, - SetSelfDisplayName, - SetSelfDisplayNameOptions, - UpdateSelfStatus, - UpdateSelfStatusOptions, - ValidateDisplayNameExistingUser, - ValidateDisplayNameExistingUserOptions, - ValidateDisplayNameNewUser, - ValidateDisplayNameNewUserOptions -} from "./client/apis/UsersAPI"; +// Generic Types +export * from "./types/GenericTypes"; +export * from "./types/GenericOptionTypes"; + +// APIs +export * from "./client/apis/AccountInformationAPI"; +export * from "./client/apis/AccountSettingsAPI"; +export * from "./client/apis/AdConfigurationAPI"; +export * from "./client/apis/AssetDeliveryAPI"; +export * from "./client/apis/AuthAPI"; +export * from "./client/apis/AvatarAPI"; +export * from "./client/apis/BadgesAPI"; +export * from "./client/apis/BaseAPI"; +export * from "./client/apis/BillingAPI"; +export * from "./client/apis/CatalogAPI"; +export * from "./client/apis/ChatAPI"; +export * from "./client/apis/ContactsAPI"; +export * from "./client/apis/DataAPI"; +export * from "./client/apis/DevelopAPI"; +export * from "./client/apis/EconomyAPI"; +export * from "./client/apis/EconomyCreatorStatsAPI"; +export * from "./client/apis/EngagementPayoutsAPI"; +export * from "./client/apis/FollowingsAPI"; +export * from "./client/apis/FriendsAPI"; +export * from "./client/apis/GameInternationalizationAPI"; +export * from "./client/apis/GamesAPI"; +export * from "./client/apis/GeneralAPI"; +export * from "./client/apis/GroupsAPI"; +export * from "./client/apis/InventoryAPI"; +export * from "./client/apis/ItemConfigurationAPI"; +export * from "./client/apis/LocaleAPI"; +export * from "./client/apis/MetricsAPI"; +export * from "./client/apis/NotificationsAPI"; +export * from "./client/apis/OtherAPI"; +export * from "./client/apis/PremiumFeaturesAPI"; +export * from "./client/apis/PresenceAPI"; +export * from "./client/apis/PrivateMessagesAPI"; +export * from "./client/apis/PublishAPI"; +export * from "./client/apis/ThumbnailsAPI"; +export * from "./client/apis/TranslationRolesAPI"; +export * from "./client/apis/TwoStepVerificationAPI"; +export * from "./client/apis/UsersAPI"; diff --git a/src/structures/Asset.ts b/src/structures/Asset.ts index 46c060f21..672cb6238 100644 --- a/src/structures/Asset.ts +++ b/src/structures/Asset.ts @@ -2,7 +2,7 @@ import Client from "../client"; import { CreatorType } from "../util/constants"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; import { PartialUser, PartialUserOptions } from "./User"; -import { ProductDetails } from "../client/apis/CatalogAPI"; +import { CatalogProductDetails } from "../client/apis/CatalogAPI"; import { PartialGroup, PartialGroupOptions } from "./Group"; export interface Structures { @@ -43,7 +43,7 @@ export class AssetVersion { public created: Date; public updated: Date; - constructor (data: any, client: Client) { + constructor(data: any, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -58,14 +58,14 @@ export class AssetVersion { }, this.client ); - this.createdForUniverse = data.CreatingUniverseId ? - new structures.PartialGameUniverse( - { - id: data.CreatingUniverseId - }, - client - ) : - null; + this.createdForUniverse = data.CreatingUniverseId + ? new structures.PartialGameUniverse( + { + id: data.CreatingUniverseId + }, + client + ) + : null; this.created = new Date(data.Created); this.updated = new Date(data.Updated); } @@ -87,7 +87,7 @@ export interface BundleOptions { name: string; type: string; }; - product: ProductDetails; + product: CatalogProductDetails; } export class Bundle { @@ -116,7 +116,7 @@ export class Bundle { }; }; - constructor (data: BundleOptions, client: Client) { + constructor(data: BundleOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -131,25 +131,25 @@ export class Bundle { type: itemData.type })); this.creatorType = - data.creator.type.toLowerCase() === "group" ? - CreatorType.GROUP : - CreatorType.USER; + data.creator.type.toLowerCase() === "group" + ? CreatorType.GROUP + : CreatorType.USER; this.creator = - this.creatorType === CreatorType.USER ? - new structures.PartialUser( - { - id: data.creator.id, - name: data.creator.name - }, - client - ) : - new structures.PartialGroup( - { - id: data.creator.id, - name: data.creator.name - }, - client - ); + this.creatorType === CreatorType.USER + ? new structures.PartialUser( + { + id: data.creator.id, + name: data.creator.name + }, + client + ) + : new structures.PartialGroup( + { + id: data.creator.id, + name: data.creator.name + }, + client + ); this.product = { id: data.product.id, type: data.product.type, @@ -185,7 +185,7 @@ export class CollectibleAsset { public assetStock: number | null; public buildersClubMembershipType: number; - constructor (data: CollectibleAssetOptions, client: Client) { + constructor(data: CollectibleAssetOptions, client: Client) { this.client = client; this.assetId = data.assetId; this.userAssetId = data.userAssetId; @@ -219,7 +219,7 @@ export class CursorPage { public data: T[]; public method: any; - constructor ( + constructor( client: Client, options: CursorPageOptions, response: CursorPageResponse, @@ -236,7 +236,7 @@ export class CursorPage { this.method = method; } - getNext (newOptions?: CursorPageOptions): Promise> { + getNext(newOptions?: CursorPageOptions): Promise> { if (!this.cursors.next) { throw new Error( "Attempted to iterate to next page, but no cursor was presented for the next page" @@ -252,7 +252,7 @@ export class CursorPage { return this.method(options); } - getPrevious (newOptions?: CursorPageOptions): Promise> { + getPrevious(newOptions?: CursorPageOptions): Promise> { if (!this.cursors.previous) { throw new Error( "Attempted to iterate to previous page, but no cursor was presented for the previous page" @@ -319,7 +319,7 @@ export class Product { public remaining: number | null; public minimumMembershipLevel: number; - constructor (data: ProductOptions, client: Client) { + constructor(data: ProductOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -386,7 +386,7 @@ export class Trade { public active: boolean; public status: string; - constructor (data: TradeOptions, client: Client) { + constructor(data: TradeOptions, client: Client) { const structures = retrieveStructures(); this.client = client; diff --git a/src/structures/Chat.ts b/src/structures/Chat.ts index 6b100c602..af7f5ef6f 100644 --- a/src/structures/Chat.ts +++ b/src/structures/Chat.ts @@ -2,8 +2,8 @@ import Client from "../client"; import { PartialUser, PartialUserOptions } from "./User"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; import { - SendGameLinkMessageOptions, - SendMessageOptions + ChatSendGameLinkMessageOptions, + ChatSendMessageOptions } from "../client/apis/ChatAPI"; import { PartialGroup, PartialGroupOptions } from "./Group"; @@ -62,7 +62,7 @@ export class ChatConversation { public lastUpdated: Date; public universe: PartialGameUniverse | null; - constructor (data: ChatConversationOptions, client: Client) { + constructor(data: ChatConversationOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -88,14 +88,14 @@ export class ChatConversation { ); this.type = data.conversationType; this.lastUpdated = new Date(data.lastUpdated); - this.universe = data.conversationUniverse ? - new structures.PartialGameUniverse( - { - id: data.conversationUniverse - }, - client - ) : - null; + this.universe = data.conversationUniverse + ? new structures.PartialGameUniverse( + { + id: data.conversationUniverse + }, + client + ) + : null; this.conversationTitle = { forViewer: data.conversationTitle.titleForViewer, isDefaultTitle: data.conversationTitle.isDefaultTitle @@ -103,57 +103,57 @@ export class ChatConversation { } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getMessages (amount = 100, startId?: string) { + getMessages(amount = 100, startId?: string) { return this.client.chat.getConversationMessages(this.id, amount, startId); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - addUsers (users: number[]) { + addUsers(users: number[]) { return this.client.chat.addUsersToConversation(this.id, users); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - removeUser (userId: number) { + removeUser(userId: number) { return this.client.chat.removeUserFromConversation(this.id, userId); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - markMessageRead (id: string) { + markMessageRead(id: string) { return this.client.chat.markMessageRead(this.id, id); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - markRead () { + markRead() { return this.client.chat.markConversationsRead([this.id]); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - rename (name: string) { + rename(name: string) { return this.client.chat.renameGroupConversation(this.id, name); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getUnreadMessages (amount = 100) { + getUnreadMessages(amount = 100) { return this.client.chat.getUnreadMessagesInConversations([this.id], amount); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - getLatestMessages (amount = 100) { + getLatestMessages(amount = 100) { return this.client.chat.getLatestMessagesInConversations([this.id], amount); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - resetUniverse () { + resetUniverse() { return this.client.chat.resetConversationUniverse(this.id); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - sendGameLinkMessage (options: SendGameLinkMessageOptions) { + sendGameLinkMessage(options: ChatSendGameLinkMessageOptions) { return this.client.chat.sendGameLinkMessage(options); } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - sendMessage (options: SendMessageOptions) { + sendMessage(options: ChatSendMessageOptions) { return this.client.chat.sendMessage(options); } } @@ -168,7 +168,7 @@ export class PartialChatConversation { public id: number; public title: string | null; - constructor (data: PartialChatConversationOptions, client: Client) { + constructor(data: PartialChatConversationOptions, client: Client) { this.client = client; this.id = data.id; this.title = data.title || null; @@ -208,7 +208,7 @@ export class ChatMessage { public decorators: string[]; public content: string; - constructor (data: ChatMessageOptions, client: Client) { + constructor(data: ChatMessageOptions, client: Client) { const structures = retrieveStructures(); this.client = client; @@ -246,7 +246,7 @@ export class ChatMessageSent { public result: "Success" | string; public status: string; - constructor (data: ChatMessageSentOptions, client: Client) { + constructor(data: ChatMessageSentOptions, client: Client) { this.client = client; this.id = data.messageId; this.content = data.content; diff --git a/src/structures/Game.ts b/src/structures/Game.ts index 8b52c7d44..ca482863d 100644 --- a/src/structures/Game.ts +++ b/src/structures/Game.ts @@ -2,8 +2,8 @@ import Client from "../client"; import { CreatorType, GameGenre, MorphAvatarType } from "../util/constants"; import { PartialGroup, PartialGroupOptions } from "./Group"; import { PartialUser, PartialUserOptions } from "./User"; -import { GetPlaceStatisticsByTypeOptions } from "../client/apis/DevelopAPI"; -import { GetGameServersByTypeOptions } from "../client/apis/GamesAPI"; +import { DevelopGetPlaceStatisticsByTypeOptions } from "../client/apis/DevelopAPI"; +import { GamesGetGameServersByTypeOptions } from "../client/apis/GamesAPI"; interface Structures { PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; @@ -178,7 +178,9 @@ export class BasePlace { }); } - getStatistics(options: Omit) { + getStatistics( + options: Omit + ) { return this.client.apis.developAPI.getPlaceStatistics({ placeId: this.id, ...options @@ -193,7 +195,7 @@ export class BasePlace { }); } - getGameServers(options: Omit) { + getGameServers(options: Omit) { return this.client.apis.gamesAPI.getGameServersByType({ placeId: this.id, ...options diff --git a/src/structures/Group.ts b/src/structures/Group.ts index 9bbdd4fe2..2d50fab91 100644 --- a/src/structures/Group.ts +++ b/src/structures/Group.ts @@ -1,77 +1,77 @@ import Client from "../client"; -import { GetGroupUniversesOptions } from "../client/apis/DevelopAPI"; +import { DevelopGetGroupUniversesOptions } from "../client/apis/DevelopAPI"; import { CursorPage } from "./Asset"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; import { - GetGroupRevenueSummaryInTimeFrame, - GetGroupRevenueSummaryInTimeFrameOptions, - GetGroupTransactions, - GetGroupTransactionsOptions + EconomyGetGroupRevenueSummaryInTimeFrame, + EconomyGetGroupRevenueSummaryInTimeFrameOptions, + EconomyGetGroupTransactions, + EconomyGetGroupTransactionsOptions } from "../client/apis/EconomyAPI"; import { - AcceptJoinRequest, - AcceptJoinRequests, - AcceptJoinRequestsOptions, - AcceptRelationshipRequest, - AcceptRelationshipRequests, - AcceptRelationshipRequestsOptions, - ChangeOwner, - ClaimGroup, - CreateRelationship, - CreateRelationshipOptions, - CreateRole, - CreateRoleOptions, - CreateWallPost, - CreateWallPostOptions, - DeclineJoinRequest, - DeclineJoinRequests, - DeclineRelationshipRequest, - DeclineRelationshipRequests, - DeclineRelationshipRequestsOptions, - DeleteRelationship, - DeleteRelationshipOptions, - DeleteRole, - DeleteSocialLink, - DeleteWallPost, - GetAllRolesPermissions, - GetGroupPayouts, - GetGroupRelationships, - GetGroupRelationshipsOptions, - GetGroupSettings, - GetGuestPermissions, - GetJoinRequest, - GetJoinRequestsOptions, - GetMembersOptions, - GetMembersWithRoleOptions, - GetRelationshipRequests, - GetRelationshipRequestsOptions, - GetRolePermissions, - GetSelfGroupMembership, - GetSocialLinks, - GetWallPostsOptions, - JoinGroup, - JoinGroupOptions, - KickMember, - PayoutMembers, - PayoutMembersOptions, - PostSocialLink, - PostSocialLinkOptions, - RemovePrimaryGroup, - SetPrimaryGroup, - UpdateGroupDescription, - UpdateGroupIcon, - UpdateGroupSettings, - UpdateGroupSettingsOptions, - UpdateGroupStatus, - UpdateMember, - UpdateRecurringPayouts, - UpdateRecurringPayoutsOptions, - UpdateRole, - UpdateRoleOptions, - UpdateRolePermissions, - UpdateRolePermissionsOptions, - UpdateSocialLink, - UpdateSocialLinkOptions + GroupsAcceptJoinRequest, + GroupsAcceptJoinRequests, + GroupsAcceptJoinRequestsOptions, + GroupsAcceptRelationshipRequest, + GroupsAcceptRelationshipRequests, + GroupsAcceptRelationshipRequestsOptions, + GroupsChangeOwner, + GroupsClaimGroup, + GroupsCreateRelationship, + GroupsCreateRelationshipOptions, + GroupsCreateRole, + GroupsCreateRoleOptions, + GroupsCreateWallPost, + GroupsCreateWallPostOptions, + GroupsDeclineJoinRequest, + GroupsDeclineJoinRequests, + GroupsDeclineRelationshipRequest, + GroupsDeclineRelationshipRequests, + GroupsDeclineRelationshipRequestsOptions, + GroupsDeleteRelationship, + GroupsDeleteRelationshipOptions, + GroupsDeleteRole, + GroupsDeleteSocialLink, + GroupsDeleteWallPost, + GroupsGetAllRolesPermissions, + GroupsGetGroupPayouts, + GroupsGetGroupRelationships, + GroupsGetGroupRelationshipsOptions, + GroupsGetGroupSettings, + GroupsGetGuestPermissions, + GroupsGetJoinRequest, + GroupsGetJoinRequestsOptions, + GroupsGetMembersOptions, + GroupsGetMembersWithRoleOptions, + GroupsGetRelationshipRequests, + GroupsGetRelationshipRequestsOptions, + GroupsGetRolePermissions, + GroupsGetSelfGroupMembership, + GroupsGetSocialLinks, + GroupsGetWallPostsOptions, + GroupsJoinGroup, + GroupsJoinGroupOptions, + GroupsKickMember, + GroupsPayoutMembers, + GroupsPayoutMembersOptions, + GroupsPostSocialLink, + GroupsPostSocialLinkOptions, + GroupsRemovePrimaryGroup, + GroupsSetPrimaryGroup, + GroupsUpdateGroupDescription, + GroupsUpdateGroupIcon, + GroupsUpdateGroupSettings, + GroupsUpdateGroupSettingsOptions, + GroupsUpdateGroupStatus, + GroupsUpdateMember, + GroupsUpdateRecurringPayouts, + GroupsUpdateRecurringPayoutsOptions, + GroupsUpdateRole, + GroupsUpdateRoleOptions, + GroupsUpdateRolePermissions, + GroupsUpdateRolePermissionsOptions, + GroupsUpdateSocialLink, + GroupsUpdateSocialLinkOptions } from "../client/apis/GroupsAPI"; import { PartialUser, PartialUserOptions, UserBase } from "./User"; @@ -89,7 +89,7 @@ const retrieveStructures = (): Structures => ({ }); type GroupRelationships = Omit< - GetGroupRelationships, + GroupsGetGroupRelationships, "relatedGroups" > & { groupId: number; @@ -116,7 +116,7 @@ export class GroupBase { } getUniverses( - options?: Omit + options?: Omit ): Promise> { return this.client.apis.developAPI .getGroupUniverses({ @@ -176,8 +176,8 @@ export class GroupBase { } getRevenueSummaryInTimeFrame( - timeFrame: GetGroupRevenueSummaryInTimeFrameOptions["timeFrame"] - ): Promise { + timeFrame: EconomyGetGroupRevenueSummaryInTimeFrameOptions["timeFrame"] + ): Promise { return this.client.apis.economyAPI.getGroupRevenueByTime({ groupId: this.id, timeFrame @@ -185,8 +185,8 @@ export class GroupBase { } getTransactions( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.economyAPI.getGroupTransactions({ groupId: this.id, ...options @@ -270,43 +270,45 @@ export class GroupBase { return this.getMember(userId); } - getSettings(): Promise { + getSettings(): Promise { return this.client.apis.groupsAPI.getGroupSettings({ groupId: this.id }); } updateSettings( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.updateGroupSettings({ groupId: this.id, ...options }); } - updateDescription(description: string): Promise { + updateDescription( + description: string + ): Promise { return this.client.apis.groupsAPI.updateGroupDescription({ description, groupId: this.id }); } - updateShout(shout: string): Promise { + updateShout(shout: string): Promise { return this.client.apis.groupsAPI.updateGroupStatus({ groupId: this.id, message: shout }); } - updateIcon(file: unknown): Promise { + updateIcon(file: unknown): Promise { return this.client.apis.groupsAPI.updateGroupIcon({ files: file, groupId: this.id }); } - declineJoinRequests(userIds: number[]): Promise { + declineJoinRequests(userIds: number[]): Promise { return this.client.apis.groupsAPI.declineJoinRequests({ groupId: this.id, userIds @@ -314,7 +316,7 @@ export class GroupBase { } getJoinRequests( - options: Omit + options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -335,36 +337,36 @@ export class GroupBase { } acceptJoinRequests( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.acceptJoinRequests({ groupId: this.id, ...options }); } - declineJoinRequest(userId: number): Promise { + declineJoinRequest(userId: number): Promise { return this.client.apis.groupsAPI.declineJoinRequest({ groupId: this.id, userId }); } - getJoinRequest(userId: number): Promise { + getJoinRequest(userId: number): Promise { return this.client.apis.groupsAPI.getJoinRequest({ groupId: this.id, userId }); } - acceptJoinRequest(userId: number): Promise { + acceptJoinRequest(userId: number): Promise { return this.client.apis.groupsAPI.acceptJoinRequest({ groupId: this.id, userId }); } - getSelfMembership(): Promise { + getSelfMembership(): Promise { return this.client.apis.groupsAPI.getSelfGroupMembership({ groupId: this.id }); @@ -393,7 +395,7 @@ export class GroupBase { } getMembersWithRole( - options: Omit + options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -414,7 +416,7 @@ export class GroupBase { } getMembers( - options: Omit + options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -429,7 +431,9 @@ export class GroupBase { ); } - join(options: Omit): Promise { + join( + options: Omit + ): Promise { return this.client.apis.groupsAPI.joinGroup({ groupId: this.id, ...options, @@ -448,27 +452,27 @@ export class GroupBase { ); } - changeOwner(userId: number): Promise { + changeOwner(userId: number): Promise { return this.client.apis.groupsAPI.changeGroupOwner({ groupId: this.id, userId }); } - claim(): Promise { + claim(): Promise { return this.client.apis.groupsAPI.claimGroup({ groupId: this.id }); } - kickMember(userId: number): Promise { + kickMember(userId: number): Promise { return this.client.apis.groupsAPI.kickMember({ groupId: this.id, userId }); } - updateMember(userId: number, roleId: number): Promise { + updateMember(userId: number, roleId: number): Promise { return this.client.apis.groupsAPI.updateMember({ groupId: this.id, roleId, @@ -476,15 +480,15 @@ export class GroupBase { }); } - getPayouts(): Promise { + getPayouts(): Promise { return this.client.apis.groupsAPI.getGroupPayouts({ groupId: this.id }); } payoutMembers( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.payoutMembers({ groupId: this.id, ...options @@ -492,8 +496,8 @@ export class GroupBase { } updateRecurringPayouts( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.updateRecurringPayouts({ groupId: this.id, ...options @@ -501,8 +505,8 @@ export class GroupBase { } getRelationships( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.getGroupRelationships({ groupId: this.id, ...options @@ -510,8 +514,8 @@ export class GroupBase { } declineRelationshipRequests( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.declineRelationshipRequests({ groupId: this.id, ...options @@ -519,8 +523,8 @@ export class GroupBase { } getRelationshipRequests( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.getRelationshipRequests({ groupId: this.id, ...options @@ -528,8 +532,8 @@ export class GroupBase { } acceptRelationshipRequests( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.acceptRelationshipRequests({ groupId: this.id, ...options @@ -537,8 +541,8 @@ export class GroupBase { } deleteRelationship( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.deleteRelationship({ groupId: this.id, ...options @@ -546,8 +550,8 @@ export class GroupBase { } createRelationship( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.createRelationship({ groupId: this.id, ...options @@ -557,7 +561,7 @@ export class GroupBase { acceptRelationshipRequest( type: "enemies" | "allies", withGroup: number - ): Promise { + ): Promise { return this.client.apis.groupsAPI.acceptRelationshipRequest({ groupId: this.id, relationshipType: type || "allies", @@ -568,7 +572,7 @@ export class GroupBase { declineRelationshipRequest( type: "enemies" | "allies", withGroup: number - ): Promise { + ): Promise { return this.client.apis.groupsAPI.declineRelationshipRequest({ groupId: this.id, relationshipType: type || "allies", @@ -576,7 +580,7 @@ export class GroupBase { }); } - getRolePermissions(roleId: number): Promise { + getRolePermissions(roleId: number): Promise { return this.client.apis.groupsAPI.getRolePermissions({ groupId: this.id, roleId @@ -585,8 +589,8 @@ export class GroupBase { updateRolePermissions( roleId: number, - permissions: Omit - ): Promise { + permissions: Omit + ): Promise { return this.client.apis.groupsAPI.updateRolePermissions({ groupId: this.id, roleId, @@ -594,34 +598,34 @@ export class GroupBase { }); } - getGuestPermissions(): Promise { + getGuestPermissions(): Promise { return this.client.apis.groupsAPI.getGuestPermissions({ groupId: this.id }); } - getAllRolesPermissions(): Promise { + getAllRolesPermissions(): Promise { return this.client.apis.groupsAPI.getAllRolesPermissions({ groupId: this.id }); } - getSocialLinks(): Promise { + getSocialLinks(): Promise { return this.client.apis.groupsAPI.getSocialLinks({ groupId: this.id }); } createSocialLink( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.createSocialLink({ groupId: this.id, ...options }); } - deleteSocialLink(id: number): Promise { + deleteSocialLink(id: number): Promise { return this.client.apis.groupsAPI.deleteSocialLink({ groupId: this.id, id @@ -629,8 +633,8 @@ export class GroupBase { } updateSocialLink( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.updateSocialLink({ groupId: this.id, ...options @@ -638,7 +642,7 @@ export class GroupBase { } getWallPosts( - options: Omit + options: Omit ): Promise> { const CursorPageClass = require("./Asset").CursorPage; @@ -654,15 +658,15 @@ export class GroupBase { } createWallPost( - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.createWallPost({ groupId: this.id, ...options }); } - deleteWallPost(id: number): Promise { + deleteWallPost(id: number): Promise { return this.client.apis.groupsAPI.deleteWallPost({ groupId: this.id, id @@ -695,24 +699,26 @@ export class GroupBase { ); } - removeAsPrimary(): Promise { + removeAsPrimary(): Promise { return this.client.apis.groupsAPI.removePrimaryGroup(); } - setAsPrimary(): Promise { + setAsPrimary(): Promise { return this.client.apis.groupsAPI.setPrimaryGroup({ groupId: this.id }); } - createRole(options: Omit): Promise { + createRole( + options: Omit + ): Promise { return this.client.apis.groupsAPI.createRole({ groupId: this.id, ...options }); } - deleteRole(roleId: number): Promise { + deleteRole(roleId: number): Promise { return this.client.apis.groupsAPI.deleteRole({ groupId: this.id, roleId @@ -721,8 +727,8 @@ export class GroupBase { updateRole( roleId: number, - options: Omit - ): Promise { + options: Omit + ): Promise { return this.client.apis.groupsAPI.updateRole({ groupId: this.id, roleId, diff --git a/src/types/GeneralTypes.ts b/src/types/GeneralTypes.ts deleted file mode 100644 index 21a644ae1..000000000 --- a/src/types/GeneralTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare type Privacy = - | "NoOne" - | "Friends" - | "Following" - | "Followers" - | "AllUsers"; - -export declare type ISOString = string; diff --git a/src/types/GenericOptionTypes.ts b/src/types/GenericOptionTypes.ts new file mode 100644 index 000000000..634dc5610 --- /dev/null +++ b/src/types/GenericOptionTypes.ts @@ -0,0 +1,39 @@ +export type UserIdOption = { + userId: number; +}; +export type UserIdsOption = { + userIds: number[]; +}; +export type PlaceIdOption = { + placeId: number; +}; +export type PlaceIdsOption = { + placeIds: number[]; +}; +export type UniverseIdOption = { + universeId: number; +}; +export type UniverseIdsOption = { + universeIds: number[]; +}; +export type AssetIdOption = { + assetId: number; +}; +export type AssetIdsOption = { + assetIds: number[]; +}; +export type GroupIdOption = { + groupId: number; +}; +export type GroupIdsOption = { + groupIds: number[]; +}; +export type SortOption = { + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export type UsernamePasswordOption = { + username: string; + password: string; +}; diff --git a/src/types/GenericTypes.ts b/src/types/GenericTypes.ts new file mode 100644 index 000000000..38ca45fbf --- /dev/null +++ b/src/types/GenericTypes.ts @@ -0,0 +1,16 @@ +export type Privacy = + | "NoOne" + | "Friends" + | "Following" + | "Followers" + | "AllUsers"; + +export type ISOString = string; +export type CursorData = { + previousPageCursor?: string; + nextPageCursor?: string; + data: T; +}; +export type SuccessResponse = { + success: boolean; +}; From b51335816f2f79a0167391cebf270f2766d32de0 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sun, 9 Jan 2022 07:59:46 +0100 Subject: [PATCH 19/24] FIX TYPEDOC --- package.json | 2 +- typedoc.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 056e56515..ebef53834 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "build": "tsc --skipLibCheck", "eslint": "eslint . --ext .ts", "prepublishOnly": "npm run build", - "create-docs": "typedoc src && mkdocs build", + "create-docs": "typedoc ./src && mkdocs build", "prepare-windows": "npm install && npm run build && npm run create-docs && echo 'Finished'" }, "types": "./dist/index.d.ts", diff --git a/typedoc.json b/typedoc.json index f2310d91e..cd1484cf3 100644 --- a/typedoc.json +++ b/typedoc.json @@ -4,5 +4,6 @@ "plugin": "typedoc-plugin-markdown", "hideBreadcrumbs": true, "namedAnchors": true, - "excludeExternals": false + "excludeExternals": false, + "entryPointStrategy": "expand" } From 12d60406c7318bfcc6368521c0801f5f88ace7f8 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sun, 9 Jan 2022 08:33:31 +0100 Subject: [PATCH 20/24] Remove default exports --- src/client/Client.ts | 38 ++++----- src/client/ClientBase.ts | 16 ++-- src/client/apis/AccountInformationAPI.ts | 6 +- src/client/apis/AccountSettingsAPI.ts | 6 +- src/client/apis/AdConfigurationAPI.ts | 6 +- src/client/apis/AssetDeliveryAPI.ts | 6 +- src/client/apis/AuthAPI.ts | 6 +- src/client/apis/AvatarAPI.ts | 6 +- src/client/apis/BadgesAPI.ts | 6 +- src/client/apis/BaseAPI.ts | 4 +- src/client/apis/BillingAPI.ts | 6 +- src/client/apis/CatalogAPI.ts | 6 +- src/client/apis/ChatAPI.ts | 6 +- src/client/apis/ContactsAPI.ts | 6 +- src/client/apis/DataAPI.ts | 6 +- src/client/apis/DevelopAPI.ts | 6 +- src/client/apis/EconomyAPI.ts | 6 +- src/client/apis/EconomyCreatorStatsAPI.ts | 6 +- src/client/apis/EngagementPayoutsAPI.ts | 6 +- src/client/apis/FollowingsAPI.ts | 6 +- src/client/apis/FriendsAPI.ts | 6 +- .../apis/GameInternationalizationAPI.ts | 6 +- src/client/apis/GamesAPI.ts | 6 +- src/client/apis/GeneralAPI.ts | 6 +- src/client/apis/GroupsAPI.ts | 6 +- src/client/apis/InventoryAPI.ts | 6 +- src/client/apis/ItemConfigurationAPI.ts | 6 +- src/client/apis/LocaleAPI.ts | 6 +- src/client/apis/MetricsAPI.ts | 6 +- src/client/apis/NotificationsAPI.ts | 6 +- src/client/apis/OtherAPI.ts | 6 +- src/client/apis/PremiumFeaturesAPI.ts | 6 +- src/client/apis/PresenceAPI.ts | 6 +- src/client/apis/PrivateMessagesAPI.ts | 6 +- src/client/apis/PublishAPI.ts | 6 +- src/client/apis/ThumbnailsAPI.ts | 6 +- src/client/apis/TranslationRolesAPI.ts | 6 +- src/client/apis/TwoStepVerificationAPI.ts | 6 +- src/client/apis/UsersAPI.ts | 6 +- src/client/apis/index.ts | 79 ++++++++++--------- src/client/index.ts | 6 +- src/client/lib/ChatManager/ChatManager.ts | 4 +- src/client/lib/ClientSocket/ClientSocket.ts | 16 ++-- .../lib/DataStoreManager/DataStoreManager.ts | 14 ++-- .../structures/DataStoreHttpRequest.ts | 12 +-- .../structures/GenericDataStore.ts | 42 +++++----- .../structures/GlobalDataStore.ts | 10 +-- .../structures/OrderedDataStore.ts | 25 +++--- .../structures/OrderedDataStorePage.ts | 9 ++- .../lib/DataStoreManager/util/checks.ts | 28 +++---- .../lib/DataStoreManager/util/constants.ts | 4 +- src/controllers/index.ts | 4 +- src/controllers/rest/RESTController.ts | 60 +++++++------- src/controllers/rest/index.ts | 2 +- src/controllers/rest/lib/getRequester.ts | 10 +-- src/controllers/rest/lib/updateXCSRFToken.ts | 4 +- src/controllers/rest/request/RESTRequest.ts | 16 ++-- src/controllers/rest/request/index.ts | 2 +- src/controllers/rest/request/prepare.ts | 18 ++--- src/controllers/rest/response/RESTResponse.ts | 20 ++--- .../rest/response/handlers/index.ts | 12 ++- .../rest/response/handlers/updateHeaders.ts | 4 +- .../rest/response/handlers/validBody.ts | 2 +- .../rest/response/handlers/validStatusCode.ts | 42 +++++----- .../response/handlers/validStatusMessage.ts | 41 +++++----- src/controllers/rest/response/index.ts | 2 +- src/index.ts | 3 +- src/interfaces/GeneralInterfaces.ts | 2 +- src/interfaces/RESTInterfaces.ts | 4 +- src/structures/Asset.ts | 2 +- src/structures/Chat.ts | 2 +- src/structures/ClientUser.ts | 4 +- src/structures/Game.ts | 2 +- src/structures/Group.ts | 2 +- src/structures/User.ts | 2 +- 75 files changed, 385 insertions(+), 400 deletions(-) diff --git a/src/client/Client.ts b/src/client/Client.ts index 42e4f88e5..afc73e9c9 100644 --- a/src/client/Client.ts +++ b/src/client/Client.ts @@ -1,13 +1,13 @@ -import ClientBase, { ClientOptions } from "./ClientBase"; -import initAPIs, { APIs } from "./apis"; -import ClientUser from "../structures/ClientUser"; -import RESTController from "../controllers/rest"; +import { ClientBase, ClientOptions } from "./ClientBase"; +import { initAPIs, APIs } from "./apis"; +import { ClientUser } from "../structures/ClientUser"; +import { RESTController } from "../controllers/rest"; import { Group, PartialUser, User } from "../structures"; import * as ClientSocket from "./lib/ClientSocket/ClientSocket"; -import ChatManager from "./lib/ChatManager/ChatManager"; -import DataStoreManager from "./lib/DataStoreManager/DataStoreManager"; +import { ChatManager } from "./lib/ChatManager/ChatManager"; +import { DataStoreManager } from "./lib/DataStoreManager/DataStoreManager"; -export default class Client extends ClientBase { +export class Client extends ClientBase { public user: ClientUser | null; public apis: APIs; public rest: RESTController; @@ -15,7 +15,7 @@ export default class Client extends ClientBase { public dataStoreManager: DataStoreManager; public chat: ChatManager; - constructor (options?: ClientOptions) { + constructor(options?: ClientOptions) { super(options); this.user = null; @@ -28,17 +28,17 @@ export default class Client extends ClientBase { this.init(); } - public isLoggedIn (): boolean { + public isLoggedIn(): boolean { return this.user !== null; } - init (): void { + init(): void { if (this.options.rest) { this.rest.setOptions(this.options.rest); } } - public async login (cookie?: string): Promise { + public async login(cookie?: string): Promise { this.log("info", { name: "Client.login", description: `Started login process..` @@ -68,8 +68,8 @@ export default class Client extends ClientBase { description: `Added cookie to cookie jar, proceeding to fetching authenticated user information..` }); - const getAuthenticationData - = await this.apis.usersAPI.getAuthenticatedUserInformation(); + const getAuthenticationData = + await this.apis.usersAPI.getAuthenticatedUserInformation(); this.user = new ClientUser( { id: getAuthenticationData.id, @@ -87,7 +87,7 @@ export default class Client extends ClientBase { return this.user; } - getGroup (groupId: number): Promise { + getGroup(groupId: number): Promise { return this.apis.groupsAPI .getGroup({ groupId @@ -101,7 +101,7 @@ export default class Client extends ClientBase { }); } - getUser (userId: number | string): Promise { + getUser(userId: number | string): Promise { if (typeof userId === "string") { userId = parseInt(userId); } @@ -151,7 +151,7 @@ export default class Client extends ClientBase { ); } - getUserIdFromUsername (username: string): Promise { + getUserIdFromUsername(username: string): Promise { return this.apis.usersAPI .getUsersByUsernames({ usernames: [username], @@ -166,7 +166,7 @@ export default class Client extends ClientBase { }); } - getUsernameFromUserId (userId: number | string): Promise { + getUsernameFromUserId(userId: number | string): Promise { if (typeof userId === "string") { userId = parseInt(userId); } @@ -178,7 +178,7 @@ export default class Client extends ClientBase { .then((data) => new PartialUser(data, this)); } - getUsersByUserIds ( + getUsersByUserIds( userIds: number[] | string[], excludeBannedUsers = false ): Promise { @@ -196,7 +196,7 @@ export default class Client extends ClientBase { ); } - getUsersByUsernames ( + getUsersByUsernames( usernames: string[], excludeBannedUsers = false ): Promise { diff --git a/src/client/ClientBase.ts b/src/client/ClientBase.ts index 72f568455..b40a283f0 100644 --- a/src/client/ClientBase.ts +++ b/src/client/ClientBase.ts @@ -33,7 +33,7 @@ interface DebugData { description: string; } -export default class ClientBase extends EventEmitter { +export class ClientBase extends EventEmitter { public options: ClientOptions; public debugger: { info: Debugger; @@ -41,7 +41,7 @@ export default class ClientBase extends EventEmitter { error: Debugger; }; - constructor (options?: ClientOptions) { + constructor(options?: ClientOptions) { super(); this.options = this.updateOptions(options); @@ -52,7 +52,7 @@ export default class ClientBase extends EventEmitter { }; } - public updateOptions (options?: ClientOptions): ClientOptions { + public updateOptions(options?: ClientOptions): ClientOptions { this.options = utilMergeDeep( { credentials: {}, @@ -66,13 +66,13 @@ export default class ClientBase extends EventEmitter { return this.options; } - public log (level: "info" | "warn" | "error", data: DebugData): void { - const loggerToUse - = level === "info" + public log(level: "info" | "warn" | "error", data: DebugData): void { + const loggerToUse = + level === "info" ? this.debugger.info : level === "error" - ? this.debugger.error - : this.debugger.warn; + ? this.debugger.error + : this.debugger.warn; loggerToUse( `[${new Date().toISOString()}] ${data.name}: ${data.description}` diff --git a/src/client/apis/AccountInformationAPI.ts b/src/client/apis/AccountInformationAPI.ts index f60ecdc7a..7490ba732 100644 --- a/src/client/apis/AccountInformationAPI.ts +++ b/src/client/apis/AccountInformationAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { UserIdOption, Privacy } from "../.."; // AccountInformation @@ -68,7 +68,7 @@ export type AccountInformationRobloxBadge = { export declare type AccountInformationRobloxBadges = AccountInformationRobloxBadge[]; -export default class AccountInformationAPI extends BaseAPI { +export class AccountInformationAPI extends BaseAPI { constructor(client: Client) { super({ baseUrl: "https://accountinformation.roblox.com/", diff --git a/src/client/apis/AccountSettingsAPI.ts b/src/client/apis/AccountSettingsAPI.ts index adf12e0d8..98d622fe4 100644 --- a/src/client/apis/AccountSettingsAPI.ts +++ b/src/client/apis/AccountSettingsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { Privacy } from "../../types/GenericTypes"; import { UserIdOption } from "../.."; @@ -40,7 +40,7 @@ export type AccountSettingsVisibilityPrivacy = { visibilityPrivacy: number; }; -export default class AccountSettingsAPI extends BaseAPI { +export class AccountSettingsAPI extends BaseAPI { constructor(client: Client) { super({ baseUrl: "https://accountsettings.roblox.com/", diff --git a/src/client/apis/AdConfigurationAPI.ts b/src/client/apis/AdConfigurationAPI.ts index 8484aa5c8..535cce780 100644 --- a/src/client/apis/AdConfigurationAPI.ts +++ b/src/client/apis/AdConfigurationAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { ISOString } from "../../types/GenericTypes"; import { GroupIdOption } from "../.."; @@ -68,7 +68,7 @@ export type AdConfigurationGetSponsoredGamesOptions = { pageCursor?: string; }; -export default class AdConfigurationAPI extends BaseAPI { +export class AdConfigurationAPI extends BaseAPI { constructor(client: Client) { super({ baseUrl: "https://adconfiguration.roblox.com/", diff --git a/src/client/apis/AssetDeliveryAPI.ts b/src/client/apis/AssetDeliveryAPI.ts index c033f02d7..bbb3b75eb 100644 --- a/src/client/apis/AssetDeliveryAPI.ts +++ b/src/client/apis/AssetDeliveryAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type AssetDeliveryBaseOptions = { acceptEncoding: string; @@ -135,7 +135,7 @@ export type AssetDeliveryGetBatchAssetsOptions = { }; export type AssetDeliveryGetBatchAssets = AssetDeliveryBaseAsset[]; -export default class AssetDeliveryAPI extends BaseAPI { +export class AssetDeliveryAPI extends BaseAPI { constructor(client: Client) { super({ baseUrl: "https://assetdelivery.roblox.com/", diff --git a/src/client/apis/AuthAPI.ts b/src/client/apis/AuthAPI.ts index 4574020cb..917e258e0 100644 --- a/src/client/apis/AuthAPI.ts +++ b/src/client/apis/AuthAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { UsernamePasswordOption } from "../../types/GenericOptionTypes"; // AccountPin @@ -218,7 +218,7 @@ export type AuthResetPassword = AuthLogin & { }; export type AuthRevertAccount = AuthResetPassword; -export default class AuthAPI extends BaseAPI { +export class AuthAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/AvatarAPI.ts b/src/client/apis/AvatarAPI.ts index 5311ddd63..b388b98c4 100644 --- a/src/client/apis/AvatarAPI.ts +++ b/src/client/apis/AvatarAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import type { AssetIdOption, AssetIdsOption, @@ -174,7 +174,7 @@ export type AvatarGetRecentlyUsedOptions = { recentItemListType: string; }; -export default class AvatarAPI extends BaseAPI { +export class AvatarAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/BadgesAPI.ts b/src/client/apis/BadgesAPI.ts index a5ab80131..4d873aea0 100644 --- a/src/client/apis/BadgesAPI.ts +++ b/src/client/apis/BadgesAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { SortOption } from "../.."; export type BadgesMetaData = { @@ -71,7 +71,7 @@ export type BadgesDeleteBadgeFromSelfOptions = { badgeId: number; }; -export default class AvatarAPI extends BaseAPI { +export class BadgesAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/BaseAPI.ts b/src/client/apis/BaseAPI.ts index c08b6f6ed..0378e0361 100644 --- a/src/client/apis/BaseAPI.ts +++ b/src/client/apis/BaseAPI.ts @@ -3,7 +3,7 @@ import { RESTRequestOptions, RESTResponseDataType } from "../../interfaces/RESTInterfaces"; -import Client from "../Client"; +import { Client } from "../Client"; export type BaseAPIRequestOptions = { /** @@ -23,7 +23,7 @@ export type BaseAPIRequestOptions = { json?: boolean; }; -export default class BaseAPI { +export class BaseAPI { public client: Client; public options: BaseAPIOptions; diff --git a/src/client/apis/BillingAPI.ts b/src/client/apis/BillingAPI.ts index e3e50cac2..34592d3b9 100644 --- a/src/client/apis/BillingAPI.ts +++ b/src/client/apis/BillingAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { SortOption } from "../.."; export type BillingGetDeveloperExchangeRate = { @@ -143,7 +143,7 @@ export type BillingRedeemPromoCodeOptions = { code: string; }; -export default class BillingAPI extends BaseAPI { +export class BillingAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/CatalogAPI.ts b/src/client/apis/CatalogAPI.ts index a703bc322..54fd36956 100644 --- a/src/client/apis/CatalogAPI.ts +++ b/src/client/apis/CatalogAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { AssetIdOption, SortOption, UserIdOption } from "../.."; export type CatalogProductDetails = { @@ -98,7 +98,7 @@ export type CatalogFavoriteBundleOptions = UserIdOption & { bundleId: number; }; -export default class CatalogAPI extends BaseAPI { +export class CatalogAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/ChatAPI.ts b/src/client/apis/ChatAPI.ts index 1f756a436..3ef6eba7c 100644 --- a/src/client/apis/ChatAPI.ts +++ b/src/client/apis/ChatAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type ChatPartialConversationData = { id: number; @@ -242,7 +242,7 @@ export type ChatSendGameLinkMessageOptions = { decorators: string[]; }; -export default class ChatAPI extends BaseAPI { +export class ChatAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/ContactsAPI.ts b/src/client/apis/ContactsAPI.ts index 711aa060a..839cee38c 100644 --- a/src/client/apis/ContactsAPI.ts +++ b/src/client/apis/ContactsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type ContactsGetContactsMetaData = { multiGetContactsMaxSize: number; @@ -27,7 +27,7 @@ export type ContactsSetUserTag = { status: "Success" | string; }; -export default class ContactsAPI extends BaseAPI { +export class ContactsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/DataAPI.ts b/src/client/apis/DataAPI.ts index 92303319f..2feb54a95 100644 --- a/src/client/apis/DataAPI.ts +++ b/src/client/apis/DataAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type DataUploadDataOptions = { assetId: number; @@ -7,7 +7,7 @@ export type DataUploadDataOptions = { }; export type DataUploadDataResult = unknown; -export default class DataAPI extends BaseAPI { +export class DataAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/DevelopAPI.ts b/src/client/apis/DevelopAPI.ts index 47809a3c7..aab6ee677 100644 --- a/src/client/apis/DevelopAPI.ts +++ b/src/client/apis/DevelopAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { PartialGroupOptions } from "../../structures/Group"; import { ISOString } from "../../types/GenericTypes"; @@ -559,7 +559,7 @@ export type DevelopUpdateDeveloperProductOptions = { }; export type DevelopUpdateDeveloperProduct = unknown; -export default class DevelopAPI extends BaseAPI { +export class DevelopAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/EconomyAPI.ts b/src/client/apis/EconomyAPI.ts index febe78a19..dffee4b7d 100644 --- a/src/client/apis/EconomyAPI.ts +++ b/src/client/apis/EconomyAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { BillingSubmitDeveloperExchangeOptions } from "./BillingAPI"; export type EconomyGetAssetResaleDataOptions = { @@ -170,7 +170,7 @@ export type EconomyGetSelfTransactionsOptions = Omit< }; export type EconomyGetSelfTransactions = EconomyGetGroupTransactions; -export default class EconomyAPI extends BaseAPI { +export class EconomyAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/EconomyCreatorStatsAPI.ts b/src/client/apis/EconomyCreatorStatsAPI.ts index 8858cb5e2..dd7b46d79 100644 --- a/src/client/apis/EconomyCreatorStatsAPI.ts +++ b/src/client/apis/EconomyCreatorStatsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type EconomyCreatorStatsGetUniverseStatsOptions = { universeId: number; @@ -12,7 +12,7 @@ export type EconomyCreatorStatsGetUniverseStats = { data: unknown; }; -export default class EconomyCreatorStatsAPI extends BaseAPI { +export class EconomyCreatorStatsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/EngagementPayoutsAPI.ts b/src/client/apis/EngagementPayoutsAPI.ts index 4543c4b53..e06250c17 100644 --- a/src/client/apis/EngagementPayoutsAPI.ts +++ b/src/client/apis/EngagementPayoutsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type EngagementPayoutsGetUniversePayoutHistoryOptions = { universeId: number; @@ -8,7 +8,7 @@ export type EngagementPayoutsGetUniversePayoutHistoryOptions = { }; export type EngagementPayoutsGetUniversePayoutHistory = unknown; -export default class EngagementPayoutsAPI extends BaseAPI { +export class EngagementPayoutsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/FollowingsAPI.ts b/src/client/apis/FollowingsAPI.ts index f2132a87a..04ed9dc74 100644 --- a/src/client/apis/FollowingsAPI.ts +++ b/src/client/apis/FollowingsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type FollowingsGetUserFollowedUniversesOptions = { userId: number; @@ -31,7 +31,7 @@ export type FollowingsUnFollowUniverse = { export type FollowingsFollowUniverseOptions = FollowingsUnFollowUniverseOptions; export type FollowingsFollowUniverse = FollowingsUnFollowUniverse; -export default class FollowingsAPI extends BaseAPI { +export class FollowingsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/FriendsAPI.ts b/src/client/apis/FriendsAPI.ts index cff91cf5d..5c7875fb9 100644 --- a/src/client/apis/FriendsAPI.ts +++ b/src/client/apis/FriendsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { GeneralGetUserFriendsCount, GeneralGetUserFriendsCountOptions @@ -177,7 +177,7 @@ export type FriendsGetSelfRecommendedUsers = { presenceType: EnumUserPresence; }[]; -export default class FriendsAPI extends BaseAPI { +export class FriendsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/GameInternationalizationAPI.ts b/src/client/apis/GameInternationalizationAPI.ts index b4e6f86de..98c63667b 100644 --- a/src/client/apis/GameInternationalizationAPI.ts +++ b/src/client/apis/GameInternationalizationAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type GameInternationalizationGetGameInfoOptions = { gameId: number; @@ -106,7 +106,7 @@ export type GameInternationalizationToggleAutomaticGameTranslation = { isAutomaticTranslationEnabled: boolean; }; -export default class GameInternationalizationAPI extends BaseAPI { +export class GameInternationalizationAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/GamesAPI.ts b/src/client/apis/GamesAPI.ts index 44d393647..e96a60b99 100644 --- a/src/client/apis/GamesAPI.ts +++ b/src/client/apis/GamesAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { GameUniverseOptions, PartialGameUniverse, @@ -274,7 +274,7 @@ export type GamesUpdateVIPServerSubscription = { price: number; }; -export default class GamesAPI extends BaseAPI { +export class GamesAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/GeneralAPI.ts b/src/client/apis/GeneralAPI.ts index c333f89a1..44adb0699 100644 --- a/src/client/apis/GeneralAPI.ts +++ b/src/client/apis/GeneralAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { AssetVersionOptions, ProductOptions } from "../../structures/Asset"; export declare type GeneralGetAssetVersionOptions = number; @@ -151,7 +151,7 @@ export declare type GeneralGetUserById = { export declare type GeneralGetUserByUsername = GeneralGetUserById; export declare type GeneralUserCanManageAsset = boolean; -export default class GeneralAPI extends BaseAPI { +export class GeneralAPI extends BaseAPI { constructor(client: Client) { super({ baseUrl: "https://api.roblox.com/", diff --git a/src/client/apis/GroupsAPI.ts b/src/client/apis/GroupsAPI.ts index f12dd54c1..b2f35533f 100644 --- a/src/client/apis/GroupsAPI.ts +++ b/src/client/apis/GroupsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type GroupsGroupRolePermissionsOptions = { groupId: number; @@ -655,7 +655,7 @@ export type GroupsUpdateRoleOptions = { }; export type GroupsUpdateRole = GroupsCreateRole; -export default class GroupsAPI extends BaseAPI { +export class GroupsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/InventoryAPI.ts b/src/client/apis/InventoryAPI.ts index 1b2a8c3f0..3ca76cfa7 100644 --- a/src/client/apis/InventoryAPI.ts +++ b/src/client/apis/InventoryAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type InventoryCanViewInventory = { canView: boolean; @@ -180,7 +180,7 @@ export type InventoryGetUserInventoryByAssetTypeId = { }[]; }; -export default class InventoryAPI extends BaseAPI { +export class InventoryAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/ItemConfigurationAPI.ts b/src/client/apis/ItemConfigurationAPI.ts index 7d2d63829..27efe8d84 100644 --- a/src/client/apis/ItemConfigurationAPI.ts +++ b/src/client/apis/ItemConfigurationAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type ItemConfigurationGetCreatedAssetsOptions = { assetType: string; @@ -81,7 +81,7 @@ export type ItemConfigurationSearchTagsOptions = { }; export type ItemConfigurationSearchTags = ItemConfigurationGetTagsByTagIds; -export default class InventoryAPI extends BaseAPI { +export class ItemConfigurationAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/LocaleAPI.ts b/src/client/apis/LocaleAPI.ts index c68e199a0..0982abd21 100644 --- a/src/client/apis/LocaleAPI.ts +++ b/src/client/apis/LocaleAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type LocaleGetCountryRegionsOptions = { locale: string; @@ -51,7 +51,7 @@ export type LocaleSetUserLocale = { success: boolean; }; -export default class LocaleAPI extends BaseAPI { +export class LocaleAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/MetricsAPI.ts b/src/client/apis/MetricsAPI.ts index 26f43127e..384d264a7 100644 --- a/src/client/apis/MetricsAPI.ts +++ b/src/client/apis/MetricsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type MetricsGetThumbnailsMetaData = { logRatio: number; @@ -20,7 +20,7 @@ export type MetricsReportBundleLoadOptions = { }; export type MetricsReportBundleLoad = unknown; -export default class LocaleAPI extends BaseAPI { +export class MetricsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/NotificationsAPI.ts b/src/client/apis/NotificationsAPI.ts index 475e1e2eb..a183b5485 100644 --- a/src/client/apis/NotificationsAPI.ts +++ b/src/client/apis/NotificationsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type NotificationsGetNotificationsSettings = { notificationBandSettings: { @@ -238,7 +238,7 @@ export type NotificationsSuppressStreamNotificationsPrompt = { statusMessage: string; }; -export default class NotificationsAPI extends BaseAPI { +export class NotificationsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/OtherAPI.ts b/src/client/apis/OtherAPI.ts index 1278a2cb0..5bfc12b20 100644 --- a/src/client/apis/OtherAPI.ts +++ b/src/client/apis/OtherAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; export type OtherGetUserProfileHeaderOptions = { @@ -45,7 +45,7 @@ export type OtherGetUserProfileHeader = { CanSeeInventory: boolean; }; -export default class OtherAPI extends BaseAPI { +export class OtherAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/PremiumFeaturesAPI.ts b/src/client/apis/PremiumFeaturesAPI.ts index 07367150e..13d9bd8e7 100644 --- a/src/client/apis/PremiumFeaturesAPI.ts +++ b/src/client/apis/PremiumFeaturesAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type PremiumFeaturesUpsellCheckOptions = { userId: number; @@ -12,7 +12,7 @@ export type PremiumFeaturesValidateUserMembershipOptions = { }; export type PremiumFeaturesValidateUserMembership = boolean; -export default class PremiumFeaturesAPI extends BaseAPI { +export class PremiumFeaturesAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/PresenceAPI.ts b/src/client/apis/PresenceAPI.ts index 146343730..463ed1ece 100644 --- a/src/client/apis/PresenceAPI.ts +++ b/src/client/apis/PresenceAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; export type PresenceRegisterAppPresenceOptions = { @@ -24,7 +24,7 @@ export type PresenceGetUsersPresences = { }[]; }; -export default class PresenceAPI extends BaseAPI { +export class PresenceAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/PrivateMessagesAPI.ts b/src/client/apis/PrivateMessagesAPI.ts index e162ea992..d20f4ebff 100644 --- a/src/client/apis/PrivateMessagesAPI.ts +++ b/src/client/apis/PrivateMessagesAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type PrivateMessagesGetAnnouncements = { collection: { @@ -89,7 +89,7 @@ export type PrivateMessagesUnArchiveMessagesOptions = PrivateMessagesArchiveMessagesOptions; export type PrivateMessagesUnArchiveMessages = PrivateMessagesArchiveMessages; -export default class PrivateMessagesAPI extends BaseAPI { +export class PrivateMessagesAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/PublishAPI.ts b/src/client/apis/PublishAPI.ts index 18e846c82..5f360f8d0 100644 --- a/src/client/apis/PublishAPI.ts +++ b/src/client/apis/PublishAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type PublishUploadAssetsOptions = { files: unknown; @@ -55,7 +55,7 @@ export type PublishUploadPluginIcon = { targetId: number; }; -export default class PublishAPI extends BaseAPI { +export class PublishAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/ThumbnailsAPI.ts b/src/client/apis/ThumbnailsAPI.ts index 8da8c7fbb..bcfc056f0 100644 --- a/src/client/apis/ThumbnailsAPI.ts +++ b/src/client/apis/ThumbnailsAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type ThumbnailsGetAssetsThumbnailsOptions = { assetIds: number[]; @@ -196,7 +196,7 @@ export type ThumbnailsGetBatchImages = { }[]; }; -export default class ThumbnailsAPI extends BaseAPI { +export class ThumbnailsAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/TranslationRolesAPI.ts b/src/client/apis/TranslationRolesAPI.ts index f9d855183..2624508a0 100644 --- a/src/client/apis/TranslationRolesAPI.ts +++ b/src/client/apis/TranslationRolesAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type TranslationRolesGetSelfGameRolesOptions = { gameId: number; @@ -40,7 +40,7 @@ export type TranslationRolesUpdateUserAccess = { }; export type TranslationRolesUpdateUser = unknown; -export default class TradesAPI extends BaseAPI { +export class TranslationRolesAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/TwoStepVerificationAPI.ts b/src/client/apis/TwoStepVerificationAPI.ts index 632e2dd33..ad8cca287 100644 --- a/src/client/apis/TwoStepVerificationAPI.ts +++ b/src/client/apis/TwoStepVerificationAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type TwoStepVerificationGetMetaDataOptions = { userId: number; @@ -73,7 +73,7 @@ export type TwoStepVerificationEmailEnableOptions = { }; export type TwoStepVerificationEmailEnable = unknown; -export default class TwoStepVerificationAPI extends BaseAPI { +export class TwoStepVerificationAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/UsersAPI.ts b/src/client/apis/UsersAPI.ts index 5c084f294..ff97c5d92 100644 --- a/src/client/apis/UsersAPI.ts +++ b/src/client/apis/UsersAPI.ts @@ -1,5 +1,5 @@ -import BaseAPI from "./BaseAPI"; -import Client from "../Client"; +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; export type UsersValidateDisplayNameNewUserOptions = { displayName: string; @@ -85,7 +85,7 @@ export type UsersUserNameHistory = { data: { name: string }[]; }; -export default class UsersAPI extends BaseAPI { +export class UsersAPI extends BaseAPI { constructor(client: Client) { super({ client, diff --git a/src/client/apis/index.ts b/src/client/apis/index.ts index e3b88814a..4c7ac79de 100644 --- a/src/client/apis/index.ts +++ b/src/client/apis/index.ts @@ -1,40 +1,40 @@ -import Client from "../Client"; -import GeneralAPI from "./GeneralAPI"; -import AccountInformationAPI from "./AccountInformationAPI"; -import AccountSettingsAPI from "./AccountSettingsAPI"; -import AdConfigurationAPI from "./AdConfigurationAPI"; -import AssetDeliveryAPI from "./AssetDeliveryAPI"; -import AuthAPI from "./AuthAPI"; -import AvatarAPI from "./AvatarAPI"; -import BadgesAPI from "./BadgesAPI"; -import BillingAPI from "./BillingAPI"; -import CatalogAPI from "./CatalogAPI"; -import ChatAPI from "./ChatAPI"; -import ContactsAPI from "./ContactsAPI"; -import DevelopAPI from "./DevelopAPI"; -import EconomyAPI from "./EconomyAPI"; -import EconomyCreatorStatsAPI from "./EconomyCreatorStatsAPI"; -import EngagementPayoutsAPI from "./EngagementPayoutsAPI"; -import FollowingsAPI from "./FollowingsAPI"; -import FriendsAPI from "./FriendsAPI"; -import GamesAPI from "./GamesAPI"; -import GameInternationalizationAPI from "./GameInternationalizationAPI"; -import GroupsAPI from "./GroupsAPI"; -import InventoryAPI from "./InventoryAPI"; -import ItemConfigurationAPI from "./ItemConfigurationAPI"; -import LocaleAPI from "./LocaleAPI"; -import MetricsAPI from "./MetricsAPI"; -import NotificationsAPI from "./NotificationsAPI"; -import PremiumFeaturesAPI from "./PremiumFeaturesAPI"; -import PresenceAPI from "./PresenceAPI"; -import PrivateMessagesAPI from "./PrivateMessagesAPI"; -import PublishAPI from "./PublishAPI"; -import ThumbnailsAPI from "./ThumbnailsAPI"; -import TranslationRolesAPI from "./TranslationRolesAPI"; -import UsersAPI from "./UsersAPI"; -import OtherAPI from "./OtherAPI"; -import TwoStepVerificationAPI from "./TwoStepVerificationAPI"; -import DataAPI from "./DataAPI"; +import { Client } from "../Client"; +import { GeneralAPI } from "./GeneralAPI"; +import { AccountInformationAPI } from "./AccountInformationAPI"; +import { AccountSettingsAPI } from "./AccountSettingsAPI"; +import { AdConfigurationAPI } from "./AdConfigurationAPI"; +import { AssetDeliveryAPI } from "./AssetDeliveryAPI"; +import { AuthAPI } from "./AuthAPI"; +import { AvatarAPI } from "./AvatarAPI"; +import { BadgesAPI } from "./BadgesAPI"; +import { BillingAPI } from "./BillingAPI"; +import { CatalogAPI } from "./CatalogAPI"; +import { ChatAPI } from "./ChatAPI"; +import { ContactsAPI } from "./ContactsAPI"; +import { DevelopAPI } from "./DevelopAPI"; +import { EconomyAPI } from "./EconomyAPI"; +import { EconomyCreatorStatsAPI } from "./EconomyCreatorStatsAPI"; +import { EngagementPayoutsAPI } from "./EngagementPayoutsAPI"; +import { FollowingsAPI } from "./FollowingsAPI"; +import { FriendsAPI } from "./FriendsAPI"; +import { GamesAPI } from "./GamesAPI"; +import { GameInternationalizationAPI } from "./GameInternationalizationAPI"; +import { GroupsAPI } from "./GroupsAPI"; +import { InventoryAPI } from "./InventoryAPI"; +import { ItemConfigurationAPI } from "./ItemConfigurationAPI"; +import { LocaleAPI } from "./LocaleAPI"; +import { MetricsAPI } from "./MetricsAPI"; +import { NotificationsAPI } from "./NotificationsAPI"; +import { PremiumFeaturesAPI } from "./PremiumFeaturesAPI"; +import { PresenceAPI } from "./PresenceAPI"; +import { PrivateMessagesAPI } from "./PrivateMessagesAPI"; +import { PublishAPI } from "./PublishAPI"; +import { ThumbnailsAPI } from "./ThumbnailsAPI"; +import { TranslationRolesAPI } from "./TranslationRolesAPI"; +import { UsersAPI } from "./UsersAPI"; +import { OtherAPI } from "./OtherAPI"; +import { TwoStepVerificationAPI } from "./TwoStepVerificationAPI"; +import { DataAPI } from "./DataAPI"; export declare type APIs = { accountInformationAPI: AccountInformationAPI; @@ -75,7 +75,10 @@ export declare type APIs = { twoStepVerification: TwoStepVerificationAPI; }; -export default function initAPIs(client: Client): APIs { +/** + * @hidden + */ +export function initAPIs(client: Client): APIs { return { accountInformationAPI: new AccountInformationAPI(client), accountSettingsAPI: new AccountSettingsAPI(client), diff --git a/src/client/index.ts b/src/client/index.ts index fdd58e022..eb79981a6 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -1,5 +1 @@ -import Client from "./Client"; -// Import ClientBase from "./ClientBase"; -// import * as ClientInterfaces from "./ClientInterface"; - -export default Client; +export { Client } from "./Client"; diff --git a/src/client/lib/ChatManager/ChatManager.ts b/src/client/lib/ChatManager/ChatManager.ts index 8b07bef2b..2fd7ddb11 100644 --- a/src/client/lib/ChatManager/ChatManager.ts +++ b/src/client/lib/ChatManager/ChatManager.ts @@ -1,4 +1,4 @@ -import Client from "../../Client"; +import { Client } from "../../Client"; import { ChatAddUsersToConversation, ChatGetChatSettings, @@ -21,7 +21,7 @@ import { ChatMessageSent } from "../../../structures/Chat"; -export default class ChatManager { +export class ChatManager { public client: Client; constructor(client: Client) { diff --git a/src/client/lib/ClientSocket/ClientSocket.ts b/src/client/lib/ClientSocket/ClientSocket.ts index f21720e45..505fdff0a 100644 --- a/src/client/lib/ClientSocket/ClientSocket.ts +++ b/src/client/lib/ClientSocket/ClientSocket.ts @@ -1,4 +1,4 @@ -import Client from "../../Client"; +import { Client } from "../../Client"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import * as SignalR from "signalr-client"; @@ -91,7 +91,7 @@ export class Socket extends EventEmitter { public socket: any; public connected: boolean; - constructor (client: Client) { + constructor(client: Client) { super(); this.client = client; @@ -99,7 +99,7 @@ export class Socket extends EventEmitter { this.connected = false; } - connect (): Promise { + connect(): Promise { return new Promise((resolve, reject) => { const connectSocket = (retries = 0): void => { this.socket = new SignalR.client( @@ -108,10 +108,10 @@ export class Socket extends EventEmitter { 3, true ); - this.socket.headers.Cookie - = this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); - const maxRetries - = this.client.options.setup?.websocket?.maxRetries ?? 3; + this.socket.headers.Cookie = + this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); + const maxRetries = + this.client.options.setup?.websocket?.maxRetries ?? 3; const attemptReconnect = (): unknown => connectSocket(++retries); const onError = (error: Error): void => { @@ -152,7 +152,7 @@ export class Socket extends EventEmitter { /** * This is called after the connection of the socket has successfully been established */ - init (): void { + init(): void { this.socket.on( "UserNotificationHub", "notification", diff --git a/src/client/lib/DataStoreManager/DataStoreManager.ts b/src/client/lib/DataStoreManager/DataStoreManager.ts index 787286da3..a9cdc9457 100644 --- a/src/client/lib/DataStoreManager/DataStoreManager.ts +++ b/src/client/lib/DataStoreManager/DataStoreManager.ts @@ -1,15 +1,15 @@ -import Client from "../../Client"; -import OrderedDataStore from "./structures/OrderedDataStore"; -import GlobalDataStore from "./structures/GlobalDataStore"; +import { Client } from "../../Client"; +import { OrderedDataStore } from "./structures/OrderedDataStore"; +import { GlobalDataStore } from "./structures/GlobalDataStore"; -export default class DataStoreManager { +export class DataStoreManager { public client: Client; - constructor (client: Client) { + constructor(client: Client) { this.client = client; } - getOrderedDataStore (placeId: number, name: string, scope?: string) { + getOrderedDataStore(placeId: number, name: string, scope?: string) { if (!this.client.isLoggedIn()) { throw new Error(`You must be logged in to be able to use data stores!`); } @@ -17,7 +17,7 @@ export default class DataStoreManager { return new OrderedDataStore(this, placeId, name, scope, false); } - getDataStore (placeId: number, name: string, scope?: string) { + getDataStore(placeId: number, name: string, scope?: string) { if (!this.client.isLoggedIn()) { throw new Error(`You must be logged in to be able to use data stores!`); } diff --git a/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts b/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts index f085f86ee..7897b2b9f 100644 --- a/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts +++ b/src/client/lib/DataStoreManager/structures/DataStoreHttpRequest.ts @@ -1,4 +1,4 @@ -import DataStoreManager from "../DataStoreManager"; +import { DataStoreManager } from "../DataStoreManager"; import { RESTRequestOptions, RESTResponseDataType @@ -11,17 +11,17 @@ type DataStoreHttpRequestOptions = RESTRequestOptions & { data: string; }; -export default class DataStoreHttpRequest { +export class DataStoreHttpRequest { public initiator: DataStoreManager; public options: DataStoreHttpRequestOptions; - constructor (manager: DataStoreManager, options: DataStoreHttpRequestOptions) { + constructor(manager: DataStoreManager, options: DataStoreHttpRequestOptions) { this.initiator = manager; this.options = options; // Adjusting the body - this.options.body - = this.options.data.length === 0 ? " " : this.options.data; + this.options.body = + this.options.data.length === 0 ? " " : this.options.data; // Always POST this.options.method = this.options.method || "POST"; @@ -35,7 +35,7 @@ export default class DataStoreHttpRequest { }; } - send (): Promise { + send(): Promise { return this.initiator.client.rest.request(this.options); } } diff --git a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts index 00b8aec3a..2b4193370 100644 --- a/src/client/lib/DataStoreManager/structures/GenericDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GenericDataStore.ts @@ -1,6 +1,6 @@ import * as querystring from "querystring"; -import DataStoreManager from "../DataStoreManager"; -import DataStoreHttpRequest from "./DataStoreHttpRequest"; +import { DataStoreManager } from "../DataStoreManager"; +import { DataStoreHttpRequest } from "./DataStoreHttpRequest"; import { DataStoreRequestType } from "../util/constants"; import { checkKey, @@ -19,7 +19,7 @@ type DataStoreKey = { }; type DataStoreValue = string; -export default class GenericDataStore { +export class GenericDataStore { public manager: DataStoreManager; public name: string; public scope: string; @@ -32,7 +32,7 @@ export default class GenericDataStore { serializeData?: (data: DataType) => string; }; - constructor ( + constructor( manager: DataStoreManager, dataStoreType: DataStoreType, placeId: number, @@ -60,7 +60,7 @@ export default class GenericDataStore { * @param {(data: string) => DataType} parseDataFunction * @param {(data: DataType) => string} serializeDataFunction */ - public setDataConverters ( + public setDataConverters( parseDataFunction: (data: string) => DataType, serializeDataFunction: (data: DataType) => string ): void { @@ -68,7 +68,7 @@ export default class GenericDataStore { this.advanced.serializeData = serializeDataFunction; } - buildPostDataForKey (key: string, index = 0): string { + buildPostDataForKey(key: string, index = 0): string { const encodedQueryString = querystring.encode({ [`qkeys[${index}].scope`]: this.scope ? this.safeEncodeValue(this.scope) @@ -82,13 +82,13 @@ export default class GenericDataStore { return `&${encodedQueryString}`; } - buildGetUrl (): string { + buildGetUrl(): string { const encodedQueryString = this.createQueryString({}); return `${this.baseAPIUrl}getV2?${encodedQueryString}`; } - buildSetUrl (key: string, valueLength: number): string { + buildSetUrl(key: string, valueLength: number): string { const encodedQueryString = this.createQueryString({ key: this.legacy ? this.safeEncodeValue(key) @@ -100,7 +100,7 @@ export default class GenericDataStore { return `${this.baseAPIUrl}set?${encodedQueryString}`; } - buildSetIfUrl ( + buildSetIfUrl( key: string, valueLength: number, expectedValueLength: number @@ -117,7 +117,7 @@ export default class GenericDataStore { return `${this.baseAPIUrl}set?${encodedQueryString}`; } - buildIncrementUrl (key: string, delta: number): string { + buildIncrementUrl(key: string, delta: number): string { const encodedQueryString = this.createQueryString({ key: this.legacy ? this.safeEncodeValue(key) @@ -129,7 +129,7 @@ export default class GenericDataStore { return `${this.baseAPIUrl}increment?${encodedQueryString}`; } - buildRemoveUrl (key: string): string { + buildRemoveUrl(key: string): string { const encodedQueryString = this.createQueryString({ key: this.legacy ? this.safeEncodeValue(key) @@ -140,7 +140,7 @@ export default class GenericDataStore { return `${this.baseAPIUrl}increment?${encodedQueryString}`; } - public parseRetrievedData (data: string): [boolean, Result | any] { + public parseRetrievedData(data: string): [boolean, Result | any] { let result = ""; if (data.length === 0) { @@ -162,7 +162,7 @@ export default class GenericDataStore { * @param {string} key * @returns {Promise} */ - public async getAsync (key: string): Promise { + public async getAsync(key: string): Promise { this.performPreflightChecks({ key }); @@ -201,7 +201,7 @@ export default class GenericDataStore { * @param {DataType} value * @returns {Promise} */ - public async setAsync (key: string, value: DataType): Promise { + public async setAsync(key: string, value: DataType): Promise { const serializedValue = this.serializeOutgoingData(value); this.performPreflightChecks({ key, @@ -226,7 +226,7 @@ export default class GenericDataStore { return this.parseIncomingData(parsedResponse.data as string); } - public incrementAsync (key: string, delta = 1): Promise { + public incrementAsync(key: string, delta = 1): Promise { this.performPreflightChecks({ key }); @@ -240,7 +240,7 @@ export default class GenericDataStore { return createdRequest.send(); } - public removeAsync (key: string): Promise { + public removeAsync(key: string): Promise { this.performPreflightChecks({ key }); @@ -254,7 +254,7 @@ export default class GenericDataStore { return createdRequest.send(); } - public createQueryString (addition: Record) { + public createQueryString(addition: Record) { return querystring.encode({ placeId: this.placeId, type: this.dataStoreType === "GlobalDataStore" ? "standard" : "sorted", @@ -269,7 +269,7 @@ export default class GenericDataStore { * @returns {DataType} * @private */ - parseIncomingData (data: string): DataType { + parseIncomingData(data: string): DataType { if (this.advanced.parseData) { return this.advanced.parseData(data); } else { @@ -284,7 +284,7 @@ export default class GenericDataStore { * @returns {string} * @private */ - serializeOutgoingData (data: DataType): string { + serializeOutgoingData(data: DataType): string { let serializedStage1: string | DataType = ""; if (this.advanced.serializeData) { @@ -308,7 +308,7 @@ export default class GenericDataStore { return serializedFinal; } - safeEncodeValue (input: string) { + safeEncodeValue(input: string) { return encodeURIComponent(input); } @@ -317,7 +317,7 @@ export default class GenericDataStore { * @param {{key?: string, value?: DataType}} options * @private */ - performPreflightChecks (options: { key?: string; value?: string }) { + performPreflightChecks(options: { key?: string; value?: string }) { checkScope(this.scope); checkName(this.name); checkPlaceId(this.placeId); diff --git a/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts b/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts index 42c7980f5..ae1e227e5 100644 --- a/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/GlobalDataStore.ts @@ -1,10 +1,8 @@ -import GenericDataStore from "./GenericDataStore"; -import DataStoreManager from "../DataStoreManager"; +import { GenericDataStore } from "./GenericDataStore"; +import { DataStoreManager } from "../DataStoreManager"; -export default class GlobalDataStore< - DataType -> extends GenericDataStore { - constructor ( +export class GlobalDataStore extends GenericDataStore { + constructor( manager: DataStoreManager, placeId: number, name: string, diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts index 142d59eb1..791e34135 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStore.ts @@ -1,10 +1,11 @@ -import GenericDataStore from "./GenericDataStore"; -import DataStoreManager from "../DataStoreManager"; -import DataStoreHttpRequest from "./DataStoreHttpRequest"; -import DataStoreManagerConstants, { +import { GenericDataStore } from "./GenericDataStore"; +import { DataStoreManager } from "../DataStoreManager"; +import { DataStoreHttpRequest } from "./DataStoreHttpRequest"; +import { + DataStoreManagerConstants, DataStoreRequestType } from "../util/constants"; -import OrderedDataStorePage from "./OrderedDataStorePage"; +import { OrderedDataStorePage } from "./OrderedDataStorePage"; export type GetSortedUrlOptions = { ascending?: boolean; @@ -23,10 +24,8 @@ export type OrderedDataStoreResultType = { }; }; -export default class OrderedDataStore< - DataType -> extends GenericDataStore { - constructor ( +export class OrderedDataStore extends GenericDataStore { + constructor( manager: DataStoreManager, placeId: number, name: string, @@ -43,7 +42,7 @@ export default class OrderedDataStore< ); } - public async getSortedAsync ( + public async getSortedAsync( options: GetSortedUrlOptions ): Promise> { this.performPreflightChecks({}); @@ -70,12 +69,12 @@ export default class OrderedDataStore< }); } - private buildGetSortedUrl (options: GetSortedUrlOptions) { + private buildGetSortedUrl(options: GetSortedUrlOptions) { const encodedQueryString = this.createQueryString({ key: this.safeEncodeValue(this.name), pageSize: - options.pageSize - || DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, + options.pageSize || + DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, ascending: options.ascending ? "True" : "False", inclusiveMinValue: options.minValue, inclusiveMaxValue: options.maxValue, diff --git a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts index 8d207870e..340608941 100644 --- a/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts +++ b/src/client/lib/DataStoreManager/structures/OrderedDataStorePage.ts @@ -1,15 +1,16 @@ -import OrderedDataStore, { +import { + OrderedDataStore, GetSortedUrlOptions, OrderedDataStoreResultType } from "./OrderedDataStore"; -export default class OrderedDataStorePage { +export class OrderedDataStorePage { public orderedDataStore: OrderedDataStore; public options: GetSortedUrlOptions; public data: { key: string; value: number }[]; public startKey: string | null; - constructor ( + constructor( orderedDataStore: OrderedDataStore, data: { options: GetSortedUrlOptions; result: OrderedDataStoreResultType } ) { @@ -22,7 +23,7 @@ export default class OrderedDataStorePage { this.startKey = data.result.data.ExclusiveStartKey; } - fetchNextPage (): Promise> { + fetchNextPage(): Promise> { if (!this.startKey) { throw new Error(`There is no next page!`); } diff --git a/src/client/lib/DataStoreManager/util/checks.ts b/src/client/lib/DataStoreManager/util/checks.ts index 021f0d5df..c646b7419 100644 --- a/src/client/lib/DataStoreManager/util/checks.ts +++ b/src/client/lib/DataStoreManager/util/checks.ts @@ -1,9 +1,9 @@ -import DataStoreManagerConstants from "./constants"; +import { DataStoreManagerConstants } from "./constants"; -export function checkKey (key: string): boolean { +export function checkKey(key: string): boolean { if ( - key.length === 0 - || key.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + key.length === 0 || + key.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit ) { throw new Error( `Key cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` @@ -13,7 +13,7 @@ export function checkKey (key: string): boolean { return true; } -export function checkPlaceId (placeId: number): boolean { +export function checkPlaceId(placeId: number): boolean { if (placeId < 1) { throw new Error(`Place ID must be greater than 1`); } @@ -21,10 +21,10 @@ export function checkPlaceId (placeId: number): boolean { return true; } -export function checkName (name: string): boolean { +export function checkName(name: string): boolean { if ( - name.length === 0 - || name.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + name.length === 0 || + name.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit ) { throw new Error( `DataStore name cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` @@ -34,10 +34,10 @@ export function checkName (name: string): boolean { return true; } -export function checkScope (scope: string): boolean { +export function checkScope(scope: string): boolean { if ( - scope.length === 0 - || scope.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit + scope.length === 0 || + scope.length > DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit ) { throw new Error( `DataStore scope cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!` @@ -47,10 +47,10 @@ export function checkScope (scope: string): boolean { return true; } -export function checkValue (value: string): boolean { +export function checkValue(value: string): boolean { if ( - value.length === 0 - || value.length > DataStoreManagerConstants.DFInt.DataStoreMaxValueSize + value.length === 0 || + value.length > DataStoreManagerConstants.DFInt.DataStoreMaxValueSize ) { throw new Error( `DataStore values cannot be blank or be more than ${DataStoreManagerConstants.DFInt.DataStoreMaxValueSize} characters!` diff --git a/src/client/lib/DataStoreManager/util/constants.ts b/src/client/lib/DataStoreManager/util/constants.ts index 0ce749f1a..98aa1ce39 100644 --- a/src/client/lib/DataStoreManager/util/constants.ts +++ b/src/client/lib/DataStoreManager/util/constants.ts @@ -6,7 +6,7 @@ export enum DataStoreRequestType { GET_SORTED_ASYNC_PAGE = 9 } -const DataStoreManagerConstants = { +export const DataStoreManagerConstants = { DFFlag: { UseNewDataStoreRequestSetTimestampBehaviour: false, GetGlobalDataStorePcallFix: false, @@ -18,5 +18,3 @@ const DataStoreManagerConstants = { DataStoreKeyLengthLimit: 50 } }; - -export default DataStoreManagerConstants; diff --git a/src/controllers/index.ts b/src/controllers/index.ts index f0adbf8e2..3791424a8 100644 --- a/src/controllers/index.ts +++ b/src/controllers/index.ts @@ -1,7 +1,7 @@ -import rest from "./rest"; +import { RESTController } from "./rest"; const controllers = { - rest + rest: RESTController }; export default controllers; diff --git a/src/controllers/rest/RESTController.ts b/src/controllers/rest/RESTController.ts index 8643bbc0b..d7e13624e 100644 --- a/src/controllers/rest/RESTController.ts +++ b/src/controllers/rest/RESTController.ts @@ -1,4 +1,4 @@ -import Client from "../../client/Client"; +import { Client } from "../../client/Client"; import { Cookie, CookieJar } from "tough-cookie"; import { DefaultCreateCookieOptions, @@ -11,13 +11,13 @@ import { RESTResponseDataType, RESTResponseHandler } from "../../interfaces/RESTInterfaces"; -import updateXCSRFToken from "./lib/updateXCSRFToken"; -import RESTRequest from "./request"; -import responseHandlers from "./response/handlers"; -import getRequester from "./lib/getRequester"; +import { updateXCSRFToken } from "./lib/updateXCSRFToken"; +import { RESTRequest } from "./request"; +import { responseHandlers } from "./response/handlers"; +import { getRequester } from "./lib/getRequester"; import { utilMergeDeep } from "../../util/utilFunctions"; -class RESTController { +export class RESTController { public client: Client; public options: RESTControllerOptions; public requester: RESTRequester; @@ -25,7 +25,7 @@ class RESTController { public responseHandlers: RESTResponseHandler[]; public requestHandlers: RESTRequestHandler[]; - constructor (client: Client, options?: RESTControllerOptions) { + constructor(client: Client, options?: RESTControllerOptions) { /** * The client */ @@ -60,7 +60,7 @@ class RESTController { * @param {RequestOptions} options The options * @returns {Promise} */ - request (options: RESTRequestOptions): Promise { + request(options: RESTRequestOptions): Promise { const request = new RESTRequest(this, options); return request.send(); @@ -70,7 +70,7 @@ class RESTController { * Fetches a new XCSRF token */ - fetchXCSRFToken (): Promise { + fetchXCSRFToken(): Promise { return updateXCSRFToken(this).then((xcsrfToken) => { this.setXCSRFToken(xcsrfToken); return xcsrfToken; @@ -81,7 +81,7 @@ class RESTController { * Sets the XCSRF token * @param {string} token The xcsrf token to use in future requets */ - setXCSRFToken (token: string): void { + setXCSRFToken(token: string): void { this.options.xcsrf = token; this.options.xcsrfSet = Date.now(); } @@ -90,12 +90,12 @@ class RESTController { * Gets the existing XCSRF token if it's not older than set refresh interval, * otherwise, fetch a new one */ - async getXCSRFToken (): Promise { + async getXCSRFToken(): Promise { if ( - !this.options.xcsrf - || Date.now() - (this.options.xcsrfSet || 0) - >= (this.options.xcsrfRefreshInterval - || DefaultRESTControllerOptions.xcsrfRefreshInterval) + !this.options.xcsrf || + Date.now() - (this.options.xcsrfSet || 0) >= + (this.options.xcsrfRefreshInterval || + DefaultRESTControllerOptions.xcsrfRefreshInterval) ) { // Refresh token await this.fetchXCSRFToken().then((token) => { @@ -111,7 +111,7 @@ class RESTController { * @param {RESTCreateCookieOptions} cookieOptions The options to use * @returns {Cookie} */ - createCookie (cookieOptions: RESTCreateCookieOptions): Cookie { + createCookie(cookieOptions: RESTCreateCookieOptions): Cookie { return new Cookie({ ...DefaultCreateCookieOptions, ...cookieOptions @@ -125,7 +125,7 @@ class RESTController { * @param {Object} setCookieOptions Options for setting the cookie * @returns {Cookie} */ - addCookie (cookie: Cookie, domain?: string, setCookieOptions?: any): Cookie { + addCookie(cookie: Cookie, domain?: string, setCookieOptions?: any): Cookie { return this.cookieJar.setCookieSync( cookie, domain || "https://roblox.com", @@ -138,7 +138,7 @@ class RESTController { * @param {string} domain The domain to retrieve the cookies for * @returns {Cookie[]} */ - getCookies (domain: string): Cookie[] { + getCookies(domain: string): Cookie[] { return this.cookieJar.getCookiesSync(domain); } @@ -146,7 +146,7 @@ class RESTController { * Adds a response handler * @param {Function} handler The response handler */ - addResponseHandler (handler: RESTResponseHandler): void { + addResponseHandler(handler: RESTResponseHandler): void { this.responseHandlers.push(handler); } @@ -154,7 +154,7 @@ class RESTController { * Adds a request handler * @param {Function} handler The request handler */ - addRequestHandler (handler: RESTRequestHandler): void { + addRequestHandler(handler: RESTRequestHandler): void { this.requestHandlers.push(handler); } @@ -162,7 +162,7 @@ class RESTController { * Sets the proxy for the requests * @param {string} proxyURL The proxy URL */ - setProxy (proxyURL: string): void { + setProxy(proxyURL: string): void { this.options.proxy = proxyURL; } @@ -170,7 +170,7 @@ class RESTController { * Gets the proxy used * @returns {string | undefined} */ - getProxy (): string | undefined { + getProxy(): string | undefined { return this.options.proxy; } @@ -178,7 +178,7 @@ class RESTController { * Sets the user agents for future requests * @param {string} userAgent The user agent to use */ - setUserAgent (userAgent: string): void { + setUserAgent(userAgent: string): void { this.options.userAgent = userAgent; } @@ -186,7 +186,7 @@ class RESTController { * Gets the user agent * @returns {string | undefined} */ - getUserAgent (): string | undefined { + getUserAgent(): string | undefined { return this.options.userAgent; } @@ -194,7 +194,7 @@ class RESTController { * Sets the XCSRF token refresh interval * @param {number} xcsrfRefreshInterval The time in ms to use */ - setXCSRFTokenRefreshInterval (xcsrfRefreshInterval: number): void { + setXCSRFTokenRefreshInterval(xcsrfRefreshInterval: number): void { this.options.xcsrfRefreshInterval = xcsrfRefreshInterval; } @@ -202,7 +202,7 @@ class RESTController { * Gets the XCSRF token refresh interval * @returns {number | undefined} */ - getXCSRFTokenRefreshInterval (): number | undefined { + getXCSRFTokenRefreshInterval(): number | undefined { return this.options.xcsrfRefreshInterval; } @@ -211,7 +211,7 @@ class RESTController { * tokens on Token Validation errors * @param {number} xcsrfRefreshMaxRetries Number of retries */ - setXCSRFTokenRefreshMaxRetries (xcsrfRefreshMaxRetries: number): void { + setXCSRFTokenRefreshMaxRetries(xcsrfRefreshMaxRetries: number): void { this.options.xcsrfRefreshMaxRetries = xcsrfRefreshMaxRetries; } @@ -220,7 +220,7 @@ class RESTController { * tokens on Token Validation errors * @returns {number | undefined} */ - getXCSRFTokenRefreshMaxRetries (): number | undefined { + getXCSRFTokenRefreshMaxRetries(): number | undefined { return this.options.xcsrfRefreshMaxRetries; } @@ -229,7 +229,7 @@ class RESTController { * @param {RESTControllerOptions} options The options to use * @returns {RESTControllerOptions} */ - setOptions (options?: RESTControllerOptions): RESTControllerOptions { + setOptions(options?: RESTControllerOptions): RESTControllerOptions { this.options = utilMergeDeep( DefaultRESTControllerOptions, options || {} @@ -238,5 +238,3 @@ class RESTController { return this.options; } } - -export default RESTController; diff --git a/src/controllers/rest/index.ts b/src/controllers/rest/index.ts index 96a9592c2..67f3f39a4 100644 --- a/src/controllers/rest/index.ts +++ b/src/controllers/rest/index.ts @@ -1 +1 @@ -export { default } from "./RESTController"; +export { RESTController } from "./RESTController"; diff --git a/src/controllers/rest/lib/getRequester.ts b/src/controllers/rest/lib/getRequester.ts index d10a695a0..c525ebe8b 100644 --- a/src/controllers/rest/lib/getRequester.ts +++ b/src/controllers/rest/lib/getRequester.ts @@ -1,14 +1,14 @@ -import RESTController from "../RESTController"; +import { RESTController } from "../RESTController"; import got from "got"; -export default function getRequester ( +export function getRequester( controller: RESTController, customRequester?: RESTController["requester"] ) { if ( - !controller.requester - && !controller.client.options.rest!.requester - && customRequester === undefined + !controller.requester && + !controller.client.options.rest!.requester && + customRequester === undefined ) { let requester: null | any; diff --git a/src/controllers/rest/lib/updateXCSRFToken.ts b/src/controllers/rest/lib/updateXCSRFToken.ts index 1150c5e13..b760af3e7 100644 --- a/src/controllers/rest/lib/updateXCSRFToken.ts +++ b/src/controllers/rest/lib/updateXCSRFToken.ts @@ -1,6 +1,6 @@ -import RESTController from "../RESTController"; +import { RESTController } from "../RESTController"; -export default function updateXCSRFToken ( +export function updateXCSRFToken( restController: RESTController ): Promise { return restController diff --git a/src/controllers/rest/request/RESTRequest.ts b/src/controllers/rest/request/RESTRequest.ts index a1449a748..f34862967 100644 --- a/src/controllers/rest/request/RESTRequest.ts +++ b/src/controllers/rest/request/RESTRequest.ts @@ -3,12 +3,12 @@ import { RESTRequestOptions, RESTResponseDataType } from "../../../interfaces/RESTInterfaces"; -import RESTController from "../RESTController"; -import prepare from "./prepare"; -import RESTResponse from "../response"; +import { RESTController } from "../RESTController"; +import { prepare } from "./prepare"; +import { RESTResponse } from "../response"; import { utilMergeDeep } from "../../../util/utilFunctions"; -class RESTRequest { +export class RESTRequest { public controller: RESTController; /** * The options that will be used for sending the request @@ -20,13 +20,13 @@ class RESTRequest { */ public attempts: number; - constructor (controller: RESTController, options: RESTRequestOptions) { + constructor(controller: RESTController, options: RESTRequestOptions) { this.controller = controller; this.requestOptions = options; this.attempts = 0; } - setOptions (options: RESTRequestOptions): RESTRequestOptions { + setOptions(options: RESTRequestOptions): RESTRequestOptions { // As lodash overwrites all entries that are provided with each other, it also mutates the default // This way, it creates a clone of the default each time, so there's "new" default data each time this.requestOptions = utilMergeDeep( @@ -36,7 +36,7 @@ class RESTRequest { return this.requestOptions; } - async send (options?: RESTRequestOptions): Promise { + async send(options?: RESTRequestOptions): Promise { await prepare(this, options || this.requestOptions); await Promise.all( this.controller.requestHandlers.map((handler) => handler(this)) @@ -49,5 +49,3 @@ class RESTRequest { return response.process(); } } - -export default RESTRequest; diff --git a/src/controllers/rest/request/index.ts b/src/controllers/rest/request/index.ts index bf3bd9dd6..c83b23eaf 100644 --- a/src/controllers/rest/request/index.ts +++ b/src/controllers/rest/request/index.ts @@ -1 +1 @@ -export { default } from "./RESTRequest"; +export { RESTRequest } from "./RESTRequest"; diff --git a/src/controllers/rest/request/prepare.ts b/src/controllers/rest/request/prepare.ts index 8a0af2d76..bfa8f2607 100644 --- a/src/controllers/rest/request/prepare.ts +++ b/src/controllers/rest/request/prepare.ts @@ -1,8 +1,8 @@ import { RESTRequestOptions } from "../../../interfaces/RESTInterfaces"; -import RESTRequest from "./"; +import { RESTRequest } from "./"; import querystring from "querystring"; -export default async function prepare ( +export async function prepare( request: RESTRequest, options: RESTRequestOptions ): Promise { @@ -32,9 +32,9 @@ export default async function prepare ( } } if ( - (request.requestOptions.xcsrf !== false - && request.requestOptions.method.toLowerCase() !== "get") - || request.requestOptions.xcsrf === true + (request.requestOptions.xcsrf !== false && + request.requestOptions.method.toLowerCase() !== "get") || + request.requestOptions.xcsrf === true ) { request.requestOptions.headers = { ...request.requestOptions.headers, @@ -51,16 +51,16 @@ export default async function prepare ( ); } if (request.requestOptions.json) { - request.requestOptions.body - = typeof request.requestOptions.json === "string" + request.requestOptions.body = + typeof request.requestOptions.json === "string" ? request.requestOptions.json : JSON.stringify(request.requestOptions.json); request.requestOptions.headers["content-type"] = "application/json"; delete request.requestOptions.json; } if (!request.requestOptions.excludeCookies) { - request.requestOptions.headers.Cookie - = request.controller.cookieJar.getCookieStringSync( + request.requestOptions.headers.Cookie = + request.controller.cookieJar.getCookieStringSync( request.requestOptions.url ); } diff --git a/src/controllers/rest/response/RESTResponse.ts b/src/controllers/rest/response/RESTResponse.ts index d297ec1fe..ec878517e 100644 --- a/src/controllers/rest/response/RESTResponse.ts +++ b/src/controllers/rest/response/RESTResponse.ts @@ -1,16 +1,16 @@ -import RESTController from "../RESTController"; -import RESTRequest from "../request"; +import { RESTController } from "../RESTController"; +import { RESTRequest } from "../request"; import { BloxyHttpError } from "../../../util/errors/errors"; import { RESTResponseDataType } from "../../../interfaces/RESTInterfaces"; -export default class RESTResponse { +export class RESTResponse { public controller: RESTController; public request: RESTRequest; public responseData: RESTResponseDataType; // Public options: RESTResponseOptions; - constructor ( + constructor( controller: RESTController, request: RESTRequest, responseData: RESTResponseDataType @@ -21,7 +21,7 @@ export default class RESTResponse { } // eslint-disable-next-line require-await - async process (): Promise { + async process(): Promise { const allProcessed = this.controller.responseHandlers.map((handler) => handler(this) ); @@ -31,16 +31,16 @@ export default class RESTResponse { } else { const error = allProcessed.find( (err) => - err instanceof BloxyHttpError - && err.name === "BloxyHttpInvalidStatusMessageError" - && err.statusMessage.includes("Token Validation Failed") + err instanceof BloxyHttpError && + err.name === "BloxyHttpInvalidStatusMessageError" && + err.statusMessage.includes("Token Validation Failed") ); if (error) { // 1 attempt = 0 retries if ( - this.request.attempts - 1 - === this.controller.getXCSRFTokenRefreshMaxRetries() + this.request.attempts - 1 === + this.controller.getXCSRFTokenRefreshMaxRetries() ) { throw error; } else { diff --git a/src/controllers/rest/response/handlers/index.ts b/src/controllers/rest/response/handlers/index.ts index 088e8a6b5..5ee7ec6f7 100644 --- a/src/controllers/rest/response/handlers/index.ts +++ b/src/controllers/rest/response/handlers/index.ts @@ -1,13 +1,11 @@ -import validBody from "./validBody"; -import validStatusMessage from "./validStatusMessage"; -import validStatusCode from "./validStatusCode"; -import updateHeaders from "./updateHeaders"; +import { validBody } from "./validBody"; +import { validStatusMessage } from "./validStatusMessage"; +import { validStatusCode } from "./validStatusCode"; +import { updateHeaders } from "./updateHeaders"; -const responseHandlers = [ +export const responseHandlers = [ updateHeaders, validStatusCode, validStatusMessage, validBody ]; - -export default responseHandlers; diff --git a/src/controllers/rest/response/handlers/updateHeaders.ts b/src/controllers/rest/response/handlers/updateHeaders.ts index 91e5b91b9..b7672ae76 100644 --- a/src/controllers/rest/response/handlers/updateHeaders.ts +++ b/src/controllers/rest/response/handlers/updateHeaders.ts @@ -1,7 +1,7 @@ -import RESTResponse from "../RESTResponse"; +import { RESTResponse } from "../RESTResponse"; import { Cookie } from "tough-cookie"; -export default function updateHeaders (response: RESTResponse): boolean { +export function updateHeaders(response: RESTResponse): boolean { if (response.responseData.headers["set-cookie"]) { const setCookieHeader = response.responseData.headers["set-cookie"]; diff --git a/src/controllers/rest/response/handlers/validBody.ts b/src/controllers/rest/response/handlers/validBody.ts index 5e0b1088e..2cce3bdbc 100644 --- a/src/controllers/rest/response/handlers/validBody.ts +++ b/src/controllers/rest/response/handlers/validBody.ts @@ -1,3 +1,3 @@ -export default function validBody (): boolean { +export function validBody(): boolean { return true; } diff --git a/src/controllers/rest/response/handlers/validStatusCode.ts b/src/controllers/rest/response/handlers/validStatusCode.ts index 8924a2f45..e02ccf381 100644 --- a/src/controllers/rest/response/handlers/validStatusCode.ts +++ b/src/controllers/rest/response/handlers/validStatusCode.ts @@ -1,25 +1,23 @@ -import RESTResponse from "../RESTResponse"; +import { RESTResponse } from "../RESTResponse"; import { BloxyHttpError } from "../../../../util/errors/errors"; -export default function validStatusCode ( - response: RESTResponse -): boolean | Error { +export function validStatusCode(response: RESTResponse): boolean | Error { const { request, responseData } = response; let isValid = true; const responseOptions = request.requestOptions.responseOptions || {}; if ( - request.requestOptions.responseOptions - && request.requestOptions.checks?.statusCode + request.requestOptions.responseOptions && + request.requestOptions.checks?.statusCode ) { const allowedStatusCodes = responseOptions.allowedStatusCodes || []; const disallowedStatusCodes = responseOptions.disallowedStatusCodes || []; const isAllowed = allowedStatusCodes.some( - (statusCode) => responseData.statusCode === statusCode + (statusCode: number) => responseData.statusCode === statusCode ); const isDisallowed = disallowedStatusCodes.some( - (statusCode) => responseData.statusCode === statusCode + (statusCode: number) => responseData.statusCode === statusCode ); if (allowedStatusCodes.length > 0) { @@ -28,16 +26,16 @@ export default function validStatusCode ( isValid = false; } } else if ( - allowedStatusCodes.length === 0 - && disallowedStatusCodes.length > 0 + allowedStatusCodes.length === 0 && + disallowedStatusCodes.length > 0 ) { // Only these are disallowed if (isDisallowed) { isValid = false; } } else if ( - allowedStatusCodes.length === 0 - && disallowedStatusCodes.length === 0 + allowedStatusCodes.length === 0 && + disallowedStatusCodes.length === 0 ) { // All status are allowed } @@ -46,14 +44,14 @@ export default function validStatusCode ( return isValid ? true : new BloxyHttpError({ - statusMessage: responseData.statusMessage, - statusCode: responseData.statusCode, - message: `Invalid status code in response. Body: ${ - responseData.body instanceof Object - ? JSON.stringify(responseData.body) - : responseData.body - }`, - name: "BloxyHttpInvalidStatusCodeError", - possibleReasons: [] - }); + statusMessage: responseData.statusMessage, + statusCode: responseData.statusCode, + message: `Invalid status code in response. Body: ${ + responseData.body instanceof Object + ? JSON.stringify(responseData.body) + : responseData.body + }`, + name: "BloxyHttpInvalidStatusCodeError", + possibleReasons: [] + }); } diff --git a/src/controllers/rest/response/handlers/validStatusMessage.ts b/src/controllers/rest/response/handlers/validStatusMessage.ts index fd6a8b8f9..f81ee67ca 100644 --- a/src/controllers/rest/response/handlers/validStatusMessage.ts +++ b/src/controllers/rest/response/handlers/validStatusMessage.ts @@ -1,26 +1,25 @@ -import RESTResponse from "../RESTResponse"; +import { RESTResponse } from "../RESTResponse"; import { BloxyHttpError } from "../../../../util/errors/errors"; -export default function validStatusMessage ( - response: RESTResponse -): boolean | Error { +export function validStatusMessage(response: RESTResponse): boolean | Error { const { request, responseData } = response; const responseOptions = request.requestOptions.responseOptions || {}; let isValid = true; if ( - request.requestOptions.responseOptions - && request.requestOptions.checks?.statusMessage + request.requestOptions.responseOptions && + request.requestOptions.checks?.statusMessage ) { const allowedStatusMessages = responseOptions.allowedStatusMessages || []; - const disallowedStatusMessages - = responseOptions.disallowedStatusMessages || []; + const disallowedStatusMessages = + responseOptions.disallowedStatusMessages || []; - const isAllowed = allowedStatusMessages.some((statusMessage) => + const isAllowed = allowedStatusMessages.some((statusMessage: string) => responseData.statusMessage.toLowerCase().includes(statusMessage) ); - const isDisallowed = disallowedStatusMessages.some((statusMessage) => - responseData.statusMessage.toLowerCase().includes(statusMessage) + const isDisallowed = disallowedStatusMessages.some( + (statusMessage: string) => + responseData.statusMessage.toLowerCase().includes(statusMessage) ); if (allowedStatusMessages.length > 0) { @@ -29,16 +28,16 @@ export default function validStatusMessage ( isValid = false; } } else if ( - allowedStatusMessages.length === 0 - && disallowedStatusMessages.length > 0 + allowedStatusMessages.length === 0 && + disallowedStatusMessages.length > 0 ) { // Only these are disallowed if (isDisallowed) { isValid = false; } } else if ( - allowedStatusMessages.length === 0 - && disallowedStatusMessages.length === 0 + allowedStatusMessages.length === 0 && + disallowedStatusMessages.length === 0 ) { // All status are allowed } @@ -47,10 +46,10 @@ export default function validStatusMessage ( return isValid ? true : new BloxyHttpError({ - statusCode: responseData.statusCode, - statusMessage: responseData.statusMessage, - message: `Invalid status message detected in response.`, - name: "BloxyHttpInvalidStatusMessageError", - possibleReasons: [] - }); + statusCode: responseData.statusCode, + statusMessage: responseData.statusMessage, + message: `Invalid status message detected in response.`, + name: "BloxyHttpInvalidStatusMessageError", + possibleReasons: [] + }); } diff --git a/src/controllers/rest/response/index.ts b/src/controllers/rest/response/index.ts index e960e903a..fa4300af3 100644 --- a/src/controllers/rest/response/index.ts +++ b/src/controllers/rest/response/index.ts @@ -1 +1 @@ -export { default } from "./RESTResponse"; +export { RESTResponse } from "./RESTResponse"; diff --git a/src/index.ts b/src/index.ts index 9d14c9dbd..f5c2e1ce9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,4 @@ -export { default as Client } from "./client"; -export const test = true; +export { Client } from "./client"; // Generic Types export * from "./types/GenericTypes"; diff --git a/src/interfaces/GeneralInterfaces.ts b/src/interfaces/GeneralInterfaces.ts index 49d32d329..d51743cef 100644 --- a/src/interfaces/GeneralInterfaces.ts +++ b/src/interfaces/GeneralInterfaces.ts @@ -1,4 +1,4 @@ -import ClientUser from "../structures/ClientUser"; +import { ClientUser } from "../structures/ClientUser"; export declare type AnyIdentifier = string | number; export declare type UserIdentifier = ClientUser | AnyIdentifier; diff --git a/src/interfaces/RESTInterfaces.ts b/src/interfaces/RESTInterfaces.ts index 3b0c54a4b..6ddf55486 100644 --- a/src/interfaces/RESTInterfaces.ts +++ b/src/interfaces/RESTInterfaces.ts @@ -1,5 +1,5 @@ -import RESTRequest from "../controllers/rest/request"; -import RESTResponse from "../controllers/rest/response"; +import { RESTRequest } from "../controllers/rest/request"; +import { RESTResponse } from "../controllers/rest/response"; export declare type RESTRequester = ( requestOptions: RESTRequestOptions diff --git a/src/structures/Asset.ts b/src/structures/Asset.ts index 672cb6238..c6cde5de9 100644 --- a/src/structures/Asset.ts +++ b/src/structures/Asset.ts @@ -1,4 +1,4 @@ -import Client from "../client"; +import { Client } from "../client"; import { CreatorType } from "../util/constants"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; import { PartialUser, PartialUserOptions } from "./User"; diff --git a/src/structures/Chat.ts b/src/structures/Chat.ts index af7f5ef6f..a3931aee3 100644 --- a/src/structures/Chat.ts +++ b/src/structures/Chat.ts @@ -1,4 +1,4 @@ -import Client from "../client"; +import { Client } from "../client"; import { PartialUser, PartialUserOptions } from "./User"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; import { diff --git a/src/structures/ClientUser.ts b/src/structures/ClientUser.ts index d7032046f..2b0dea674 100644 --- a/src/structures/ClientUser.ts +++ b/src/structures/ClientUser.ts @@ -1,4 +1,4 @@ -import Client from "../client"; +import { Client } from "../client"; import { PartialUser } from "./User"; export interface ClientUserOptions { @@ -6,7 +6,7 @@ export interface ClientUserOptions { name: string; } -export default class ClientUser extends PartialUser { +export class ClientUser extends PartialUser { public client: Client; constructor(data: ClientUserOptions, client: Client) { diff --git a/src/structures/Game.ts b/src/structures/Game.ts index ca482863d..3a3654c60 100644 --- a/src/structures/Game.ts +++ b/src/structures/Game.ts @@ -1,4 +1,4 @@ -import Client from "../client"; +import { Client } from "../client"; import { CreatorType, GameGenre, MorphAvatarType } from "../util/constants"; import { PartialGroup, PartialGroupOptions } from "./Group"; import { PartialUser, PartialUserOptions } from "./User"; diff --git a/src/structures/Group.ts b/src/structures/Group.ts index 2d50fab91..86882fce3 100644 --- a/src/structures/Group.ts +++ b/src/structures/Group.ts @@ -1,4 +1,4 @@ -import Client from "../client"; +import { Client } from "../client"; import { DevelopGetGroupUniversesOptions } from "../client/apis/DevelopAPI"; import { CursorPage } from "./Asset"; import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; diff --git a/src/structures/User.ts b/src/structures/User.ts index 2db16da3a..4927aa462 100644 --- a/src/structures/User.ts +++ b/src/structures/User.ts @@ -1,4 +1,4 @@ -import Client from "../client"; +import { Client } from "../client"; import { EnumUserPresence } from "../interfaces/GeneralInterfaces"; export interface UserBaseOptions { From b1c1e747c4bf47280540171cb4134b01af8b7341 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sun, 9 Jan 2022 08:36:20 +0100 Subject: [PATCH 21/24] Fix unit tests --- tests/internal/datastoremanager.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/internal/datastoremanager.spec.ts b/tests/internal/datastoremanager.spec.ts index 03a6bad1a..26858832e 100644 --- a/tests/internal/datastoremanager.spec.ts +++ b/tests/internal/datastoremanager.spec.ts @@ -1,6 +1,6 @@ import { Client } from "../../dist"; import { expect } from "chai"; -import GlobalDataStore from "../../dist/client/lib/DataStoreManager/structures/GlobalDataStore"; +import { GlobalDataStore } from "../../dist/client/lib/DataStoreManager/structures/GlobalDataStore"; import {} from "mocha"; const authenticatedClient = new Client(); From bfcfca58578607db1e715479d09ea71fea765805 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Sat, 15 Jan 2022 11:14:12 +0100 Subject: [PATCH 22/24] Rewrite `BaseUser` and `User`, documented it --- src/client/Client.ts | 67 +--- src/client/apis/DevelopAPI.ts | 2 +- src/client/apis/FriendsAPI.ts | 5 +- src/client/apis/GamesAPI.ts | 2 +- src/client/apis/GeneralAPI.ts | 5 +- src/client/apis/PresenceAPI.ts | 21 +- src/client/apis/UsersAPI.ts | 4 + src/client/lib/ChatManager/ChatManager.ts | 2 +- src/client/lib/ClientSocket/ClientSocket.ts | 4 +- .../handlers/chatNotifications.ts | 6 +- .../handlers/friendShipnotifications.ts | 4 +- .../handlers/presenceBulkNotifications.ts | 4 +- src/interfaces/GeneralInterfaces.ts | 2 +- src/{structures => old_structures}/Asset.ts | 0 src/{structures => old_structures}/Chat.ts | 0 .../ClientUser.ts | 0 src/{structures => old_structures}/Game.ts | 0 src/{structures => old_structures}/Group.ts | 0 src/old_structures/User.ts | 187 ++++++++++ src/{structures => old_structures}/index.ts | 0 src/structures/BaseUser.ts | 335 ++++++++++++++++++ src/structures/CursorPage.ts | 102 ++++++ src/structures/User.ts | 207 ++--------- src/types/GenericOptionTypes.ts | 4 + 24 files changed, 705 insertions(+), 258 deletions(-) rename src/{structures => old_structures}/Asset.ts (100%) rename src/{structures => old_structures}/Chat.ts (100%) rename src/{structures => old_structures}/ClientUser.ts (100%) rename src/{structures => old_structures}/Game.ts (100%) rename src/{structures => old_structures}/Group.ts (100%) create mode 100644 src/old_structures/User.ts rename src/{structures => old_structures}/index.ts (100%) create mode 100644 src/structures/BaseUser.ts create mode 100644 src/structures/CursorPage.ts diff --git a/src/client/Client.ts b/src/client/Client.ts index afc73e9c9..6aa797d57 100644 --- a/src/client/Client.ts +++ b/src/client/Client.ts @@ -1,11 +1,13 @@ import { ClientBase, ClientOptions } from "./ClientBase"; import { initAPIs, APIs } from "./apis"; -import { ClientUser } from "../structures/ClientUser"; +import { ClientUser } from "../old_structures/ClientUser"; import { RESTController } from "../controllers/rest"; -import { Group, PartialUser, User } from "../structures"; +import { Group, PartialUser } from "../old_structures"; import * as ClientSocket from "./lib/ClientSocket/ClientSocket"; import { ChatManager } from "./lib/ChatManager/ChatManager"; import { DataStoreManager } from "./lib/DataStoreManager/DataStoreManager"; +import { User } from "../structures/User"; +import { BaseUser } from "../structures/BaseUser"; export class Client extends ClientBase { public user: ClientUser | null; @@ -101,54 +103,21 @@ export class Client extends ClientBase { }); } - getUser(userId: number | string): Promise { - if (typeof userId === "string") { - userId = parseInt(userId); - } + /** + * Returns a base user object from a user id. + * @param userId The user's ID + */ + getBaseUser(userId: number): BaseUser { + return new BaseUser(this, userId); + } - return this.apis.otherAPI - .getUserProfileHeader({ - userId - }) - .then( - (data) => - new User( - { - id: data.ProfileUserId, - name: data.ProfileUserName, - displayName: data.ProfileDisplayName, - canFollow: data.CanBeFollowed, - canSeeInventory: data.CanSeeInventory, - canTrade: data.CanTrade, - incomingFriendRequest: data.IncomingFriendRequestPending, - sentFriendRequest: data.FriendRequestPending, - canMessage: data.CanMessage, - isViewerBlocked: data.IsViewerBlocked, - isVieweeBlocked: data.IsVieweeBlocked, - followingsCount: data.FollowingsCount, - followersCount: data.FollowersCount, - userPlaceId: data.UserPlaceId, - userStatusDate: data.UserStatusDate, - userStatus: data.UserStatus, - presenceType: data.UserPresenceType, - friendsCount: data.FriendsCount, - canFriend: data.MaySendFriendInvitation, - areFriends: data.AreFriends, - lastLocation: data.LastLocation, - canSeeFavorites: data.CanSeeFavorites, - headShotImage: { - final: data.HeadShotImage.Final, - endpointType: data.HeadShotImage.EndpointType, - retryUrl: data.HeadShotImage.RetryUrl, - url: data.HeadShotImage.Url, - userId: data.HeadShotImage.UserId - }, - messagesDisabled: data.MessagesDisabled, - previousUsernames: data.PreviousUserNames - }, - this - ) - ); + /** + * Returns a user object from a user id. + * @param userId The user's ID + */ + async getUser(userId: number): Promise { + const data = await this.apis.usersAPI.getUserById({ userId }); + return new User(this, data); } getUserIdFromUsername(username: string): Promise { diff --git a/src/client/apis/DevelopAPI.ts b/src/client/apis/DevelopAPI.ts index aab6ee677..d3b0d0995 100644 --- a/src/client/apis/DevelopAPI.ts +++ b/src/client/apis/DevelopAPI.ts @@ -1,6 +1,6 @@ import { BaseAPI } from "./BaseAPI"; import { Client } from "../Client"; -import { PartialGroupOptions } from "../../structures/Group"; +import { PartialGroupOptions } from "../../old_structures/Group"; import { ISOString } from "../../types/GenericTypes"; export type DevelopGameUniverseOptions = { diff --git a/src/client/apis/FriendsAPI.ts b/src/client/apis/FriendsAPI.ts index 5c7875fb9..1759f096f 100644 --- a/src/client/apis/FriendsAPI.ts +++ b/src/client/apis/FriendsAPI.ts @@ -4,7 +4,7 @@ import { GeneralGetUserFriendsCount, GeneralGetUserFriendsCountOptions } from "./GeneralAPI"; -import { PartialUser } from "../../structures/User"; +import { PartialUser } from "../../old_structures/User"; import { EnumUserPresence, UserPresence @@ -99,8 +99,7 @@ export type FriendsGetUserFollowingCountOptions = FriendsGetUserFollowersCountOptions; export type FriendsGetUserFollowingCount = FriendsGetUserFollowersCount; export type FriendsGetUserFriendsOptions = { - cursor?: string; - limit?: 10 | 25 | 50 | 100; + userSort?: "Alphabetical" | "StatusAlphabetical" | "StatusFrequents"; userId: number; }; export type FriendsGetUserFriends = { diff --git a/src/client/apis/GamesAPI.ts b/src/client/apis/GamesAPI.ts index e96a60b99..71dd65345 100644 --- a/src/client/apis/GamesAPI.ts +++ b/src/client/apis/GamesAPI.ts @@ -5,7 +5,7 @@ import { PartialGameUniverse, PlaceOptions, VIPServerOptions -} from "../../structures/Game"; +} from "../../old_structures/Game"; export type GamesGameServer = { id: string; diff --git a/src/client/apis/GeneralAPI.ts b/src/client/apis/GeneralAPI.ts index 44adb0699..90d994972 100644 --- a/src/client/apis/GeneralAPI.ts +++ b/src/client/apis/GeneralAPI.ts @@ -1,6 +1,9 @@ import { BaseAPI } from "./BaseAPI"; import { Client } from "../Client"; -import { AssetVersionOptions, ProductOptions } from "../../structures/Asset"; +import { + AssetVersionOptions, + ProductOptions +} from "../../old_structures/Asset"; export declare type GeneralGetAssetVersionOptions = number; export declare type GeneralAwardBadgeOptions = { diff --git a/src/client/apis/PresenceAPI.ts b/src/client/apis/PresenceAPI.ts index 463ed1ece..9447a56b7 100644 --- a/src/client/apis/PresenceAPI.ts +++ b/src/client/apis/PresenceAPI.ts @@ -12,16 +12,17 @@ export type PresenceGetUsersPresencesOptions = { userIds: number[]; }; export type PresenceGetUsersPresences = { - userPresences: { - userPresenceType: EnumUserPresence; - lastLocation: string; - placeId: number; - rootPlaceId: number; - gameId: string; - universeId: number; - userId: number; - lastOnline: string; - }[]; + userPresences: PresenceGetUsersPresence[]; +}; +export type PresenceGetUsersPresence = { + userPresenceType: EnumUserPresence; + lastLocation: string; + placeId: number; + rootPlaceId: number; + gameId: string; + universeId: number; + userId: number; + lastOnline: string; }; export class PresenceAPI extends BaseAPI { diff --git a/src/client/apis/UsersAPI.ts b/src/client/apis/UsersAPI.ts index ff97c5d92..5dfd6a3bc 100644 --- a/src/client/apis/UsersAPI.ts +++ b/src/client/apis/UsersAPI.ts @@ -26,6 +26,7 @@ export type UsersGetUserById = { id: number; name: string; displayName: string; + externalAppDisplayName: string; }; export type UsersGetSelfAuthenticatedUserInformation = { id: number; @@ -184,6 +185,9 @@ export class UsersAPI extends BaseAPI { getUserNameHistory(options: { userId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; }): Promise { return this.request({ requiresAuth: false, diff --git a/src/client/lib/ChatManager/ChatManager.ts b/src/client/lib/ChatManager/ChatManager.ts index 2fd7ddb11..79ff43e01 100644 --- a/src/client/lib/ChatManager/ChatManager.ts +++ b/src/client/lib/ChatManager/ChatManager.ts @@ -19,7 +19,7 @@ import { ChatConversation, ChatMessage, ChatMessageSent -} from "../../../structures/Chat"; +} from "../../../old_structures/Chat"; export class ChatManager { public client: Client; diff --git a/src/client/lib/ClientSocket/ClientSocket.ts b/src/client/lib/ClientSocket/ClientSocket.ts index 505fdff0a..7c4b2bc85 100644 --- a/src/client/lib/ClientSocket/ClientSocket.ts +++ b/src/client/lib/ClientSocket/ClientSocket.ts @@ -4,8 +4,8 @@ import { Client } from "../../Client"; import * as SignalR from "signalr-client"; import { default as socketHandlers } from "./handlers"; import { EventEmitter } from "events"; -import { PartialChatConversation } from "../../../structures/Chat"; -import { PartialUser } from "../../../structures/User"; +import { PartialChatConversation } from "../../../old_structures/Chat"; +import { PartialUser } from "../../../old_structures/User"; export declare interface Socket extends EventEmitter { on( diff --git a/src/client/lib/ClientSocket/handlers/chatNotifications.ts b/src/client/lib/ClientSocket/handlers/chatNotifications.ts index 723c97a43..f9e39152b 100644 --- a/src/client/lib/ClientSocket/handlers/chatNotifications.ts +++ b/src/client/lib/ClientSocket/handlers/chatNotifications.ts @@ -1,8 +1,8 @@ import * as ClientSocket from "../ClientSocket"; -import { PartialChatConversation } from "../../../../structures/Chat"; -import { PartialUser } from "../../../../structures/User"; +import { PartialChatConversation } from "../../../../old_structures/Chat"; +import { PartialUser } from "../../../../old_structures/User"; -export default function handleChatNotifications ( +export default function handleChatNotifications( socket: ClientSocket.Socket, messageType: string, message: any diff --git a/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts b/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts index f1b123f34..a55f98058 100644 --- a/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts +++ b/src/client/lib/ClientSocket/handlers/friendShipnotifications.ts @@ -1,7 +1,7 @@ import * as ClientSocket from "../ClientSocket"; -import { PartialUser } from "../../../../structures/User"; +import { PartialUser } from "../../../../old_structures/User"; -export default function handleFriendshipNotifications ( +export default function handleFriendshipNotifications( socket: ClientSocket.Socket, messageType: string, message: any diff --git a/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts b/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts index f994ea5fd..7cf88a9c4 100644 --- a/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts +++ b/src/client/lib/ClientSocket/handlers/presenceBulkNotifications.ts @@ -1,7 +1,7 @@ import { Socket as ClientSocket } from "../ClientSocket"; -import { PartialUser } from "../../../../structures/User"; +import { PartialUser } from "../../../../old_structures/User"; -export default function handlePresenceBulkNotifications ( +export default function handlePresenceBulkNotifications( socket: ClientSocket, _messageType: string, message: any diff --git a/src/interfaces/GeneralInterfaces.ts b/src/interfaces/GeneralInterfaces.ts index d51743cef..15bf1274d 100644 --- a/src/interfaces/GeneralInterfaces.ts +++ b/src/interfaces/GeneralInterfaces.ts @@ -1,4 +1,4 @@ -import { ClientUser } from "../structures/ClientUser"; +import { ClientUser } from "../old_structures/ClientUser"; export declare type AnyIdentifier = string | number; export declare type UserIdentifier = ClientUser | AnyIdentifier; diff --git a/src/structures/Asset.ts b/src/old_structures/Asset.ts similarity index 100% rename from src/structures/Asset.ts rename to src/old_structures/Asset.ts diff --git a/src/structures/Chat.ts b/src/old_structures/Chat.ts similarity index 100% rename from src/structures/Chat.ts rename to src/old_structures/Chat.ts diff --git a/src/structures/ClientUser.ts b/src/old_structures/ClientUser.ts similarity index 100% rename from src/structures/ClientUser.ts rename to src/old_structures/ClientUser.ts diff --git a/src/structures/Game.ts b/src/old_structures/Game.ts similarity index 100% rename from src/structures/Game.ts rename to src/old_structures/Game.ts diff --git a/src/structures/Group.ts b/src/old_structures/Group.ts similarity index 100% rename from src/structures/Group.ts rename to src/old_structures/Group.ts diff --git a/src/old_structures/User.ts b/src/old_structures/User.ts new file mode 100644 index 000000000..4927aa462 --- /dev/null +++ b/src/old_structures/User.ts @@ -0,0 +1,187 @@ +import { Client } from "../client"; +import { EnumUserPresence } from "../interfaces/GeneralInterfaces"; + +export interface UserBaseOptions { + id: number; + name?: string | null; + displayName?: string; + membership?: boolean; +} + +export class UserBase { + public client: Client; + public id: number; + public name: string | null; + public displayName: string | null; + public membership: unknown; + + constructor(data: UserBaseOptions, client: Client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + this.displayName = data.displayName || null; + this.membership = data.membership || null; + } +} + +export interface FriendRequestOptions { + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; +} + +export class FriendRequest { + public client: Client; + public user: PartialUser; + public isBanned: boolean; + public created: Date; + public description: string; + + constructor(data: FriendRequestOptions, client: Client) { + this.client = client; + this.user = new PartialUser( + { + id: data.id, + name: data.name + }, + client + ); + this.created = new Date(data.created); + this.description = data.description; + this.isBanned = data.isBanned; + } +} + +export interface PartialUserOptions { + id: number; + name?: string; + displayName?: string; +} + +export class PartialUser extends UserBase { + // Eslint, I'm getting tired of you complaining about useless constructors. + // You are useless + // eslint-disable-next-line no-useless-constructor + constructor(data: PartialUserOptions, client: Client) { + super(data, client); + } +} + +export interface UserOptions { + id: number; + name: string; + displayName: string; + friendsCount: number; + presenceType: EnumUserPresence; + lastLocation: string | null; + userStatus: string | null; + userStatusDate: string | null; + userPlaceId: number | null; + followersCount: number; + followingsCount: number; + isVieweeBlocked: boolean; + isViewerBlocked: boolean; + areFriends: boolean; + canFollow: boolean; + canMessage: boolean; + canFriend: boolean; + canTrade: boolean; + incomingFriendRequest: boolean; + sentFriendRequest: boolean; + canSeeFavorites: boolean; + messagesDisabled: boolean; + canSeeInventory: boolean; + headShotImage: { + final: boolean; + url: string; + retryUrl: string | null; + userId: number; + endpointType: "Avatar" | string; + }; + previousUsernames: string; +} + +export class User extends PartialUser { + public friendsCount: number; + public presenceType: EnumUserPresence; + public lastLocation: string | null; + public status: string | null; + public statusDate: Date | null; + public placeId: number | null; + public followersCount: number; + public followingCount: number; + /** + * If the authenticated user has blocked the user + */ + public isBlocked: boolean; + /** + * If the user has blocked the authenticated user + */ + public hasBlocked: boolean; + /** + * If the authenticated user and the target user are friends + */ + public areFriends: boolean; + public canFollow: boolean; + public canMessage: boolean; + public canFriend: boolean; + /** + * If the authenticated user has sent a friend request to this user + */ + public sentFriendRequest: boolean; + /** + * If the target user has sent a friend request to the authenticated user + */ + public incomingFriendRequest: boolean; + public messagesDisabled: boolean; + public canSeeFavorites: boolean; + public canTrade: boolean; + public canSeeInventory: boolean; + public previousNames: string[]; + public headshotImage: { + final: boolean; + url: string | null; + retryUrl: string | null; + userId: number; + endpointType: "Avatar" | string; + }; + + constructor(data: UserOptions, client: Client) { + super(data, client); + this.friendsCount = data.friendsCount; + this.presenceType = data.presenceType; + this.lastLocation = data.lastLocation || null; + this.status = data.userStatus || null; + const matchedStatusTimestamp = data.userStatusDate + ? data.userStatusDate.match(/\((.*)\)/) + : null; + this.statusDate = matchedStatusTimestamp + ? new Date(parseInt(matchedStatusTimestamp[1])) + : null; + this.placeId = data.userPlaceId; + this.followersCount = data.followersCount; + this.followingCount = data.followingsCount; + this.isBlocked = data.isVieweeBlocked; + this.hasBlocked = data.isViewerBlocked; + this.areFriends = data.areFriends; + this.canFollow = data.canFollow; + this.canMessage = data.canMessage; + this.canFriend = data.canFriend; + this.sentFriendRequest = data.sentFriendRequest; + this.incomingFriendRequest = data.incomingFriendRequest; + this.messagesDisabled = data.messagesDisabled; + this.canSeeFavorites = data.canSeeFavorites; + this.canTrade = data.canTrade; + this.canSeeInventory = data.canSeeInventory; + this.previousNames = data.previousUsernames.split("\r\n"); + this.headshotImage = { + final: data.headShotImage.final, + url: data.headShotImage.url, + retryUrl: data.headShotImage.retryUrl, + userId: data.headShotImage.userId, + endpointType: data.headShotImage.endpointType + }; + } +} diff --git a/src/structures/index.ts b/src/old_structures/index.ts similarity index 100% rename from src/structures/index.ts rename to src/old_structures/index.ts diff --git a/src/structures/BaseUser.ts b/src/structures/BaseUser.ts new file mode 100644 index 000000000..367f3f0c7 --- /dev/null +++ b/src/structures/BaseUser.ts @@ -0,0 +1,335 @@ +import { + AccountInformationPromotionChannels, + AccountInformationRobloxBadges, + Client, + EconomyGetSelfCurrency, + FriendsGetUserFollowers, + FriendsGetUserFriends, + FriendsGetUserFriendsOptions, + ItemType, + PageSortLimit, + PageSortOrder, + PresenceGetUsersPresence, + PrivateMessagesSendMessage, + UsersUserNameHistory +} from ".."; +import { contextCall, CursorPage } from "./CursorPage"; + +export type BaseUserOwnedBadge = { + badgeId: number; + awardedDate: Date; + awardedDateString: string; +}; + +export type BaseUserGroupRole = { + groupId: number; + roleId: number; + rank: number; + roleName: string; +}; + +/** + * Represents a Roblox user ID and gives direct access to various user-related APIs. + */ +export class BaseUser { + #client: Client; + #userId: number; + + /** + * @param {Client} client The Bloxy Client + * @param {number} userId The user ID + */ + constructor(client: Client, userId: number) { + this.#client = client; + this.#userId = userId; + } + + get client() { + return this.#client; + } + + get userId() { + return this.#userId; + } + + /** + * Return the username history of the user. + * @param limit The number of followers to return + * @param sortOrder The sort order of the followers + * @param cursor The cursor to continue at + */ + getUsernameHistory( + limit: PageSortLimit = 10, + sortOrder: PageSortOrder = "Asc", + cursor?: string + ): Promise> { + return this.client.apis.usersAPI + .getUserNameHistory({ + userId: this.userId + }) + .then( + (response) => + new CursorPage( + { limit, sortOrder, cursor }, + { userId: this.userId }, + response, + contextCall( + this.client.apis.usersAPI, + this.client.apis.usersAPI.getUserNameHistory + ) + ) + ); + } + + /** + * Returns the users current presence. + */ + getPresence(): Promise { + return this.client.apis.presenceAPI + .getUsersPresences({ + userIds: [this.userId] + }) + .then((presence) => presence.userPresences[0]); + } + + /** + * Returns the user's friends. + * @param limit The number of friends to return + * @param cursor The cursor to continue at + */ + getFriends( + userSort?: FriendsGetUserFriendsOptions["userSort"] + ): Promise { + return this.client.apis.friendsAPI.getUserFriends({ + userId: this.userId, + userSort + }); + } + + /** + * Returns the user's robux amount. The BaseUser must be the currently authenticated user, or else this function throws an error. + */ + getCurrency(): Promise { + if (this.client.user?.id !== this.userId) { + throw new Error( + "This function can only be called with the currently authenticated user" + ); + } + return this.client.apis.economyAPI.getSelfCurrency({ userId: this.userId }); + } + + /** + * Returns if the user has Roblox Premium or not. + */ + hasPremium(): Promise { + return this.client.apis.premiumFeaturesAPI.validateUserMembership({ + userId: this.userId + }); + } + + /** + * Returns if the user owns the specified item. + * @param {ItemType} itemType The type of item to check + * @param {number} itemId The ID of the item to check + */ + ownsItem(itemType: ItemType, itemId: number): Promise { + return this.client.apis.inventoryAPI + .getUserItemsByTypeAndTargetId({ + userId: this.userId, + itemType, + itemTargetId: itemId + }) + .then((response) => response.data.length > 0); + } + + /** + * Returns if the user owns the specific asset. + * @param assetId The ID of the asset to check + */ + ownsAsset(assetId: number): Promise { + return this.ownsItem("Asset", assetId); + } + + /** + * Returns if the user owns the specific gamepass. + * @param gamepassId The ID of the gamepass to check + */ + ownsGamepass(gamepassId: number): Promise { + return this.ownsItem("GamePass", gamepassId); + } + + /** + * Returns the date the specified badges got awarded to the user. + * @param badgeIds The badge IDs to check + */ + getBadgeAwardedDates(badgeIds: number[]): Promise { + return this.client.apis.badgesAPI + .getUserBadgesAwardedDates({ + userId: this.userId, + badgeIds + }) + .then((response) => + response.data.map((badge) => ({ + badgeId: badge.badgeId, + awardedDate: new Date(badge.awardedDate), + awardedDateString: badge.awardedDate + })) + ); + } + + /** + * Returns the role of the groups the user is in. + */ + getGroupRoles(): Promise { + return this.client.apis.groupsAPI + .getUserGroups({ + userId: this.userId + }) + .then((response) => + response.data.map((groupMembership) => ({ + groupId: groupMembership.group.id, + roleId: groupMembership.role.id, + rank: groupMembership.role.rank, + roleName: groupMembership.role.name + })) + ); + } + + /** + * Returns the roblox badges the user has. + */ + getRobloxBadges(): Promise { + return this.client.apis.accountInformationAPI.getRobloxBadges({ + userId: this.userId + }); + } + + /** + * Returns the user's promotion channels + */ + getPromotionChannels(): Promise { + return this.client.apis.accountInformationAPI.getUserPromotionChannels({ + userId: this.userId + }); + } + + /** + * Returns the user's friend count + */ + getFriendCount(): Promise { + return this.client.apis.friendsAPI + .getUserFriendsCount({ + userId: this.userId + }) + .then((response) => response.count); + } + + /** + * Returns the user's follower count + */ + getFollowerCount(): Promise { + return this.client.apis.friendsAPI + .getUserFollowersCount({ + userId: this.userId + }) + .then((response) => response.count); + } + + /** + * Returns the user's following count + */ + getFollowingCount(): Promise { + return this.client.apis.friendsAPI + .getUserFollowingCount({ + userId: this.userId + }) + .then((response) => response.count); + } + + /** + * Returns the user's followers + * @param limit The number of followers to return + * @param sortOrder The sort order of the followers + * @param cursor The cursor to continue at + */ + getFollowers( + limit: PageSortLimit = 10, + sortOrder: PageSortOrder = "Asc", + cursor?: string + ): Promise< + CursorPage + > { + return this.client.apis.friendsAPI + .getUserFollowers({ + userId: this.userId, + limit, + sortOrder, + cursor + }) + .then( + (response) => + new CursorPage( + { limit, sortOrder, cursor }, + { userId: this.userId }, + response, + contextCall( + this.client.apis.friendsAPI, + this.client.apis.friendsAPI.getUserFollowers + ) + ) + ); + } + + /** + * Returns the user's followings + * @param limit The number of followings to return + * @param sortOrder The sort order of the followings + * @param cursor The cursor to continue at + */ + getFollowings( + limit: PageSortLimit = 10, + sortOrder: PageSortOrder = "Asc", + cursor?: string + ): Promise< + CursorPage + > { + return this.client.apis.friendsAPI + .getUserFollowing({ + userId: this.userId, + limit, + sortOrder, + cursor + }) + .then( + (response) => + new CursorPage( + { limit, sortOrder, cursor }, + { userId: this.userId }, + response, + contextCall( + this.client.apis.friendsAPI, + this.client.apis.friendsAPI.getUserFollowers + ) + ) + ); + } + + /** + * Sends a private message to the user + * @param recipientId The user ID to send the message to + * @param subject The subject of the message + * @param body The body of the message + */ + sendMessage( + recipientId: number, + subject: string, + body: string + ): Promise { + return this.client.apis.privateMessagesAPI.sendMessage({ + userId: this.userId, + recipientId, + subject, + body + }); + } +} diff --git a/src/structures/CursorPage.ts b/src/structures/CursorPage.ts new file mode 100644 index 000000000..1dd6c78db --- /dev/null +++ b/src/structures/CursorPage.ts @@ -0,0 +1,102 @@ +export type CursorPageOptions = { + readonly limit?: 10 | 25 | 50 | 100; + cursor?: string; + readonly sortOrder?: "Asc" | "Desc"; +}; + +type CursorPageResponse = { + data: T[]; + previousPageCursor: string | null; + nextPageCursor: string | null; +}; +type CursorPageState = { + previous: string | null; + current: string | null; + next: string | null; +}; +type CursorPageMethod = ( + options: CursorPageOptions & C +) => Promise>; + +export class CursorPage { + options: CursorPageOptions; + cursors: CursorPageState; + data: T[][] = []; + readonly method: CursorPageMethod; + readonly methodOptions: C; + private currentPage = 0; + + constructor( + options: CursorPageOptions, + methodOptions: C, + response: CursorPageResponse, + method: CursorPageMethod + ) { + this.options = options; + this.cursors = { + previous: response.previousPageCursor, + current: response.nextPageCursor, + next: response.nextPageCursor + }; + this.data[0] = response.data; + this.methodOptions = methodOptions; + this.method = method; + } + + async getNextPage(): Promise { + if (!this.cursors.next) { + throw new Error( + "Attempted to iterate to next page, but no cursor was presented for the next page" + ); + } + + this.currentPage++; + if (this.data[this.currentPage]) return this.data[this.currentPage]; + + this.options.cursor = this.cursors.next; + const result = await this.method({ + ...this.options, + ...this.methodOptions + }); + this.cursors = { + previous: result.previousPageCursor, + current: this.cursors.next, + next: result.nextPageCursor + }; + this.data[this.currentPage] = result.data; + + return result.data; + } + + async getPreviousPage(): Promise { + if (!this.cursors.previous) { + throw new Error( + "Attempted to iterate to previous page, but no cursor was presented for the next page" + ); + } + + this.currentPage--; + if (this.data[this.currentPage]) return this.data[this.currentPage]; + + this.options.cursor = this.cursors.previous; + const result = await this.method({ + ...this.options, + ...this.methodOptions + }); + this.cursors = { + previous: result.previousPageCursor, + current: this.cursors.next, + next: result.nextPageCursor + }; + this.data[this.currentPage] = result.data; + + return result.data; + } +} + +export function contextCall( + context: any, + method: CursorPageMethod +): CursorPageMethod { + return (options: CursorPageOptions & C) => method.call(context, options); +} diff --git a/src/structures/User.ts b/src/structures/User.ts index 4927aa462..e1e72cc42 100644 --- a/src/structures/User.ts +++ b/src/structures/User.ts @@ -1,187 +1,30 @@ -import { Client } from "../client"; -import { EnumUserPresence } from "../interfaces/GeneralInterfaces"; +import { Client, UsersGetUserById } from ".."; +import { BaseUser } from "./BaseUser"; + +type UserConstructorData = UsersGetUserById; + +/** + * Represents a roblox user + */ +export class User extends BaseUser { + readonly name: string; + readonly displayName: string; + readonly externalAppDisplayName: string; + readonly isBanned: boolean; + readonly description: string; + readonly created: Date; -export interface UserBaseOptions { - id: number; - name?: string | null; - displayName?: string; - membership?: boolean; -} - -export class UserBase { - public client: Client; - public id: number; - public name: string | null; - public displayName: string | null; - public membership: unknown; - - constructor(data: UserBaseOptions, client: Client) { - this.client = client; - this.id = data.id; - this.name = data.name || null; - this.displayName = data.displayName || null; - this.membership = data.membership || null; - } -} - -export interface FriendRequestOptions { - description: string; - created: string; - isBanned: boolean; - id: number; - name: string; -} - -export class FriendRequest { - public client: Client; - public user: PartialUser; - public isBanned: boolean; - public created: Date; - public description: string; - - constructor(data: FriendRequestOptions, client: Client) { - this.client = client; - this.user = new PartialUser( - { - id: data.id, - name: data.name - }, - client - ); - this.created = new Date(data.created); - this.description = data.description; - this.isBanned = data.isBanned; - } -} - -export interface PartialUserOptions { - id: number; - name?: string; - displayName?: string; -} - -export class PartialUser extends UserBase { - // Eslint, I'm getting tired of you complaining about useless constructors. - // You are useless - // eslint-disable-next-line no-useless-constructor - constructor(data: PartialUserOptions, client: Client) { - super(data, client); - } -} - -export interface UserOptions { - id: number; - name: string; - displayName: string; - friendsCount: number; - presenceType: EnumUserPresence; - lastLocation: string | null; - userStatus: string | null; - userStatusDate: string | null; - userPlaceId: number | null; - followersCount: number; - followingsCount: number; - isVieweeBlocked: boolean; - isViewerBlocked: boolean; - areFriends: boolean; - canFollow: boolean; - canMessage: boolean; - canFriend: boolean; - canTrade: boolean; - incomingFriendRequest: boolean; - sentFriendRequest: boolean; - canSeeFavorites: boolean; - messagesDisabled: boolean; - canSeeInventory: boolean; - headShotImage: { - final: boolean; - url: string; - retryUrl: string | null; - userId: number; - endpointType: "Avatar" | string; - }; - previousUsernames: string; -} - -export class User extends PartialUser { - public friendsCount: number; - public presenceType: EnumUserPresence; - public lastLocation: string | null; - public status: string | null; - public statusDate: Date | null; - public placeId: number | null; - public followersCount: number; - public followingCount: number; - /** - * If the authenticated user has blocked the user - */ - public isBlocked: boolean; - /** - * If the user has blocked the authenticated user - */ - public hasBlocked: boolean; /** - * If the authenticated user and the target user are friends + * @param {Client} client The Bloxy Client + * @param {number} userId The user ID */ - public areFriends: boolean; - public canFollow: boolean; - public canMessage: boolean; - public canFriend: boolean; - /** - * If the authenticated user has sent a friend request to this user - */ - public sentFriendRequest: boolean; - /** - * If the target user has sent a friend request to the authenticated user - */ - public incomingFriendRequest: boolean; - public messagesDisabled: boolean; - public canSeeFavorites: boolean; - public canTrade: boolean; - public canSeeInventory: boolean; - public previousNames: string[]; - public headshotImage: { - final: boolean; - url: string | null; - retryUrl: string | null; - userId: number; - endpointType: "Avatar" | string; - }; - - constructor(data: UserOptions, client: Client) { - super(data, client); - this.friendsCount = data.friendsCount; - this.presenceType = data.presenceType; - this.lastLocation = data.lastLocation || null; - this.status = data.userStatus || null; - const matchedStatusTimestamp = data.userStatusDate - ? data.userStatusDate.match(/\((.*)\)/) - : null; - this.statusDate = matchedStatusTimestamp - ? new Date(parseInt(matchedStatusTimestamp[1])) - : null; - this.placeId = data.userPlaceId; - this.followersCount = data.followersCount; - this.followingCount = data.followingsCount; - this.isBlocked = data.isVieweeBlocked; - this.hasBlocked = data.isViewerBlocked; - this.areFriends = data.areFriends; - this.canFollow = data.canFollow; - this.canMessage = data.canMessage; - this.canFriend = data.canFriend; - this.sentFriendRequest = data.sentFriendRequest; - this.incomingFriendRequest = data.incomingFriendRequest; - this.messagesDisabled = data.messagesDisabled; - this.canSeeFavorites = data.canSeeFavorites; - this.canTrade = data.canTrade; - this.canSeeInventory = data.canSeeInventory; - this.previousNames = data.previousUsernames.split("\r\n"); - this.headshotImage = { - final: data.headShotImage.final, - url: data.headShotImage.url, - retryUrl: data.headShotImage.retryUrl, - userId: data.headShotImage.userId, - endpointType: data.headShotImage.endpointType - }; + constructor(client: Client, data: UserConstructorData) { + super(client, data.id); + this.name = data.name; + this.displayName = data.displayName; + this.externalAppDisplayName = data.externalAppDisplayName; + this.isBanned = data.isBanned; + this.description = data.description; + this.created = new Date(data.created); } } diff --git a/src/types/GenericOptionTypes.ts b/src/types/GenericOptionTypes.ts index 634dc5610..1e15acf40 100644 --- a/src/types/GenericOptionTypes.ts +++ b/src/types/GenericOptionTypes.ts @@ -37,3 +37,7 @@ export type UsernamePasswordOption = { username: string; password: string; }; +export type PageSortOrder = SortOption["sortOrder"]; +export type PageSortLimit = SortOption["limit"]; +export type PageSortCursor = SortOption["cursor"]; +export type ItemType = "Asset" | "GamePass" | "Badge" | "Bundle"; From 3c277dca99f9cd733b5f7e743646515238550ad5 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Thu, 20 Jan 2022 00:09:54 +0100 Subject: [PATCH 23/24] Include the `dist` folder --- .gitignore | 2 +- dist/client/Client.d.ts | 37 + dist/client/Client.js | 146 ++++ dist/client/ClientBase.d.ts | 38 + dist/client/ClientBase.js | 36 + dist/client/apis/AccountInformationAPI.d.ts | 73 ++ dist/client/apis/AccountInformationAPI.js | 160 +++++ dist/client/apis/AccountSettingsAPI.d.ts | 55 ++ dist/client/apis/AccountSettingsAPI.js | 169 +++++ dist/client/apis/AdConfigurationAPI.d.ts | 71 ++ dist/client/apis/AdConfigurationAPI.js | 64 ++ dist/client/apis/AdsAPI.d.ts | 26 + dist/client/apis/AdsAPI.js | 61 ++ dist/client/apis/AssetDeliveryAPI.d.ts | 104 +++ dist/client/apis/AssetDeliveryAPI.js | 156 ++++ dist/client/apis/AuthAPI.d.ts | 241 +++++++ dist/client/apis/AuthAPI.js | 290 ++++++++ dist/client/apis/AvatarAPI.d.ts | 190 +++++ dist/client/apis/AvatarAPI.js | 201 ++++++ dist/client/apis/BadgesAPI.d.ts | 81 +++ dist/client/apis/BadgesAPI.js | 93 +++ dist/client/apis/BaseAPI.d.ts | 26 + dist/client/apis/BaseAPI.js | 32 + dist/client/apis/BillingAPI.d.ts | 166 +++++ dist/client/apis/BillingAPI.js | 224 ++++++ dist/client/apis/CaptchaAPI.d.ts | 16 + dist/client/apis/CaptchaAPI.js | 33 + dist/client/apis/CatalogAPI.d.ts | 122 ++++ dist/client/apis/CatalogAPI.js | 205 ++++++ dist/client/apis/ChatAPI.d.ts | 266 +++++++ dist/client/apis/ChatAPI.js | 250 +++++++ dist/client/apis/ContactsAPI.d.ts | 34 + dist/client/apis/ContactsAPI.js | 55 ++ dist/client/apis/DataAPI.d.ts | 11 + dist/client/apis/DataAPI.js | 29 + dist/client/apis/DevelopAPI.d.ts | 604 ++++++++++++++++ dist/client/apis/DevelopAPI.js | 516 ++++++++++++++ dist/client/apis/EconomyAPI.d.ts | 174 +++++ dist/client/apis/EconomyAPI.js | 158 +++++ dist/client/apis/EconomyCreatorStatsAPI.d.ts | 16 + dist/client/apis/EconomyCreatorStatsAPI.js | 27 + dist/client/apis/EngagementPayoutsAPI.d.ts | 12 + dist/client/apis/EngagementPayoutsAPI.js | 23 + dist/client/apis/FollowingsAPI.d.ts | 38 + dist/client/apis/FollowingsAPI.js | 51 ++ dist/client/apis/FriendsAPI.d.ts | 200 ++++++ dist/client/apis/FriendsAPI.js | 289 ++++++++ .../apis/GameInternationalizationAPI.d.ts | 119 ++++ .../apis/GameInternationalizationAPI.js | 126 ++++ dist/client/apis/GamesAPI.d.ts | 285 ++++++++ dist/client/apis/GamesAPI.js | 264 +++++++ dist/client/apis/GeneralAPI.d.ts | 180 +++++ dist/client/apis/GeneralAPI.js | 293 ++++++++ dist/client/apis/GroupsAPI.d.ts | 665 ++++++++++++++++++ dist/client/apis/GroupsAPI.js | 663 +++++++++++++++++ dist/client/apis/InventoryAPI.d.ts | 140 ++++ dist/client/apis/InventoryAPI.js | 98 +++ dist/client/apis/ItemConfigurationAPI.d.ts | 88 +++ dist/client/apis/ItemConfigurationAPI.js | 98 +++ dist/client/apis/LocaleAPI.d.ts | 61 ++ dist/client/apis/LocaleAPI.js | 80 +++ dist/client/apis/MetricsAPI.d.ts | 26 + dist/client/apis/MetricsAPI.js | 44 ++ dist/client/apis/NotificationsAPI.d.ts | 267 +++++++ dist/client/apis/NotificationsAPI.js | 350 +++++++++ dist/client/apis/OtherAPI.d.ts | 49 ++ dist/client/apis/OtherAPI.js | 22 + dist/client/apis/PremiumFeaturesAPI.d.ts | 17 + dist/client/apis/PremiumFeaturesAPI.js | 32 + dist/client/apis/PresenceAPI.d.ts | 30 + dist/client/apis/PresenceAPI.js | 35 + dist/client/apis/PrivateMessagesAPI.d.ts | 101 +++ dist/client/apis/PrivateMessagesAPI.js | 123 ++++ dist/client/apis/PublishAPI.d.ts | 71 ++ dist/client/apis/PublishAPI.js | 96 +++ dist/client/apis/ThumbnailsAPI.d.ts | 154 ++++ dist/client/apis/ThumbnailsAPI.js | 166 +++++ dist/client/apis/TradesAPI.d.ts | 111 +++ dist/client/apis/TradesAPI.js | 100 +++ dist/client/apis/TranslationRolesAPI.d.ts | 47 ++ dist/client/apis/TranslationRolesAPI.js | 56 ++ dist/client/apis/TwoStepVerificationAPI.d.ts | 85 +++ dist/client/apis/TwoStepVerificationAPI.js | 120 ++++ dist/client/apis/UsersAPI.d.ts | 102 +++ dist/client/apis/UsersAPI.js | 105 +++ dist/client/apis/index.d.ts | 79 +++ dist/client/apis/index.js | 83 +++ dist/client/index.d.ts | 1 + dist/client/index.js | 5 + dist/client/lib/ChatManager/ChatManager.d.ts | 27 + dist/client/lib/ChatManager/ChatManager.js | 125 ++++ dist/client/lib/ChatManager/index.d.ts | 1 + dist/client/lib/ChatManager/index.js | 4 + .../client/lib/ClientSocket/ClientSocket.d.ts | 61 ++ dist/client/lib/ClientSocket/ClientSocket.js | 72 ++ .../handlers/chatNotifications.d.ts | 2 + .../handlers/chatNotifications.js | 63 ++ .../handlers/friendShipnotifications.d.ts | 2 + .../handlers/friendShipnotifications.js | 31 + .../lib/ClientSocket/handlers/index.d.ts | 3 + .../client/lib/ClientSocket/handlers/index.js | 13 + .../handlers/messageNotifications.d.ts | 2 + .../handlers/messageNotifications.js | 34 + .../handlers/presenceBulkNotifications.d.ts | 2 + .../handlers/presenceBulkNotifications.js | 14 + dist/client/lib/ClientSocket/index.d.ts | 1 + dist/client/lib/ClientSocket/index.js | 4 + .../DataStoreManager/DataStoreManager.d.ts | 9 + .../lib/DataStoreManager/DataStoreManager.js | 23 + .../structures/DataStoreHttpRequest.d.ts | 15 + .../structures/DataStoreHttpRequest.js | 20 + .../structures/GenericDataStore.d.ts | 76 ++ .../structures/GenericDataStore.js | 249 +++++++ .../structures/GlobalDataStore.d.ts | 5 + .../structures/GlobalDataStore.js | 10 + .../structures/OrderedDataStore.d.ts | 24 + .../structures/OrderedDataStore.js | 46 ++ .../structures/OrderedDataStorePage.d.ts | 15 + .../structures/OrderedDataStorePage.js | 21 + .../lib/DataStoreManager/util/checks.d.ts | 5 + .../lib/DataStoreManager/util/checks.js | 43 ++ .../lib/DataStoreManager/util/constants.d.ts | 19 + .../lib/DataStoreManager/util/constants.js | 23 + dist/controllers/index.d.ts | 5 + dist/controllers/index.js | 7 + dist/controllers/rest/RESTController.d.ts | 110 +++ dist/controllers/rest/RESTController.js | 191 +++++ dist/controllers/rest/index.d.ts | 1 + dist/controllers/rest/index.js | 5 + dist/controllers/rest/lib/getRequester.d.ts | 2 + dist/controllers/rest/lib/getRequester.js | 24 + .../rest/lib/updateXCSRFToken.d.ts | 2 + dist/controllers/rest/lib/updateXCSRFToken.js | 27 + .../controllers/rest/request/RESTRequest.d.ts | 16 + dist/controllers/rest/request/RESTRequest.js | 32 + dist/controllers/rest/request/index.d.ts | 1 + dist/controllers/rest/request/index.js | 5 + dist/controllers/rest/request/prepare.d.ts | 3 + dist/controllers/rest/request/prepare.js | 59 ++ .../rest/response/RESTResponse.d.ts | 10 + .../controllers/rest/response/RESTResponse.js | 40 ++ .../rest/response/handlers/index.d.ts | 2 + .../rest/response/handlers/index.js | 13 + .../rest/response/handlers/updateHeaders.d.ts | 2 + .../rest/response/handlers/updateHeaders.js | 25 + .../rest/response/handlers/validBody.d.ts | 1 + .../rest/response/handlers/validBody.js | 7 + .../response/handlers/validStatusCode.d.ts | 2 + .../rest/response/handlers/validStatusCode.js | 46 ++ .../response/handlers/validStatusMessage.d.ts | 2 + .../response/handlers/validStatusMessage.js | 44 ++ dist/controllers/rest/response/index.d.ts | 1 + dist/controllers/rest/response/index.js | 5 + dist/index.d.ts | 40 ++ dist/index.js | 47 ++ dist/interfaces/APIInterfaces.d.ts | 5 + dist/interfaces/APIInterfaces.js | 2 + dist/interfaces/GeneralInterfaces.d.ts | 19 + dist/interfaces/GeneralInterfaces.js | 10 + dist/interfaces/RESTInterfaces.d.ts | 167 +++++ dist/interfaces/RESTInterfaces.js | 31 + dist/old_structures/Asset.d.ts | 209 ++++++ dist/old_structures/Asset.js | 167 +++++ dist/old_structures/Chat.d.ts | 118 ++++ dist/old_structures/Chat.js | 117 +++ dist/old_structures/ClientUser.d.ts | 10 + dist/old_structures/ClientUser.js | 11 + dist/old_structures/Game.d.ts | 268 +++++++ dist/old_structures/Game.js | 238 +++++++ dist/old_structures/Group.d.ts | 272 +++++++ dist/old_structures/Group.js | 495 +++++++++++++ dist/old_structures/User.d.ts | 118 ++++ dist/old_structures/User.js | 74 ++ dist/old_structures/index.d.ts | 6 + dist/old_structures/index.js | 9 + dist/structures/Asset.d.ts | 209 ++++++ dist/structures/Asset.js | 167 +++++ dist/structures/BaseUser.d.ts | 109 +++ dist/structures/BaseUser.js | 212 ++++++ dist/structures/Chat.d.ts | 118 ++++ dist/structures/Chat.js | 117 +++ dist/structures/ClientUser.d.ts | 10 + dist/structures/ClientUser.js | 11 + dist/structures/CursorPage.d.ts | 29 + dist/structures/CursorPage.js | 62 ++ dist/structures/Game.d.ts | 268 +++++++ dist/structures/Game.js | 238 +++++++ dist/structures/Group.d.ts | 272 +++++++ dist/structures/Group.js | 495 +++++++++++++ dist/structures/User.d.ts | 20 + dist/structures/User.js | 23 + dist/structures/index.d.ts | 6 + dist/structures/index.js | 9 + dist/types/GeneralTypes.d.ts | 2 + dist/types/GeneralTypes.js | 2 + dist/types/GenericOptionTypes.d.ts | 43 ++ dist/types/GenericOptionTypes.js | 2 + dist/types/GenericTypes.d.ts | 10 + dist/types/GenericTypes.js | 2 + dist/util/constants.d.ts | 26 + dist/util/constants.js | 77 ++ dist/util/converter.d.ts | 2 + dist/util/converter.js | 21 + dist/util/errors/errors.d.ts | 13 + dist/util/errors/errors.js | 24 + dist/util/errors/index.d.ts | 8 + dist/util/errors/index.js | 9 + dist/util/errors/messages.d.ts | 4 + dist/util/errors/messages.js | 5 + dist/util/utilFunctions.d.ts | 1 + dist/util/utilFunctions.js | 30 + 211 files changed, 18350 insertions(+), 1 deletion(-) create mode 100644 dist/client/Client.d.ts create mode 100644 dist/client/Client.js create mode 100644 dist/client/ClientBase.d.ts create mode 100644 dist/client/ClientBase.js create mode 100644 dist/client/apis/AccountInformationAPI.d.ts create mode 100644 dist/client/apis/AccountInformationAPI.js create mode 100644 dist/client/apis/AccountSettingsAPI.d.ts create mode 100644 dist/client/apis/AccountSettingsAPI.js create mode 100644 dist/client/apis/AdConfigurationAPI.d.ts create mode 100644 dist/client/apis/AdConfigurationAPI.js create mode 100644 dist/client/apis/AdsAPI.d.ts create mode 100644 dist/client/apis/AdsAPI.js create mode 100644 dist/client/apis/AssetDeliveryAPI.d.ts create mode 100644 dist/client/apis/AssetDeliveryAPI.js create mode 100644 dist/client/apis/AuthAPI.d.ts create mode 100644 dist/client/apis/AuthAPI.js create mode 100644 dist/client/apis/AvatarAPI.d.ts create mode 100644 dist/client/apis/AvatarAPI.js create mode 100644 dist/client/apis/BadgesAPI.d.ts create mode 100644 dist/client/apis/BadgesAPI.js create mode 100644 dist/client/apis/BaseAPI.d.ts create mode 100644 dist/client/apis/BaseAPI.js create mode 100644 dist/client/apis/BillingAPI.d.ts create mode 100644 dist/client/apis/BillingAPI.js create mode 100644 dist/client/apis/CaptchaAPI.d.ts create mode 100644 dist/client/apis/CaptchaAPI.js create mode 100644 dist/client/apis/CatalogAPI.d.ts create mode 100644 dist/client/apis/CatalogAPI.js create mode 100644 dist/client/apis/ChatAPI.d.ts create mode 100644 dist/client/apis/ChatAPI.js create mode 100644 dist/client/apis/ContactsAPI.d.ts create mode 100644 dist/client/apis/ContactsAPI.js create mode 100644 dist/client/apis/DataAPI.d.ts create mode 100644 dist/client/apis/DataAPI.js create mode 100644 dist/client/apis/DevelopAPI.d.ts create mode 100644 dist/client/apis/DevelopAPI.js create mode 100644 dist/client/apis/EconomyAPI.d.ts create mode 100644 dist/client/apis/EconomyAPI.js create mode 100644 dist/client/apis/EconomyCreatorStatsAPI.d.ts create mode 100644 dist/client/apis/EconomyCreatorStatsAPI.js create mode 100644 dist/client/apis/EngagementPayoutsAPI.d.ts create mode 100644 dist/client/apis/EngagementPayoutsAPI.js create mode 100644 dist/client/apis/FollowingsAPI.d.ts create mode 100644 dist/client/apis/FollowingsAPI.js create mode 100644 dist/client/apis/FriendsAPI.d.ts create mode 100644 dist/client/apis/FriendsAPI.js create mode 100644 dist/client/apis/GameInternationalizationAPI.d.ts create mode 100644 dist/client/apis/GameInternationalizationAPI.js create mode 100644 dist/client/apis/GamesAPI.d.ts create mode 100644 dist/client/apis/GamesAPI.js create mode 100644 dist/client/apis/GeneralAPI.d.ts create mode 100644 dist/client/apis/GeneralAPI.js create mode 100644 dist/client/apis/GroupsAPI.d.ts create mode 100644 dist/client/apis/GroupsAPI.js create mode 100644 dist/client/apis/InventoryAPI.d.ts create mode 100644 dist/client/apis/InventoryAPI.js create mode 100644 dist/client/apis/ItemConfigurationAPI.d.ts create mode 100644 dist/client/apis/ItemConfigurationAPI.js create mode 100644 dist/client/apis/LocaleAPI.d.ts create mode 100644 dist/client/apis/LocaleAPI.js create mode 100644 dist/client/apis/MetricsAPI.d.ts create mode 100644 dist/client/apis/MetricsAPI.js create mode 100644 dist/client/apis/NotificationsAPI.d.ts create mode 100644 dist/client/apis/NotificationsAPI.js create mode 100644 dist/client/apis/OtherAPI.d.ts create mode 100644 dist/client/apis/OtherAPI.js create mode 100644 dist/client/apis/PremiumFeaturesAPI.d.ts create mode 100644 dist/client/apis/PremiumFeaturesAPI.js create mode 100644 dist/client/apis/PresenceAPI.d.ts create mode 100644 dist/client/apis/PresenceAPI.js create mode 100644 dist/client/apis/PrivateMessagesAPI.d.ts create mode 100644 dist/client/apis/PrivateMessagesAPI.js create mode 100644 dist/client/apis/PublishAPI.d.ts create mode 100644 dist/client/apis/PublishAPI.js create mode 100644 dist/client/apis/ThumbnailsAPI.d.ts create mode 100644 dist/client/apis/ThumbnailsAPI.js create mode 100644 dist/client/apis/TradesAPI.d.ts create mode 100644 dist/client/apis/TradesAPI.js create mode 100644 dist/client/apis/TranslationRolesAPI.d.ts create mode 100644 dist/client/apis/TranslationRolesAPI.js create mode 100644 dist/client/apis/TwoStepVerificationAPI.d.ts create mode 100644 dist/client/apis/TwoStepVerificationAPI.js create mode 100644 dist/client/apis/UsersAPI.d.ts create mode 100644 dist/client/apis/UsersAPI.js create mode 100644 dist/client/apis/index.d.ts create mode 100644 dist/client/apis/index.js create mode 100644 dist/client/index.d.ts create mode 100644 dist/client/index.js create mode 100644 dist/client/lib/ChatManager/ChatManager.d.ts create mode 100644 dist/client/lib/ChatManager/ChatManager.js create mode 100644 dist/client/lib/ChatManager/index.d.ts create mode 100644 dist/client/lib/ChatManager/index.js create mode 100644 dist/client/lib/ClientSocket/ClientSocket.d.ts create mode 100644 dist/client/lib/ClientSocket/ClientSocket.js create mode 100644 dist/client/lib/ClientSocket/handlers/chatNotifications.d.ts create mode 100644 dist/client/lib/ClientSocket/handlers/chatNotifications.js create mode 100644 dist/client/lib/ClientSocket/handlers/friendShipnotifications.d.ts create mode 100644 dist/client/lib/ClientSocket/handlers/friendShipnotifications.js create mode 100644 dist/client/lib/ClientSocket/handlers/index.d.ts create mode 100644 dist/client/lib/ClientSocket/handlers/index.js create mode 100644 dist/client/lib/ClientSocket/handlers/messageNotifications.d.ts create mode 100644 dist/client/lib/ClientSocket/handlers/messageNotifications.js create mode 100644 dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.d.ts create mode 100644 dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.js create mode 100644 dist/client/lib/ClientSocket/index.d.ts create mode 100644 dist/client/lib/ClientSocket/index.js create mode 100644 dist/client/lib/DataStoreManager/DataStoreManager.d.ts create mode 100644 dist/client/lib/DataStoreManager/DataStoreManager.js create mode 100644 dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.d.ts create mode 100644 dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.js create mode 100644 dist/client/lib/DataStoreManager/structures/GenericDataStore.d.ts create mode 100644 dist/client/lib/DataStoreManager/structures/GenericDataStore.js create mode 100644 dist/client/lib/DataStoreManager/structures/GlobalDataStore.d.ts create mode 100644 dist/client/lib/DataStoreManager/structures/GlobalDataStore.js create mode 100644 dist/client/lib/DataStoreManager/structures/OrderedDataStore.d.ts create mode 100644 dist/client/lib/DataStoreManager/structures/OrderedDataStore.js create mode 100644 dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.d.ts create mode 100644 dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.js create mode 100644 dist/client/lib/DataStoreManager/util/checks.d.ts create mode 100644 dist/client/lib/DataStoreManager/util/checks.js create mode 100644 dist/client/lib/DataStoreManager/util/constants.d.ts create mode 100644 dist/client/lib/DataStoreManager/util/constants.js create mode 100644 dist/controllers/index.d.ts create mode 100644 dist/controllers/index.js create mode 100644 dist/controllers/rest/RESTController.d.ts create mode 100644 dist/controllers/rest/RESTController.js create mode 100644 dist/controllers/rest/index.d.ts create mode 100644 dist/controllers/rest/index.js create mode 100644 dist/controllers/rest/lib/getRequester.d.ts create mode 100644 dist/controllers/rest/lib/getRequester.js create mode 100644 dist/controllers/rest/lib/updateXCSRFToken.d.ts create mode 100644 dist/controllers/rest/lib/updateXCSRFToken.js create mode 100644 dist/controllers/rest/request/RESTRequest.d.ts create mode 100644 dist/controllers/rest/request/RESTRequest.js create mode 100644 dist/controllers/rest/request/index.d.ts create mode 100644 dist/controllers/rest/request/index.js create mode 100644 dist/controllers/rest/request/prepare.d.ts create mode 100644 dist/controllers/rest/request/prepare.js create mode 100644 dist/controllers/rest/response/RESTResponse.d.ts create mode 100644 dist/controllers/rest/response/RESTResponse.js create mode 100644 dist/controllers/rest/response/handlers/index.d.ts create mode 100644 dist/controllers/rest/response/handlers/index.js create mode 100644 dist/controllers/rest/response/handlers/updateHeaders.d.ts create mode 100644 dist/controllers/rest/response/handlers/updateHeaders.js create mode 100644 dist/controllers/rest/response/handlers/validBody.d.ts create mode 100644 dist/controllers/rest/response/handlers/validBody.js create mode 100644 dist/controllers/rest/response/handlers/validStatusCode.d.ts create mode 100644 dist/controllers/rest/response/handlers/validStatusCode.js create mode 100644 dist/controllers/rest/response/handlers/validStatusMessage.d.ts create mode 100644 dist/controllers/rest/response/handlers/validStatusMessage.js create mode 100644 dist/controllers/rest/response/index.d.ts create mode 100644 dist/controllers/rest/response/index.js create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/interfaces/APIInterfaces.d.ts create mode 100644 dist/interfaces/APIInterfaces.js create mode 100644 dist/interfaces/GeneralInterfaces.d.ts create mode 100644 dist/interfaces/GeneralInterfaces.js create mode 100644 dist/interfaces/RESTInterfaces.d.ts create mode 100644 dist/interfaces/RESTInterfaces.js create mode 100644 dist/old_structures/Asset.d.ts create mode 100644 dist/old_structures/Asset.js create mode 100644 dist/old_structures/Chat.d.ts create mode 100644 dist/old_structures/Chat.js create mode 100644 dist/old_structures/ClientUser.d.ts create mode 100644 dist/old_structures/ClientUser.js create mode 100644 dist/old_structures/Game.d.ts create mode 100644 dist/old_structures/Game.js create mode 100644 dist/old_structures/Group.d.ts create mode 100644 dist/old_structures/Group.js create mode 100644 dist/old_structures/User.d.ts create mode 100644 dist/old_structures/User.js create mode 100644 dist/old_structures/index.d.ts create mode 100644 dist/old_structures/index.js create mode 100644 dist/structures/Asset.d.ts create mode 100644 dist/structures/Asset.js create mode 100644 dist/structures/BaseUser.d.ts create mode 100644 dist/structures/BaseUser.js create mode 100644 dist/structures/Chat.d.ts create mode 100644 dist/structures/Chat.js create mode 100644 dist/structures/ClientUser.d.ts create mode 100644 dist/structures/ClientUser.js create mode 100644 dist/structures/CursorPage.d.ts create mode 100644 dist/structures/CursorPage.js create mode 100644 dist/structures/Game.d.ts create mode 100644 dist/structures/Game.js create mode 100644 dist/structures/Group.d.ts create mode 100644 dist/structures/Group.js create mode 100644 dist/structures/User.d.ts create mode 100644 dist/structures/User.js create mode 100644 dist/structures/index.d.ts create mode 100644 dist/structures/index.js create mode 100644 dist/types/GeneralTypes.d.ts create mode 100644 dist/types/GeneralTypes.js create mode 100644 dist/types/GenericOptionTypes.d.ts create mode 100644 dist/types/GenericOptionTypes.js create mode 100644 dist/types/GenericTypes.d.ts create mode 100644 dist/types/GenericTypes.js create mode 100644 dist/util/constants.d.ts create mode 100644 dist/util/constants.js create mode 100644 dist/util/converter.d.ts create mode 100644 dist/util/converter.js create mode 100644 dist/util/errors/errors.d.ts create mode 100644 dist/util/errors/errors.js create mode 100644 dist/util/errors/index.d.ts create mode 100644 dist/util/errors/index.js create mode 100644 dist/util/errors/messages.d.ts create mode 100644 dist/util/errors/messages.js create mode 100644 dist/util/utilFunctions.d.ts create mode 100644 dist/util/utilFunctions.js diff --git a/.gitignore b/.gitignore index 140608d38..75a98eb9b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ node_modules coverage tests/index.js -dist +# dist # Should we really ignore the dist folder? docs site .idea diff --git a/dist/client/Client.d.ts b/dist/client/Client.d.ts new file mode 100644 index 000000000..2edb2a46b --- /dev/null +++ b/dist/client/Client.d.ts @@ -0,0 +1,37 @@ +import { ClientBase, ClientOptions } from "./ClientBase"; +import { APIs } from "./apis"; +import { ClientUser } from "../old_structures/ClientUser"; +import { RESTController } from "../controllers/rest"; +import { Group, PartialUser } from "../old_structures"; +import * as ClientSocket from "./lib/ClientSocket/ClientSocket"; +import { ChatManager } from "./lib/ChatManager/ChatManager"; +import { DataStoreManager } from "./lib/DataStoreManager/DataStoreManager"; +import { User } from "../structures/User"; +import { BaseUser } from "../structures/BaseUser"; +export declare class Client extends ClientBase { + user: ClientUser | null; + apis: APIs; + rest: RESTController; + socket: ClientSocket.Socket; + dataStoreManager: DataStoreManager; + chat: ChatManager; + constructor(options?: ClientOptions); + isLoggedIn(): boolean; + init(): void; + login(cookie?: string): Promise; + getGroup(groupId: number): Promise; + /** + * Returns a base user object from a user id. + * @param userId The user's ID + */ + getBaseUser(userId: number): BaseUser; + /** + * Returns a user object from a user id. + * @param userId The user's ID + */ + getUser(userId: number): Promise; + getUserIdFromUsername(username: string): Promise; + getUsernameFromUserId(userId: number | string): Promise; + getUsersByUserIds(userIds: number[] | string[], excludeBannedUsers?: boolean): Promise; + getUsersByUsernames(usernames: string[], excludeBannedUsers?: boolean): Promise; +} diff --git a/dist/client/Client.js b/dist/client/Client.js new file mode 100644 index 000000000..667bd76e8 --- /dev/null +++ b/dist/client/Client.js @@ -0,0 +1,146 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Client = void 0; +const tslib_1 = require("tslib"); +const ClientBase_1 = require("./ClientBase"); +const apis_1 = require("./apis"); +const ClientUser_1 = require("../old_structures/ClientUser"); +const rest_1 = require("../controllers/rest"); +const old_structures_1 = require("../old_structures"); +const ClientSocket = (0, tslib_1.__importStar)(require("./lib/ClientSocket/ClientSocket")); +const ChatManager_1 = require("./lib/ChatManager/ChatManager"); +const DataStoreManager_1 = require("./lib/DataStoreManager/DataStoreManager"); +const User_1 = require("../structures/User"); +const BaseUser_1 = require("../structures/BaseUser"); +class Client extends ClientBase_1.ClientBase { + constructor(options) { + super(options); + this.user = null; + this.apis = (0, apis_1.initAPIs)(this); + this.rest = new rest_1.RESTController(this, this.options.rest); + this.socket = new ClientSocket.Socket(this); + this.dataStoreManager = new DataStoreManager_1.DataStoreManager(this); + this.chat = new ChatManager_1.ChatManager(this); + this.init(); + } + isLoggedIn() { + return this.user !== null; + } + init() { + if (this.options.rest) { + this.rest.setOptions(this.options.rest); + } + } + login(cookie) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + this.log("info", { + name: "Client.login", + description: `Started login process..` + }); + cookie = cookie || (this.options.credentials || {}).cookie || undefined; + if (!cookie) { + throw new Error("Attempted to log in without a cookie!"); + } + this.options.credentials = Object.assign(Object.assign({}, this.options.credentials), { cookie }); + const createdCookie = this.rest.createCookie({ + key: ".ROBLOSECURITY", + value: cookie, + domain: "roblox.com", + hostOnly: false, + httpOnly: false + }); + this.rest.addCookie(createdCookie); + this.log("info", { + name: "Client.login", + description: `Added cookie to cookie jar, proceeding to fetching authenticated user information..` + }); + const getAuthenticationData = yield this.apis.usersAPI.getAuthenticatedUserInformation(); + this.user = new ClientUser_1.ClientUser({ + id: getAuthenticationData.id, + name: getAuthenticationData.name + }, this); + this.emit("loggedIn"); + this.log("info", { + name: "Client.login", + description: `Successfully logged in as ${getAuthenticationData.name}` + }); + return this.user; + }); + } + getGroup(groupId) { + return this.apis.groupsAPI + .getGroup({ + groupId + }) + .then((data) => { + if (!data) { + throw new Error(`Group not found: ${groupId}`); + } + else { + return new old_structures_1.Group(data, this); + } + }); + } + /** + * Returns a base user object from a user id. + * @param userId The user's ID + */ + getBaseUser(userId) { + return new BaseUser_1.BaseUser(this, userId); + } + /** + * Returns a user object from a user id. + * @param userId The user's ID + */ + getUser(userId) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + const data = yield this.apis.usersAPI.getUserById({ userId }); + return new User_1.User(this, data); + }); + } + getUserIdFromUsername(username) { + return this.apis.usersAPI + .getUsersByUsernames({ + usernames: [username], + excludeBannedUsers: false + }) + .then((response) => { + if (response.data && response.data[0]) { + return new old_structures_1.PartialUser(response.data[0], this); + } + else { + throw new Error("Got invalid response from getUserIdFromUsername"); + } + }); + } + getUsernameFromUserId(userId) { + if (typeof userId === "string") { + userId = parseInt(userId); + } + return this.apis.generalApi + .getUserById({ + userId + }) + .then((data) => new old_structures_1.PartialUser(data, this)); + } + getUsersByUserIds(userIds, excludeBannedUsers = false) { + if (typeof userIds[0] === "string") { + userIds = userIds.map((userId) => parseInt(userId)); + } + return this.apis.usersAPI + .getUsersByIds({ + excludeBannedUsers, + userIds: userIds + }) + .then((response) => response.data.map((userData) => new old_structures_1.PartialUser(userData, this))); + } + getUsersByUsernames(usernames, excludeBannedUsers = false) { + return this.apis.usersAPI + .getUsersByUsernames({ + excludeBannedUsers, + usernames + }) + .then((response) => response.data.map((userData) => new old_structures_1.PartialUser(userData, this))); + } +} +exports.Client = Client; diff --git a/dist/client/ClientBase.d.ts b/dist/client/ClientBase.d.ts new file mode 100644 index 000000000..2c8cb094a --- /dev/null +++ b/dist/client/ClientBase.d.ts @@ -0,0 +1,38 @@ +/// +import { EventEmitter } from "events"; +import { RESTControllerOptions } from "../interfaces/RESTInterfaces"; +import { Debugger } from "debug"; +export interface ClientCredentialsOptions { + cookie?: string; +} +export interface ClientCallbacks { + getFunCaptchaToken?: (publicKey: string, targetUrl: string) => Promise; +} +export interface ClientSetup { + websocket?: { + maxRetries: number; + }; + debug: boolean; +} +export interface ClientOptions { + credentials?: ClientCredentialsOptions; + rest?: RESTControllerOptions; + callbacks?: ClientCallbacks; + setup?: ClientSetup; +} +interface DebugData { + name: string; + description: string; +} +export declare class ClientBase extends EventEmitter { + options: ClientOptions; + debugger: { + info: Debugger; + warn: Debugger; + error: Debugger; + }; + constructor(options?: ClientOptions); + updateOptions(options?: ClientOptions): ClientOptions; + log(level: "info" | "warn" | "error", data: DebugData): void; +} +export {}; diff --git a/dist/client/ClientBase.js b/dist/client/ClientBase.js new file mode 100644 index 000000000..07931530e --- /dev/null +++ b/dist/client/ClientBase.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ClientBase = void 0; +const tslib_1 = require("tslib"); +const events_1 = require("events"); +const debug_1 = (0, tslib_1.__importDefault)(require("debug")); +const utilFunctions_1 = require("../util/utilFunctions"); +class ClientBase extends events_1.EventEmitter { + constructor(options) { + super(); + this.options = this.updateOptions(options); + this.debugger = { + info: (0, debug_1.default)("bloxy:info"), + warn: (0, debug_1.default)("bloxy:warn"), + error: (0, debug_1.default)("bloxy:error") + }; + } + updateOptions(options) { + this.options = (0, utilFunctions_1.utilMergeDeep)({ + credentials: {}, + rest: {}, + setup: {}, + callbacks: {} + }, options || {}); + return this.options; + } + log(level, data) { + const loggerToUse = level === "info" + ? this.debugger.info + : level === "error" + ? this.debugger.error + : this.debugger.warn; + loggerToUse(`[${new Date().toISOString()}] ${data.name}: ${data.description}`); + } +} +exports.ClientBase = ClientBase; diff --git a/dist/client/apis/AccountInformationAPI.d.ts b/dist/client/apis/AccountInformationAPI.d.ts new file mode 100644 index 000000000..9f1f44bec --- /dev/null +++ b/dist/client/apis/AccountInformationAPI.d.ts @@ -0,0 +1,73 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { UserIdOption, Privacy } from "../.."; +export declare type AccountInformationBirthdate = { + birthDay: number; + birthMonth: number; + birthYear: number; +}; +export declare type AccountInformationDescription = { + description: string; +}; +export declare type AccountInformationGender = { + gender: number; +}; +export declare type AccountInformationXboxConsecutiveLoginDays = { + count: number; +}; +export declare type AccountInformationMetaData = { + isAllowedNotificationsEndpointDisabled: boolean; + isAccountSettingsPolicyEnabled: boolean; + isPhoneNumberEnabled: boolean; + MaxUserDescriptionLength: number; + isUserDescriptionEnabled: boolean; + isUserBlockEndpointsUpdated: boolean; + isIDVerificationEnabled: boolean; + isPasswordRequiredForAgingDown: boolean; + homePageUpsellCardVariation: string; +}; +export declare type AccountInformationOwnPromotionChannels = { + promotionChannelsVisibilityPrivacy: Privacy; + facebook: string; + twitter: string; + youtube: string; + twitch: string; + guilded: string; +}; +export declare type AccountInformationPromotionChannels = Omit; +export declare type AccountInformationStarCodeAffiliate = { + userId: number; + name: string; + code: string; +}; +export declare type AccountInformationSetStarCodeAffiliate = { + code: string; +}; +export declare type AccountInformationAddStarCodeAffiliateOption = { + code: string; +}; +export declare type AccountInformationRobloxBadge = { + id: number; + name: string; + description: string; + imageUrl: string; +}; +export declare type AccountInformationRobloxBadges = AccountInformationRobloxBadge[]; +export declare class AccountInformationAPI extends BaseAPI { + constructor(client: Client); + getUserBirthdate(): Promise; + updateUserBirthdate(options: AccountInformationBirthdate): Promise; + getUserDescription(): Promise; + updateUserDescription(options: AccountInformationDescription): Promise; + getUserGender(): Promise; + updateUserGender(options: AccountInformationGender): Promise; + getConsecutiveXboxLoginDays(): Promise; + getMetaData(): Promise; + getSelfPromotionChannels(): Promise; + getUserPromotionChannels(options: UserIdOption): Promise; + updateUserPromotionChannels(options: AccountInformationOwnPromotionChannels): Promise; + removeStarCodeAffiliate(): Promise; + getStarCodeAffiliate(): Promise; + addStarCodeAffiliate(options: AccountInformationAddStarCodeAffiliateOption): Promise; + getRobloxBadges(options: UserIdOption): Promise; +} diff --git a/dist/client/apis/AccountInformationAPI.js b/dist/client/apis/AccountInformationAPI.js new file mode 100644 index 000000000..692640db5 --- /dev/null +++ b/dist/client/apis/AccountInformationAPI.js @@ -0,0 +1,160 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AccountInformationAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class AccountInformationAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + baseUrl: "https://accountinformation.roblox.com/", + client + }); + } + getUserBirthdate() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/birthdate" + }, + json: true + }).then((response) => response.body); + } + updateUserBirthdate(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/birthdate", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + getUserDescription() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/description" + }, + json: true + }).then((response) => response.body); + } + updateUserDescription(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/description", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + getUserGender() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/gender" + }, + json: true + }).then((response) => response.body); + } + updateUserGender(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/gender", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + getConsecutiveXboxLoginDays() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/xbox-live/consecutive-login-days" + }, + json: true + }).then((response) => response.body); + } + getMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: "v1/metadata" + }, + json: true + }).then((response) => response.body); + } + getSelfPromotionChannels() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/promotion-channels" + }, + json: true + }).then((response) => response.body); + } + getUserPromotionChannels(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/promotion-channels` + }, + json: true + }).then((response) => response.body); + } + updateUserPromotionChannels(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/promotion-channels", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + removeStarCodeAffiliate() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/star-code-affiliates", + method: "DELETE" + }, + json: true + }).then(() => true); + } + getStarCodeAffiliate() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/star-code-affiliates" + }, + json: true + }).then((response) => response.body); + } + addStarCodeAffiliate(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/star-code-affiliates", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getRobloxBadges(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/roblox-badges`, + method: "GET" + }, + json: true + }).then((response) => response.body); + } +} +exports.AccountInformationAPI = AccountInformationAPI; diff --git a/dist/client/apis/AccountSettingsAPI.d.ts b/dist/client/apis/AccountSettingsAPI.d.ts new file mode 100644 index 000000000..be078709b --- /dev/null +++ b/dist/client/apis/AccountSettingsAPI.d.ts @@ -0,0 +1,55 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { Privacy } from "../../types/GenericTypes"; +import { UserIdOption } from "../.."; +export declare type AccountSettingsMetaData = { + isAccountsRestrictionsSpamBugFixEnabled: boolean; + maximumParentalControlsMonthlySpendLimitInUSD: number; + isParentalMonthlyLimitInUIEnabled: boolean; + isParentalNotificationSettingsInUIEnabled: boolean; +}; +export declare type AccountSettingsGroup = { + title: string; + url: string; + suffix: string; +}; +export declare type AccountSettingsGroups = AccountSettingsGroup[]; +export declare type AccountSettingsAppChatPrivacy = { + appChatPrivacy: Omit | "All"; +}; +export declare type AccountSettingsGameChatPrivacy = { + gameChatPrivacy: Omit; +}; +export declare type AccountSettingsInventoryPrivacy = { + inventoryPrivacy: Privacy; +}; +export declare type AccountSettingsPrivacy = { + phoneDiscovery: Omit; +}; +export declare type AccountSettingsPrivacyInfo = { + isPhoneDiscoveryEnabled: boolean; +}; +export declare type AccountSettingsPrivateMessagePrivacy = { + privateMessagePrivacy: Privacy; +}; +export declare type AccountSettingsVisibilityPrivacy = { + visibilityPrivacy: number; +}; +export declare class AccountSettingsAPI extends BaseAPI { + constructor(client: Client); + getMetaData(): Promise; + getSettingsGroups(): Promise; + getAppChatPrivacy(): Promise; + updateAppChatPrivacy(options: AccountSettingsAppChatPrivacy): Promise; + getGameChatPrivacy(): Promise; + updateGameChatPrivacy(options: AccountSettingsGameChatPrivacy): Promise; + getInventoryPrivacy(): Promise; + updateInventoryPrivacy(options: AccountSettingsInventoryPrivacy): Promise; + getUserPrivacy(): Promise; + updateUserPrivacy(options: AccountSettingsPrivacy): Promise; + getUserPrivacySettingsInfo(): Promise; + getUserPrivateMessagePrivacy(): Promise; + updateUserPrivateMessagePrivacy(options: AccountSettingsPrivateMessagePrivacy): Promise; + blockUser(options: UserIdOption): Promise; + unblockUser(options: UserIdOption): Promise; +} diff --git a/dist/client/apis/AccountSettingsAPI.js b/dist/client/apis/AccountSettingsAPI.js new file mode 100644 index 000000000..81a710787 --- /dev/null +++ b/dist/client/apis/AccountSettingsAPI.js @@ -0,0 +1,169 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AccountSettingsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class AccountSettingsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + baseUrl: "https://accountsettings.roblox.com/", + client + }); + } + getMetaData() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/account/settings/metadata" + }, + json: true + }).then((response) => ({ + isAccountsRestrictionsSpamBugFixEnabled: response.body.IsAccountsRestrictionsSpamBugFixEnabled, + isParentalMonthlyLimitInUIEnabled: response.body.IsParentalMonthlyLimitInUIEnabled, + isParentalNotificationSettingsInUIEnabled: response.body.IsParentalNotificationSettingsInUIEnabled, + maximumParentalControlsMonthlySpendLimitInUSD: response.body.MaximumParentalControlsMonthlySpendLimitInUSD + })); + } + getSettingsGroups() { + return this.request({ + requiresAuth: false, + request: { + path: "v1/account/settings/settings-groups" + }, + json: true + }).then((response) => response.body.map((val) => ({ + title: val.Title, + url: val.Url, + suffix: val.Suffix + }))); + } + getAppChatPrivacy() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/app-chat-privacy" + }, + json: true + }).then((response) => response.body); + } + updateAppChatPrivacy(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/app-chat-privacy", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + getGameChatPrivacy() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/game-chat-privacy" + }, + json: true + }).then((response) => response.body); + } + updateGameChatPrivacy(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/game-chat-privacy", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + getInventoryPrivacy() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/inventory-privacy" + }, + json: true + }).then((response) => response.body); + } + updateInventoryPrivacy(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/inventory-privacy", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + getUserPrivacy() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/privacy" + }, + json: true + }).then((response) => response.body); + } + updateUserPrivacy(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/privacy", + method: "PATCH", + json: options + }, + json: true + }).then(() => true); + } + getUserPrivacySettingsInfo() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/privacy/info" + }, + json: true + }).then((response) => response.body); + } + getUserPrivateMessagePrivacy() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/private-message-privacy" + }, + json: true + }).then((response) => response.body); + } + updateUserPrivateMessagePrivacy(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/private-message-privacy", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + blockUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/block`, + method: "POST" + }, + json: true + }).then(() => true); + } + unblockUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/unblock`, + method: "POST" + }, + json: true + }).then(() => true); + } +} +exports.AccountSettingsAPI = AccountSettingsAPI; diff --git a/dist/client/apis/AdConfigurationAPI.d.ts b/dist/client/apis/AdConfigurationAPI.d.ts new file mode 100644 index 000000000..3bc17470d --- /dev/null +++ b/dist/client/apis/AdConfigurationAPI.d.ts @@ -0,0 +1,71 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { ISOString } from "../../types/GenericTypes"; +import { GroupIdOption } from "../.."; +export declare type AdConfigurationTargetGender = unknown; +export declare type AdConfigurationTargetAgeBracket = unknown; +export declare type AdConfigurationTargetDeviceType = unknown; +export declare type AdConfigurationSponsoredGame = { + adId: number; + adSetId: number; + adName: string; + adStatus: unknown; + creativeType: unknown; + creativeTargetId: number; + creativeUrl: string; + bidAmountInRobux: number; + budgetInRobux: number; + adSetStatus: unknown; + startDate: ISOString; + endDate: ISOString; + targetGender: AdConfigurationTargetGender; + targetAgeBracket: AdConfigurationTargetAgeBracket; + targetDeviceType: AdConfigurationTargetDeviceType; + campaignTargetType: unknown; + campaignTargetId: number; + totalSpendInRobux: number; + totalImpressions: number; + totalClicks: number; + totalConversions: number; + impressionConversions: number; + clickConversions: number; +}; +export declare type AdConfigurationSponsoredGames = { + sponsoredGames: AdConfigurationSponsoredGame[]; + previousPageCursor: string; + nextPageCursor: string; +}; +export declare type AdConfigurationUniverse = { + id: number; + name: string; +}; +export declare type AdConfigurationUniverses = { + universes: AdConfigurationUniverse[]; +}; +export declare type AdConfigurationCreateSponsoredGameAdOptions = { + universeId: number; + targetGender: AdConfigurationTargetGender; + targetAgeBracket: AdConfigurationTargetAgeBracket; + targetDeviceType: AdConfigurationTargetDeviceType; + budgetInRobux: number; + startDate: ISOString; + endDate: ISOString; + adName: string; + bidAmountInRobux: number; +}; +export declare type AdConfigurationStopSponsoredGameAdOptions = { + adSetId: number; +}; +export declare type AdConfigurationGetSponsoredGamesOptions = { + universeId: number; + includeReportingStats?: boolean; + isArchived?: boolean; + pageCursor?: string; +}; +export declare class AdConfigurationAPI extends BaseAPI { + constructor(client: Client); + getSponsoredGames(options: AdConfigurationGetSponsoredGamesOptions): Promise; + getUniverses(options: Partial): Promise; + createSponsor(options: AdConfigurationCreateSponsoredGameAdOptions): Promise; + stopSponsor(options: AdConfigurationStopSponsoredGameAdOptions): Promise; +} diff --git a/dist/client/apis/AdConfigurationAPI.js b/dist/client/apis/AdConfigurationAPI.js new file mode 100644 index 000000000..f5f923b79 --- /dev/null +++ b/dist/client/apis/AdConfigurationAPI.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AdConfigurationAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class AdConfigurationAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + baseUrl: "https://adconfiguration.roblox.com/", + client + }); + } + getSponsoredGames(options) { + return this.request({ + requiresAuth: true, + request: { + url: "v2/sponsored-games", + method: "GET", + qs: { + universeId: options.universeId, + includeReportingStats: options.includeReportingStats, + isArchived: options.isArchived, + pageCursor: options.pageCursor + } + }, + json: true + }).then((response) => response.body); + } + getUniverses(options) { + return this.request({ + requiresAuth: true, + request: { + url: "v2/sponsored-games/universes", + method: "GET", + qs: { + groupId: options.groupId + } + }, + json: true + }).then((response) => response.body); + } + createSponsor(options) { + return this.request({ + requiresAuth: true, + request: { + url: "v2/sponsored-games/create", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } + stopSponsor(options) { + return this.request({ + requiresAuth: true, + request: { + url: "v2/sponsored-games/stop", + method: "POST", + json: options + }, + json: true + }).then(() => true); + } +} +exports.AdConfigurationAPI = AdConfigurationAPI; diff --git a/dist/client/apis/AdsAPI.d.ts b/dist/client/apis/AdsAPI.d.ts new file mode 100644 index 000000000..e169586c7 --- /dev/null +++ b/dist/client/apis/AdsAPI.d.ts @@ -0,0 +1,26 @@ +import BaseAPI from "./BaseAPI"; +import Client from "../Client"; +export declare type CreateAssetAdOptions = { + assetId: number; + name: string; + file: unknown; +}; +export declare type CreateGamePassAdOptions = { + gamePassId: number; + name: string; + file: unknown; +}; +export declare type CreateGroupAdOptions = { + groupId: number; + name: string; + file: unknown; +}; +export declare type CreateAssetAd = unknown; +export declare type CreateGamePassAd = unknown; +export declare type CreateGroupAd = unknown; +export default class AdsAPI extends BaseAPI { + constructor(client: Client); + createAssetAd(options: CreateAssetAdOptions): Promise; + createGamePassAd(options: CreateGamePassAdOptions): Promise; + createGroupAd(options: CreateGroupAdOptions): Promise; +} diff --git a/dist/client/apis/AdsAPI.js b/dist/client/apis/AdsAPI.js new file mode 100644 index 000000000..c11dba317 --- /dev/null +++ b/dist/client/apis/AdsAPI.js @@ -0,0 +1,61 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const BaseAPI_1 = (0, tslib_1.__importDefault)(require("./BaseAPI")); +class AdsAPI extends BaseAPI_1.default { + constructor(client) { + super({ + baseUrl: "https://ads.roblox.com/", + client + }); + } + createAssetAd(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user-ads/assets/create", + method: "POST", + formData: { + name: options.name, + files: options.file + }, + qs: { + assetId: options.assetId + } + } + }).then((response) => response.body); + } + createGamePassAd(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user-ads/game-pass/create", + method: "POST", + formData: { + name: options.name, + files: options.file + }, + qs: { + gamePassId: options.gamePassId + } + } + }).then((response) => response.body); + } + createGroupAd(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/user-ads/groups/create", + method: "POST", + formData: { + name: options.name, + files: options.file + }, + qs: { + groupId: options.groupId + } + } + }).then((response) => response.body); + } +} +exports.default = AdsAPI; diff --git a/dist/client/apis/AssetDeliveryAPI.d.ts b/dist/client/apis/AssetDeliveryAPI.d.ts new file mode 100644 index 000000000..8cacabc9e --- /dev/null +++ b/dist/client/apis/AssetDeliveryAPI.d.ts @@ -0,0 +1,104 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type AssetDeliveryBaseOptions = { + acceptEncoding: string; + robloxPlaceId: number; + assetType: string; + accept: string; + skipSigningScripts: boolean; + clientInsert: number; + scriptInsert: number; + modulePlaceId: number; + serverPlaceId: number; + expectedAssetType: string; +}; +export declare type AssetDeliveryBaseAsset = { + location?: string; + errors?: { + code: number; + message: string; + }[]; + requestId?: string; + isHashDynamic?: boolean; + isCopyrightProtected?: boolean; + isArchived?: boolean; +}; +export declare type AssetDeliveryBaseAssetRaw = { + Location?: string; + Errors?: { + Code: number; + Message: string; + }[]; + RequestId?: string; + IsHashDynamic?: boolean; + IsCopyrightProtected?: boolean; + IsArchived?: boolean; +}; +export declare type AssetDeliveryGetAssetByAliasOptions = AssetDeliveryBaseOptions & { + alias: string; +}; +export declare type AssetDeliveryGetAssetByAlias = AssetDeliveryBaseAsset; +export declare type AssetDeliveryGetAssetByIdOptions = AssetDeliveryBaseOptions & { + id: number; +}; +export declare type AssetDeliveryGetAssetById = { + location?: string; + request?: unknown; +}; +export declare type AssetDeliveryGetAssetByHashOptions = AssetDeliveryBaseOptions & { + hash: string; +}; +export declare type AssetDeliveryGetAssetByHash = unknown; +export declare type AssetDeliveryGetAssetByAssetIdOptions = AssetDeliveryBaseOptions & { + assetId: number; +}; +export declare type AssetDeliveryGetAssetByAssetId = unknown; +export declare type AssetDeliveryGetAssetVersionByAssetIdOptions = AssetDeliveryBaseOptions & { + assetId: number; + version: number; +}; +export declare type AssetDeliveryGetAssetVersionByAssetId = unknown; +export declare type AssetDeliveryGetAssetByAssetVersionIdOptions = AssetDeliveryBaseOptions & { + assetVersionId: number; +}; +export declare type AssetDeliveryGetAssetByAssetVersionId = unknown; +export declare type AssetDeliveryGetAssetByMarAssetHashOptions = AssetDeliveryBaseOptions & { + marAssetHash: string; + marCheckSum: string; +}; +export declare type AssetDeliveryGetAssetByMarAssetHash = unknown; +export declare type AssetDeliveryGetAssetByUserAssetIdOptions = AssetDeliveryBaseOptions & { + userAssetId: number; +}; +export declare type AssetDeliveryGetAssetByUserAssetId = unknown; +export declare type AssetDeliveryGetBatchAssetsOptions = { + assetName: string; + assetType: string; + clientInsert: boolean; + placeId: number; + requestId: string; + scriptInsert: boolean; + serverPlaceId: number; + universeId: number; + accept: string; + encoding: string; + hash: string; + userAssetId: number; + assetId: number; + version: number; + assetVersionId: number; + modulePlaceId: number; +}; +export declare type AssetDeliveryGetBatchAssets = AssetDeliveryBaseAsset[]; +export declare class AssetDeliveryAPI extends BaseAPI { + constructor(client: Client); + getAssetByAlias(options: AssetDeliveryGetAssetByAliasOptions): Promise; + getAssetById(options: AssetDeliveryGetAssetByIdOptions): Promise; + getAssetByHash(options: AssetDeliveryGetAssetByHashOptions): Promise; + getAssetByAssetId(options: AssetDeliveryGetAssetByAssetIdOptions): Promise; + getAssetVersionByAssetId(options: AssetDeliveryGetAssetVersionByAssetIdOptions): Promise; + getAssetByAssetVersionId(options: AssetDeliveryGetAssetByAssetVersionIdOptions): Promise; + getAssetByMarAssetHash(options: AssetDeliveryGetAssetByMarAssetHashOptions): Promise; + getAssetByUserAssetId(options: AssetDeliveryGetAssetByUserAssetIdOptions): Promise; + getBatchAssets(options: AssetDeliveryGetBatchAssetsOptions): Promise; +} diff --git a/dist/client/apis/AssetDeliveryAPI.js b/dist/client/apis/AssetDeliveryAPI.js new file mode 100644 index 000000000..5a7472a7b --- /dev/null +++ b/dist/client/apis/AssetDeliveryAPI.js @@ -0,0 +1,156 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AssetDeliveryAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +const convertToBaseAsset = (options) => ({ + errors: typeof options.Errors !== "undefined" + ? options.Errors.map((v) => ({ + message: v.Message, + code: v.Code + })) + : undefined, + isArchived: typeof options.IsArchived !== "undefined" ? options.IsArchived : undefined, + isCopyrightProtected: typeof options.IsCopyrightProtected !== "undefined" + ? options.IsCopyrightProtected + : undefined, + isHashDynamic: typeof options.IsHashDynamic !== "undefined" + ? options.IsHashDynamic + : undefined, + location: typeof options.Location !== "undefined" ? options.Location : undefined, + requestId: typeof options.RequestId !== "undefined" ? options.RequestId : undefined +}); +const generateBaseDeliveryAssetOptions = (options) => ({ + headers: { + "Accept-Encoding": options.acceptEncoding, + "Roblox-Place-Id": options.robloxPlaceId, + AssetType: options.assetType, + Accept: options.accept + }, + qs: { + skipSigningScripts: options.skipSigningScripts ? "true" : "false", + clientInsert: options.clientInsert, + scriptinsert: options.scriptInsert, + modulePlaceId: options.modulePlaceId, + serverplaceid: options.serverPlaceId, + expectedAssetType: options.expectedAssetType + } +}); +class AssetDeliveryAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + baseUrl: "https://assetdelivery.roblox.com/", + client + }); + } + getAssetByAlias(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/alias/${options.alias}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getAssetById(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/asset`, + qs: Object.assign(Object.assign({}, generatedOptions.qs), { id: options.id }), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => ({ + location: response.body.Location || undefined, + request: response.body.Request + })); + } + getAssetByHash(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetHash/${options.hash}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getAssetByAssetId(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetId/${options.assetId}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getAssetVersionByAssetId(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetId/${options.assetId}/version/${options.version}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getAssetByAssetVersionId(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/assetVersionId/${options.assetVersionId}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getAssetByMarAssetHash(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/marAssetHash/${options.marAssetHash}/marCheckSum/${options.marCheckSum}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getAssetByUserAssetId(options) { + const generatedOptions = generateBaseDeliveryAssetOptions(options); + return this.request({ + json: true, + requiresAuth: true, + request: { + path: `v1/userAssetId/${options.userAssetId}`, + qs: Object.assign({}, generatedOptions.qs), + headers: Object.assign({}, generatedOptions.headers) + } + }).then((response) => convertToBaseAsset(response.body)); + } + getBatchAssets(options) { + return this.request({ + requiresAuth: true, + json: true, + request: { + path: "v1/assets/bath", + method: "POST", + json: options + } + }).then((response) => response.body.map((value) => convertToBaseAsset(value))); + } +} +exports.AssetDeliveryAPI = AssetDeliveryAPI; diff --git a/dist/client/apis/AuthAPI.d.ts b/dist/client/apis/AuthAPI.d.ts new file mode 100644 index 000000000..2e15fb159 --- /dev/null +++ b/dist/client/apis/AuthAPI.d.ts @@ -0,0 +1,241 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { UsernamePasswordOption } from "../../types/GenericOptionTypes"; +export declare type AuthPin = { + pin: string; +}; +export declare type AuthUnlockPinOptions = AuthPin; +export declare type AuthUnlockPin = { + unlockedUntil: number; +}; +export declare type AuthLockPin = { + success: boolean; +}; +export declare type AuthMetaData = { + isUpdateUsernameEnabled: boolean; + ftuxAvatarAssetMap: string; + isEmailUpsellAtLogoutEnabled: boolean; + shouldFetchEmailUpsellIXPValuesAtLogout: boolean; + isAccountRecoveryPromptEnabled: boolean; + isContactMethodRequiredAtSignup: boolean; + isUserAgreementsSignupIntegrationEnabled: boolean; + isRetypePasswordRequired: boolean; + arePasswordFieldsPlaintext: boolean; + isKoreaIdVerificationEnabled: boolean; + isSignupButtonGreenColorEnabled: boolean; +}; +export declare type AuthTicket = { + authTicket: string; +}; +export declare type AuthEndpointMetaData = { + cookieLawNoticeTimeout: number; +}; +export declare type AuthLoginOptions = { + ctype: "Email" | "Username" | string; + cvalue: string; + password: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; +export declare type AuthLogin = { + user: { + id: number; + name: string; + displayName: string; + }; + twoStepVerificationData?: { + mediaType: "Email" | string; + ticket: string; + }; +}; +export declare type AuthCredentialsVerificationOptions = { + credentialType: "Email" | "Username" | "PhoneNumber"; + credentialValue: string; + password: string; +}; +export declare type AuthGetCredentialsVerificationStatus = { + canSend: boolean; +}; +export declare type AuthGetCurrentPasswordStatus = { + valid: boolean; +}; +export declare type AuthGetPasswordResetMetaDataOptions = { + targetType: "Email" | "PhoneNumber"; + ticket: string; +}; +export declare type AuthGetPasswordResetMetaData = { + users: { + userId: number; + username: string; + displayName: string; + }[]; +}; +export declare type AuthResetPasswordOptions = { + targetType: "Email" | "PhoneNumber"; + ticket: string; + userId: number; + password: string; + passwordRepeated: string; +}; +export declare type AuthValidatePassword = { + code: string; + message: string; +}; +export declare type AuthSendPasswordResetOptions = { + targetType: AuthResetPasswordOptions["targetType"]; + target: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; +export declare type AuthSendPasswordReset = { + nonce: string; + transmissionType: string; +}; +export declare type AuthVerifyPasswordResetOptions = { + targetType: AuthResetPasswordOptions["targetType"]; + nonce: string; + code: string; +}; +export declare type AuthVerifyPasswordReset = { + userTickets: { + user: { + userId: number; + username: string; + displayName: string; + }; + ticket: string; + }[]; +}; +export declare type AuthChangeUserPasswordOptions = { + currentPassword: string; + newPassword: string; +}; +export declare type AuthGetRecoveryMetaData = { + isOnPhone: boolean; + codeLength: number; + isPhoneFeatureEnabledForUsername: boolean; + isPhoneFeatureEnabledForPassword: boolean; + isBedev2CaptchaEnabledForPasswordReset: boolean; +}; +export declare type AuthRevertAccountInfoOptions = { + ticket: string; +}; +export declare type AuthRevertAccountInfo = { + isTwoStepVerificationEnabled: boolean; + isEmailVerified: boolean; + isEmailChanged: boolean; + userId: number; + username: string; + ticket: string; +}; +export declare type AuthRevertAccountOptions = { + userId: number; + newPassword: string; + ticket: string; +}; +export declare type AuthGetSAMLMetaData = unknown; +export declare type AuthSAMLRequest = unknown; +export declare type AuthGetTwoStepVerificationMetaData = { + codeLength: number; + loadingImageUrl: string; + supportUrl: string; +}; +export declare type AuthResendTwoStepVerificationOptions = { + username: string; + ticket: string; + actionType: string; +}; +export declare type AuthTwoStepVerification = { + mediaType: "Email" | "PhoneNumber" | string; + ticket: string; +}; +export declare type AuthVerifyTwoStepVerificationOptions = { + username: string; + ticket: string; + code: string; + rememberDevice: boolean; + actionType: string; +}; +export declare type AuthVerifyTwoStepVerification = unknown; +export declare type AuthGetExistingUsernamesOptions = { + username: string; +}; +export declare type AuthGetExistingUsernames = { + usernames: string[]; +}; +export declare type AuthValidateUsernameOptions = { + username: string; + birthday: string; + context: "Unknown" | "Signup" | "UsernameChange" | string; +}; +export declare type AuthValidateUsername = { + code: string; + message: string; +}; +export declare type AuthRecoverUsernamesOptions = { + targetType: "Email" | string; + target: string; +}; +export declare type AuthRecoverUsernames = { + transmissionType: string; +}; +export declare type AuthSignUpOptions = { + username: string; + password: string; + gender: "Unknown" | string; + birthday: string; + isTosAgreementBoxChecked: boolean; + email: string; + locale: string; + assetIds: number[]; + bodyColorId: number; + bodyTypeScale: number; + headScale: number; + heightScale: number; + widthScale: number; + proportionScale: number; + captchaToken: string; + captchaProvider: string; +}; +export declare type AuthSignUp = { + userId: number; + starterPlaceId: number; +}; +export declare type AuthChangeUsernameOptions = { + username: string; + password: string; +}; +export declare type AuthChangeUsername = unknown; +export declare type AuthChangeUserPassword = unknown; +export declare type AuthResetPassword = AuthLogin & { + identityVerificationLoginTicket: string; + isBanned: boolean; +}; +export declare type AuthRevertAccount = AuthResetPassword; +export declare class AuthAPI extends BaseAPI { + constructor(client: Client); + unlockPin(options: AuthUnlockPinOptions): Promise; + lockPin(): Promise; + getAuthTicket(): Promise; + getMetaData(): Promise; + getCurrentUserPasswordStatus(): Promise; + getPasswordResetMetaData(options: AuthGetPasswordResetMetaDataOptions): Promise; + resetPassword(options: AuthResetPasswordOptions): Promise; + validatePassword(options: UsernamePasswordOption): Promise; + sendPasswordReset(options: AuthSendPasswordResetOptions): Promise; + verifyPasswordReset(options: AuthVerifyPasswordResetOptions): Promise; + changeUserPassword(options: AuthChangeUserPasswordOptions): Promise; + getRecoveryMetaData(): Promise; + getRevertAccountInfo(options: AuthRevertAccountInfoOptions): Promise; + revertAccount(options: AuthRevertAccountOptions): Promise; + getSAMLMetaData(): Promise; + samlAuthenticate(): Promise; + getTwoStepVerificationMetaData(): Promise; + resendTwoStepVerificationCode(options: AuthResendTwoStepVerificationOptions): Promise; + verifyTwoStepVerificationCode(options: AuthVerifyTwoStepVerificationOptions): Promise; + getExistingUsernames(options: AuthGetExistingUsernamesOptions): Promise; + validateUsername(options: AuthValidateUsernameOptions): Promise; + recoverUsernames(options: AuthRecoverUsernamesOptions): Promise; + signUp(options: AuthSignUpOptions): Promise; + changeUserUsername(options: AuthChangeUsernameOptions): Promise; +} diff --git a/dist/client/apis/AuthAPI.js b/dist/client/apis/AuthAPI.js new file mode 100644 index 000000000..c3a68c347 --- /dev/null +++ b/dist/client/apis/AuthAPI.js @@ -0,0 +1,290 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class AuthAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://auth.roblox.com/" + }); + } + unlockPin(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/account/pin/unlock", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + lockPin() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/account/pin/lock", + method: "POST" + }, + json: true + }).then((response) => response.body); + } + getAuthTicket() { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v1/authentication-ticket", + method: "POST", + headers: { + referer: "https://www.roblox.com/", + origin: "roblox.com" + } + } + }).then((response) => ({ + authTicket: response.headers["rbx-authentication-ticket"] + })); + } + getMetaData() { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/metadata" + } + }).then((response) => ({ + isUpdateUsernameEnabled: response.body.isUpdateUsernameEnabled, + ftuxAvatarAssetMap: response.body.ftuxAvatarAssetMap, + isEmailUpsellAtLogoutEnabled: response.body.IsEmailUpsellAtLogoutEnabled, + shouldFetchEmailUpsellIXPValuesAtLogout: response.body.ShouldFetchEmailUpsellIXPValuesAtLogout, + isAccountRecoveryPromptEnabled: response.body.IsAccountRecoveryPromptEnabled, + isContactMethodRequiredAtSignup: response.body.IsContactMethodRequiredAtSignup, + isUserAgreementsSignupIntegrationEnabled: response.body.IsUserAgreementsSignupIntegrationEnabled, + isRetypePasswordRequired: response.body.IsRetypePasswordRequired, + arePasswordFieldsPlaintext: response.body.ArePasswordFieldsPlaintext, + isKoreaIdVerificationEnabled: response.body.IsKoreaIdVerificationEnabled, + isSignupButtonGreenColorEnabled: response.body.IsSignupButtonGreenColorEnabled + })); + } + getCurrentUserPasswordStatus() { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v2/passwords/current-status" + } + }).then((response) => response.body); + } + getPasswordResetMetaData(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset", + qs: { + "request.targetType": options.targetType, + "request.ticket": options.ticket + } + } + }).then((response) => response.body); + } + resetPassword(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset", + method: "POST", + json: options + } + }).then((response) => response.body); + } + validatePassword(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/validate", + qs: { + "request.username": options.username, + "request.password": options.password + } + } + }).then((response) => response.body); + } + sendPasswordReset(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset/send", + method: "POST", + json: options + } + }).then((response) => response.body); + } + verifyPasswordReset(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/passwords/reset/verify", + method: "POST", + json: options + } + }).then((response) => response.body); + } + changeUserPassword(options) { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v2/user/passwords/change", + method: "POST", + json: options + } + }).then((response) => response.body); + } + getRecoveryMetaData() { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/recovery/metadata" + } + }).then((response) => response.body); + } + getRevertAccountInfo(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/revert/account", + qs: { + ticket: options.ticket + } + } + }).then((response) => response.body); + } + revertAccount(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/revert/account", + method: "POST", + json: options + } + }).then((response) => response.body); + } + getSAMLMetaData() { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/saml/metadata" + } + }).then((response) => response.body); + } + samlAuthenticate() { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/saml/login", + method: "POST" + } + }).then((response) => response.body); + } + getTwoStepVerificationMetaData() { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/metadata" + } + }).then((response) => response.body); + } + resendTwoStepVerificationCode(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/resend", + method: "POST", + json: options + } + }).then((response) => response.body); + } + verifyTwoStepVerificationCode(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/verify", + method: "POST", + json: options + } + }).then((response) => response.body); + } + getExistingUsernames(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/usernames", + qs: { + username: options.username + } + } + }).then((response) => response.body); + } + validateUsername(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/usernames/validate", + qs: { + "request.username": options.username, + "request.birthday": options.birthday, + "request.context": options.context + } + } + }).then((response) => response.body); + } + recoverUsernames(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/metadata", + json: options + } + }).then((response) => response.body); + } + signUp(options) { + return this.request({ + json: true, + requiresAuth: false, + request: { + path: "v2/twostepverification/metadata", + method: "POST", + json: options + } + }).then((response) => response.body); + } + changeUserUsername(options) { + return this.request({ + json: true, + requiresAuth: true, + request: { + path: "v2/username", + method: "POST", + json: options + } + }).then((response) => response.body); + } +} +exports.AuthAPI = AuthAPI; diff --git a/dist/client/apis/AvatarAPI.d.ts b/dist/client/apis/AvatarAPI.d.ts new file mode 100644 index 000000000..0d536fcaa --- /dev/null +++ b/dist/client/apis/AvatarAPI.d.ts @@ -0,0 +1,190 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import type { AssetIdOption, AssetIdsOption, SuccessResponse, UserIdOption } from "../.."; +export declare type AvatarBodyScales = { + height: number; + width: number; + head: number; + depth: number; + proportion: number; + bodyType: number; +}; +export declare type AvatarBodyColors = { + headColorId: number; + torsoColorId: number; + rightArmColorId: number; + leftArmColorId: number; + rightLegColorId: number; + leftLegColorId: number; +}; +export declare type AvatarScale = { + min: number; + max: number; + increment: number; +}; +export declare type AvatarColorPalette = { + brickColorId: number; + hexColor: string; + name: string; +}; +export declare type AvatarUserAvatar = { + scales: AvatarBodyScales; + playerAvatarType: "R6" | "R15" | string; + bodyColors: AvatarBodyColors; + assets: { + id: number; + name: string; + assetType: { + id: number; + name: string; + }; + }[]; + defaultShirtApplied: boolean; + defaultPantsApplied: boolean; + emotes: { + assetId: number; + assetName: string; + position: number; + }[]; +}; +export declare type AvatarGetMetaData = { + enableDefaultClothingMessage: boolean; + isAvatarScaleEmbeddedInTab: boolean; + isBodyTypeScaleOutOfTab: boolean; + scaleHeightIncrement: number; + scaleWidthIncrement: number; + scaleHeadIncrement: number; + scaleProportionIncrement: number; + scaleBodyTypeIncrement: number; + supportProportionAndBodyType: boolean; + showDefaultClothingMessageOnPageLoad: boolean; + areThreeDeeThumbsEnabled: boolean; +}; +export declare type AvatarGetRules = { + playerAvatarTypes: ("R6" | "R15" | string)[]; + scales: { + height: AvatarScale; + width: AvatarScale; + head: AvatarScale; + bodyType: AvatarScale; + }; + wearableAssetTypes: { + maxNumber: number; + id: number; + name: string; + }[]; + bodyColorsPalette: AvatarColorPalette[]; + basicBodyColorsPalette: AvatarColorPalette[]; + minimumDeltaEBodyColorDifference: number; + proportionsAndBodyTypeEnabledForUser: boolean; + defaultClothingAssetLists: { + defaultShirtAssetIds: number[]; + defaultPantAssetIds: number[]; + }; + bundlesEnabledForUser: boolean; + emotesEnabledForUser: boolean; +}; +export declare type AvatarGetUserOutfits = { + filteredCount: number; + data: { + id: number; + name: string; + isEditable: boolean; + }[]; + total: number; +}; +export declare type AvatarRedrawThumbnail = unknown; +export declare type AvatarSetPlayerAvatarWearingAssets = { + invalidAssets?: { + id: number; + name: string; + assetType: { + id: number; + name: string; + }; + }[]; + invalidAssetIds?: number[]; + success: boolean; +}; +export declare type AvatarGetOutfit = { + id: number; + name: string; + assets: { + id: number; + name: string; + assetType: { + id: number; + name: string; + }; + }[]; + bodyColors: AvatarBodyColors; + scale: { + height: number; + width: number; + head: number; + depth: number; + proportion: number; + bodyType: number; + }; + playerAvatarType: string; + isEditable: boolean; +}; +export declare type AvatarWearOutfit = AvatarSetPlayerAvatarWearingAssets; +export declare type AvatarGetRecentItems = { + data: { + id: number; + name: string; + type: string; + assetType: { + id: number; + name: string; + }; + isEditable: boolean; + }[]; + total: number; +}; +export declare type AvatarGetUserOutfitsOptions = { + userId: number; + page?: number; + itemsPerPage?: number; + isEditable?: boolean; +}; +export declare type AvatarSetSelfAvatarBodyColorsOptions = AvatarBodyColors; +export declare type AvatarSetSelfAvatarTypeOptions = { + playerAvatarType: "R6" | "R15"; +}; +export declare type AvatarSetSelfAvatarScalesOptions = AvatarBodyScales; +export declare type AvatarGetOutfitOptions = { + userOutfitId: number; +}; +export declare type AvatarDeleteOutfitOptions = AvatarGetOutfitOptions; +export declare type AvatarUpdateOutfitOptions = Omit; +export declare type AvatarWearOutfitOptions = { + userOutfitId: number; +}; +export declare type AvatarCreateOutfitOptions = AvatarUpdateOutfitOptions; +export declare type AvatarGetRecentlyUsedOptions = { + recentItemListType: string; +}; +export declare class AvatarAPI extends BaseAPI { + constructor(client: Client); + getSelfAvatar(): Promise; + getAvatarMetaData(): Promise; + getAvatarRules(): Promise; + getUserAvatar(options: UserIdOption): Promise; + getUserCurrentlyWearing(options: UserIdOption): Promise; + getUserOutfits(options: AvatarGetUserOutfitsOptions): Promise; + removeAssetFromAvatar(options: AssetIdOption): Promise; + wearAssetOnAvatar(options: AssetIdOption): Promise; + redrawThumbnail(): Promise; + setSelfAvatarBodyColors(options: AvatarSetSelfAvatarBodyColorsOptions): Promise; + setSelfAvatarType(options: AvatarSetSelfAvatarTypeOptions): Promise; + setSelfAvatarScales(options: AvatarSetSelfAvatarScalesOptions): Promise; + setSelfWearingAssets(options: AssetIdsOption): Promise; + getOutfit(options: AvatarGetOutfitOptions): Promise; + deleteOutfit(options: AvatarDeleteOutfitOptions): Promise; + updateOutfit(options: AvatarUpdateOutfitOptions): Promise; + wearOutfit(options: AvatarWearOutfitOptions): Promise; + createOutfit(options: AvatarCreateOutfitOptions): Promise; + getRecentlyUsed(options: AvatarGetRecentlyUsedOptions): Promise; +} diff --git a/dist/client/apis/AvatarAPI.js b/dist/client/apis/AvatarAPI.js new file mode 100644 index 000000000..d47bf65c7 --- /dev/null +++ b/dist/client/apis/AvatarAPI.js @@ -0,0 +1,201 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AvatarAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class AvatarAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://avatar.roblox.com/" + }); + } + getSelfAvatar() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar" + }, + json: true + }).then((response) => response.body); + } + getAvatarMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: "v1/avatar/metadata" + }, + json: true + }).then((response) => response.body); + } + getAvatarRules() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar-rules" + }, + json: true + }).then((response) => response.body); + } + getUserAvatar(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/avatar` + }, + json: true + }).then((response) => response.body); + } + getUserCurrentlyWearing(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/currently-wearing` + }, + json: true + }).then((response) => response.body); + } + getUserOutfits(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/outfits` + }, + json: true + }).then((response) => response.body); + } + removeAssetFromAvatar(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/avatar/assets/${options.assetId}/remove`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + wearAssetOnAvatar(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/avatar/assets/${options.assetId}/wear`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + redrawThumbnail() { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/redraw-thumbnail", + method: "POST" + }, + json: true + }).then((response) => response.body); + } + setSelfAvatarBodyColors(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-body-colors", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + setSelfAvatarType(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-player-avatar-type", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + setSelfAvatarScales(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-scales", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + setSelfWearingAssets(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/avatar/set-swearing-assets", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getOutfit(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.userOutfitId}/details` + }, + json: true + }).then((response) => response.body); + } + deleteOutfit(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.userOutfitId}/delete`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + updateOutfit(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.id}/update`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + wearOutfit(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/outfits/${options.userOutfitId}/wear`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + createOutfit(options) { + return this.request({ + requiresAuth: true, + request: { + path: "v1/outfits/create", + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getRecentlyUsed(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/recent-items/${options.recentItemListType}/list` + }, + json: true + }).then((response) => response.body); + } +} +exports.AvatarAPI = AvatarAPI; diff --git a/dist/client/apis/BadgesAPI.d.ts b/dist/client/apis/BadgesAPI.d.ts new file mode 100644 index 000000000..1aa4c5153 --- /dev/null +++ b/dist/client/apis/BadgesAPI.d.ts @@ -0,0 +1,81 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { SortOption } from "../.."; +export declare type BadgesMetaData = { + badgeCreationPrice: number; + maxBadgeNameLength: number; + maxBadgeDescriptionLength: number; +}; +export declare type BadgesGetBadge = { + id: number; + name: string; + description: string; + displayName: string; + displayDescription: string; + enabled: boolean; + iconImageId: number; + displayIconImageId: number; + created: string; + updated: string; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: { + id: number; + name: string; + rootPlaceId: number; + }; +}; +export declare type BadgesUpdateBadge = unknown; +export declare type BadgesGetBadges = { + previousPageCursor: string; + nextPageCursor: string; + data: BadgesGetBadge[]; +}; +export declare type BadgesGetUserBadgesAwardedDates = { + data: { + badgeId: number; + awardedDate: string; + }[]; +}; +export declare type BadgesDeleteBadgeFromUser = unknown; +export declare type BadgesDeleteBadgeFromSelf = BadgesDeleteBadgeFromUser; +export declare type BadgesGetBadgeOptions = { + badgeId: number; +}; +export declare type BadgesUpdateBadgeOptions = { + id: number; + name: string; + description: string; + enabled: boolean; +}; +export declare type BadgesGetUniverseBadgesOptions = { + universeId: number; +} & SortOption; +export declare type BadgesGetUserBadgesOptions = { + userId: number; +} & SortOption; +export declare type BadgesGetUserBadgesAwardedDatesOptions = { + userId: number; + badgeIds: number[]; +}; +export declare type BadgesDeleteBadgeFromUserOptions = { + userId: number; + badgeId: number; +}; +export declare type BadgesDeleteBadgeFromSelfOptions = { + badgeId: number; +}; +export declare class BadgesAPI extends BaseAPI { + constructor(client: Client); + getMetaData(): Promise; + getBadge(options: BadgesGetBadgeOptions): Promise; + updateBadge(options: BadgesUpdateBadgeOptions): Promise; + getUniverseBadges(options: BadgesGetUniverseBadgesOptions): Promise; + getUserBadges(options: BadgesGetUserBadgesOptions): Promise; + getUserBadgesAwardedDates(options: BadgesGetUserBadgesAwardedDatesOptions): Promise; + deleteBadgeFromUser(options: BadgesDeleteBadgeFromUserOptions): Promise; + deleteBadgeFromSelf(options: BadgesDeleteBadgeFromSelfOptions): Promise; +} diff --git a/dist/client/apis/BadgesAPI.js b/dist/client/apis/BadgesAPI.js new file mode 100644 index 000000000..b9d65c241 --- /dev/null +++ b/dist/client/apis/BadgesAPI.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BadgesAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class BadgesAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://badges.roblox.com/" + }); + } + getMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: "v1/badges/metadata" + }, + json: true + }).then((response) => response.body); + } + getBadge(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/${options.badgeId}` + }, + json: true + }).then((response) => response.body); + } + updateBadge(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/${options.id}`, + method: "PATCH" + }, + json: true + }).then((response) => response.body); + } + getUniverseBadges(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/badges`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserBadges(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/badges`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserBadgesAwardedDates(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/badges/awarded-dates`, + qs: { + badgeIds: options.badgeIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + deleteBadgeFromUser(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/${options.userId}/badges/${options.badgeId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + deleteBadgeFromSelf(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/badges/${options.badgeId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } +} +exports.BadgesAPI = BadgesAPI; diff --git a/dist/client/apis/BaseAPI.d.ts b/dist/client/apis/BaseAPI.d.ts new file mode 100644 index 000000000..97a5518f0 --- /dev/null +++ b/dist/client/apis/BaseAPI.d.ts @@ -0,0 +1,26 @@ +import { BaseAPIOptions } from "../../interfaces/APIInterfaces"; +import { RESTRequestOptions, RESTResponseDataType } from "../../interfaces/RESTInterfaces"; +import { Client } from "../Client"; +export declare type BaseAPIRequestOptions = { + /** + * The request options + */ + request: Omit & { + url?: string; + path?: string; + }; + /** + * If the client must be authenticated in order to send the request + */ + requiresAuth: boolean; + /** + * If the response body is JSON + */ + json?: boolean; +}; +export declare class BaseAPI { + client: Client; + options: BaseAPIOptions; + constructor(options: BaseAPIOptions); + request(options: BaseAPIRequestOptions): Promise; +} diff --git a/dist/client/apis/BaseAPI.js b/dist/client/apis/BaseAPI.js new file mode 100644 index 000000000..49ceb1e2c --- /dev/null +++ b/dist/client/apis/BaseAPI.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseAPI = void 0; +class BaseAPI { + constructor(options) { + this.client = options.client; + this.options = options; + } + request(options) { + if (options.requiresAuth) { + if (!this.options.client.isLoggedIn()) { + throw new Error(`You must be authenticated in order to perform this request! API: ${(options.request.method || "GET").toUpperCase()} ${options.request.path ? this.options.baseUrl : ""}${options.request.path || options.request.url}`); + } + } + if (!options.request.url && !options.request.path) { + throw new Error(`Must provide a URL or path!`); + } + else if (options.request.path) { + options.request.url = this.options.baseUrl + options.request.path; + delete options.request.path; + } + return this.options.client.rest + .request(options.request) + .then((response) => { + if (options.json && !(response.body instanceof Object)) { + response.body = JSON.parse(response.body); + } + return response; + }); + } +} +exports.BaseAPI = BaseAPI; diff --git a/dist/client/apis/BillingAPI.d.ts b/dist/client/apis/BillingAPI.d.ts new file mode 100644 index 000000000..53e0b0daa --- /dev/null +++ b/dist/client/apis/BillingAPI.d.ts @@ -0,0 +1,166 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { SortOption } from "../.."; +export declare type BillingGetDeveloperExchangeRate = { + rate: number; + "currency-code": string; +}; +export declare type BillingSubmitDeveloperExchange = unknown; +export declare type BillingGetLuobuDeveloperExchangeBalance = { + amount: number; +}; +export declare type BillingGetLuobuDeveloperExchangeEligibility = { + eligibility?: "Eligible" | string; + errors?: { + code: number; + message: string; + userFacingMessage: string; + }; +}; +export declare type BillingGetLatestLuobuDeveloperExchangeStatus = { + date?: string; + status?: string; + amount?: number; +}; +export declare type BillingSubmitLuobuDeveloperExchange = unknown; +export declare type BillingGetUserPaymentsHistory = { + previousPageCursor: string; + nextPageCursor: string; + data: { + paymentDate: string; + products: { + name: string; + }[]; + money: { + Amount: number; + USDAmount: number; + Currency: { + Id: number; + CurrencyType: string; + CurrencyName: string; + CurrencySymbol: string; + }; + }; + paymentProviderType: "AppleAppStore"; + creditCardType: string; + cardNumber: string; + }; +}; +export declare type BillingPurchaseAmazonProduct = unknown; +export declare type BillingValidateAmazonProduct = unknown; +export declare type BillingPurchaseAppleProduct = BillingPurchaseAmazonProduct; +export declare type BillingValidateAppleProduct = BillingValidateAmazonProduct; +export declare type BillingRedeemDigitalCode = unknown; +export declare type BillingRedeemGameCard = { + balance: string; + successMsg: string; + successSubText: string; + bonusMsg: string; + error: string; + errorMsg: string; +}; +export declare type BillingReverseGameCard = unknown; +export declare type BillingPurchaseGoogleProduct = unknown; +export declare type BillingValidateGoogleProduct = BillingValidateAmazonProduct; +export declare type BillingSendXsollaWebhook = unknown; +export declare type BillingGetXsollaIFrameToken = { + token: string; + success: boolean; + message: string; +}; +export declare type BillingIncrementCounterByAgent = unknown; +export declare type BillingRedeemPromoCode = { + success: boolean; + errorMsg: string; + successMsg: string; +}; +export declare type BillingSubmitDeveloperExchangeOptions = { + firstName: string; + lastName: string; + emailAddress: string; + password: string; + robuxAmount: number; +}; +export declare type BillingSubmitLuobuDeveloperExchangeOptions = { + firstName: string; + lastName: string; + email: string; + amount: number; +}; +export declare type BillingGetUserPaymentsHistoryOptions = SortOption; +export declare type BillingPurchaseAmazonProductOptions = { + receiptId: string; + amazonUserId: string; + isRetry: boolean; +}; +export declare type BillingValidateAmazonProductOptions = { + productId: string; + currency: string; +}; +export declare type BillingPurchaseAppleProductOptions = { + receiptId: string; + appleUserId: string; + isRetry: boolean; +}; +export declare type BillingValidateAppleProductOptions = { + productId: string; + currency: string; +}; +export declare type BillingRedeemDigitalCodeOptions = { + redemptionCode: string; +}; +export declare type BillingRedeemGameCardOptions = { + pinCode: string; + captchaToken: string; + captchaProvider: string; +}; +export declare type BillingReverseGameCardOptions = { + PinCode: number; + UserId: number; +}; +export declare type BillingPurchaseGoogleProductOptions = { + packageName: string; + productId: string; + token: string; + isRetry: boolean; + orderId: string; +}; +export declare type BillingValidateGoogleProductOptions = { + productId: string; + currency: string; +}; +export declare type BillingGetXsollaIFrameTokenOptions = { + mainProductId: number; + upsellProductId: number; + paymentProviderType: string; + verifiedEmailOrPhone: boolean; +}; +export declare type BillingIncrementCounterByAgentOptions = { + counterPrefix: string; +}; +export declare type BillingRedeemPromoCodeOptions = { + code: string; +}; +export declare class BillingAPI extends BaseAPI { + constructor(client: Client); + getDeveloperExchangeRate(): Promise; + submitDeveloperExchange(options: BillingSubmitDeveloperExchangeOptions): Promise; + getLuobuDeveloperExchangeBalance(): Promise; + getLuobuDeveloperExchangeEligibility(): Promise; + getLuobuDeveloperExchangeLatestRequestStatus(): Promise; + submitLuobuDeveloperExchange(options: BillingSubmitLuobuDeveloperExchangeOptions): Promise; + getUserPaymentsHistory(options: BillingGetUserPaymentsHistoryOptions): Promise; + purchaseAmazonProduct(options: BillingPurchaseAmazonProductOptions): Promise; + validateAmazonProduct(options: BillingValidateAmazonProductOptions): Promise; + purchaseAppleProduct(options: BillingPurchaseAppleProductOptions): Promise; + validateAppleProduct(options: BillingValidateAppleProductOptions): Promise; + redeemDigitalCode(options: BillingRedeemDigitalCodeOptions): Promise; + redeemGameCard(options: BillingRedeemGameCardOptions): Promise; + reverseGameCard(options: BillingReverseGameCardOptions): Promise; + purchaseGoogleProduct(options: BillingPurchaseGoogleProductOptions): Promise; + validateGoogleProduct(options: BillingValidateGoogleProductOptions): Promise; + sendXsollaWebhook(options: unknown): Promise; + getXsollaIFrameToken(options: BillingGetXsollaIFrameTokenOptions): Promise; + incrementCounterByAgent(options: BillingIncrementCounterByAgentOptions): Promise; + redeemPromoCode(options: BillingRedeemPromoCodeOptions): Promise; +} diff --git a/dist/client/apis/BillingAPI.js b/dist/client/apis/BillingAPI.js new file mode 100644 index 000000000..f149aacd4 --- /dev/null +++ b/dist/client/apis/BillingAPI.js @@ -0,0 +1,224 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BillingAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class BillingAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://billing.roblox.com/" + }); + } + getDeveloperExchangeRate() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/developer-exchange-rate` + }, + json: true + }).then((response) => response.body); + } + submitDeveloperExchange(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange-rate`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getLuobuDeveloperExchangeBalance() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/luobu-developer-exchange/balance` + }, + json: true + }).then((response) => response.body); + } + getLuobuDeveloperExchangeEligibility() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/luobu-developer-exchange/eligibility` + }, + json: true + }).then((response) => response.body); + } + getLuobuDeveloperExchangeLatestRequestStatus() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/luobu-developer-exchange/latest-request-status` + }, + json: true + }).then((response) => response.body); + } + submitLuobuDeveloperExchange(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/developer-exchange-rate/request`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getUserPaymentsHistory(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/payments`, + qs: options + }, + json: true + }).then((response) => response.body); + } + purchaseAmazonProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/amazon/purchase`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + validateAmazonProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/amazon/validate`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + purchaseAppleProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/apple/purchase`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + validateAppleProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/apple/validate`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + redeemDigitalCode(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/digital-codes/redeem`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + redeemGameCard(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gamecard/redeem`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + reverseGameCard(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gamecard/reverse`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + purchaseGoogleProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/google/purchase`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + validateGoogleProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/google/validate`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + sendXsollaWebhook(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/notifications/xsolla`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getXsollaIFrameToken(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/payments/xsolla/iframe-token`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + incrementCounterByAgent(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/payments/xsolla/incrementcounterbyagent`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + redeemPromoCode(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/promocodes/redeem`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.BillingAPI = BillingAPI; diff --git a/dist/client/apis/CaptchaAPI.d.ts b/dist/client/apis/CaptchaAPI.d.ts new file mode 100644 index 000000000..5db41bd5c --- /dev/null +++ b/dist/client/apis/CaptchaAPI.d.ts @@ -0,0 +1,16 @@ +import BaseAPI from "./BaseAPI"; +import Client from "../Client"; +export declare type GetCaptchaMetadata = { + funCaptchaPublicKeys: { + type: string; + value: string; + }[]; +}; +export declare type GetLanguageResources = { + languageResources: unknown; +}; +export default class CaptchaAPI extends BaseAPI { + constructor(client: Client); + getCaptchaMetaData(): Promise; + getLanguageResources(): Promise; +} diff --git a/dist/client/apis/CaptchaAPI.js b/dist/client/apis/CaptchaAPI.js new file mode 100644 index 000000000..f4d39f2bb --- /dev/null +++ b/dist/client/apis/CaptchaAPI.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const BaseAPI_1 = (0, tslib_1.__importDefault)(require("./BaseAPI")); +class CaptchaAPI extends BaseAPI_1.default { + constructor(client) { + super({ + client, + baseUrl: "https://captcha.roblox.com/" + }); + } + getCaptchaMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/captcha/metadata` + }, + json: true + }) + .then(response => response.body); + } + getLanguageResources() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/language-resources` + }, + json: true + }) + .then(response => response.body); + } +} +exports.default = CaptchaAPI; diff --git a/dist/client/apis/CatalogAPI.d.ts b/dist/client/apis/CatalogAPI.d.ts new file mode 100644 index 000000000..ec19dd37c --- /dev/null +++ b/dist/client/apis/CatalogAPI.d.ts @@ -0,0 +1,122 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { AssetIdOption, SortOption, UserIdOption } from "../.."; +export declare type CatalogProductDetails = { + id: number; + type: string; + isPublicDomain: boolean; + isForSale: boolean; + priceInRobux: number; + premiumPricing: { + premiumDiscountPercentage: number; + premiumPriceInRobux: number; + }; +}; +export declare type CatalogGetAssetBundles = { + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; + id: number; + name: string; + type: string; + }[]; + creator: { + id: number; + name: string; + type: string; + }; + creatorType: number; + product: CatalogProductDetails; + }[]; +}; +export declare type CatalogGetBundleDetails = CatalogGetAssetBundles["data"][0]; +export declare type CatalogGetBundleRecommendationsByBundleId = { + data: CatalogGetAssetBundles["data"]; +}; +export declare type CatalogGetMultiBundleDetails = CatalogGetAssetBundles["data"]; +export declare type CatalogUnpackBundle = unknown; +export declare type CatalogGetAssetToCategory = Record; +export declare type CatalogGetAppStoreExclusiveBundles = { + data: CatalogProductDetails[]; +}; +export declare type CatalogGetAssetFavoriteCountOptions = { + assetId: number; +}; +export declare type CatalogGetFavoriteCount = number; +export declare type CatalogRemoveSelfAssetFavorite = unknown; +export declare type CatalogGetUserFavoriteAsset = { + assetId: number; + userId: number; + created: string; +}; +export declare type CatalogFavoriteAsset = unknown; +export declare type CatalogRemoveFavoriteBundle = unknown; +export declare type CatalogGetSelfFavoriteBundle = { + bundleId: number; + userId: number; + created: string; +}; +export declare type CatalogFavoriteBundle = unknown; +export declare type CatalogGetAssetBundlesOptions = SortOption & AssetIdOption; +export declare type CatalogGetBundleDetailsOptions = { + bundleId: number; +}; +export declare type CatalogGetBundleRecommendationsByBundleIdOptions = { + bundleId: number; + numItems?: number; +}; +export declare type CatalogGetMultiBundleDetailsOptions = { + bundleIds: number[]; +}; +export declare type CatalogGetUserBundlesOptions = SortOption & UserIdOption; +export declare type CatalogGetUserBundlesByTypeOptions = CatalogGetUserBundlesOptions & { + bundleType: string; +}; +export declare type CatalogUnpackBundleOptions = { + bundleId: number; +}; +export declare type CatalogGetAppStoreExclusiveBundlesOptions = { + appStoreType: "iOS" | "GooglePlay" | "Xbox" | "Amazon"; +}; +export declare type CatalogGetBundleFavoriteCount = CatalogUnpackBundleOptions; +export declare type CatalogRemoveAssetFavoriteOptions = AssetIdOption & UserIdOption; +export declare type CatalogGetUserFavoriteAssetOptions = AssetIdOption & UserIdOption; +export declare type CatalogFavoriteAssetOptions = AssetIdOption & UserIdOption; +export declare type CatalogRemoveBundleFavoriteOptions = UserIdOption & { + bundleId: number; +}; +export declare type CatalogGetUserFavoriteBundleOptions = UserIdOption & { + bundleId: number; +}; +export declare type CatalogFavoriteBundleOptions = UserIdOption & { + bundleId: number; +}; +export declare class CatalogAPI extends BaseAPI { + constructor(client: Client); + getAssetBundles(options: CatalogGetAssetBundlesOptions): Promise; + getBundleDetails(options: CatalogGetBundleDetailsOptions): Promise; + getBundleRecommendationsByBundleId(options: CatalogGetBundleRecommendationsByBundleIdOptions): Promise; + getMultiBundleDetails(options: CatalogGetMultiBundleDetailsOptions): Promise; + getUserBundles(options: CatalogGetUserBundlesOptions): Promise; + getUserBundlesByType(options: CatalogGetUserBundlesByTypeOptions): Promise; + unpackBundle(options: CatalogUnpackBundleOptions): Promise; + getAssetToCategory(): Promise; + getAssetToSubCategory(): Promise; + getCategories(): Promise; + getSubCategories(): Promise; + getAppStoreExclusiveBundles(options: CatalogGetAppStoreExclusiveBundlesOptions): Promise; + getAssetFavoriteCount(options: AssetIdOption): Promise; + getBundleFavoriteCount(options: CatalogGetBundleFavoriteCount): Promise; + removeAssetFavorite(options: CatalogRemoveAssetFavoriteOptions): Promise; + getUserFavoriteAsset(options: CatalogGetUserFavoriteAssetOptions): Promise; + favoriteAsset(options: CatalogFavoriteAssetOptions): Promise; + removeBundleFavorite(options: CatalogRemoveBundleFavoriteOptions): Promise; + getUserFavoriteBundle(options: CatalogGetUserFavoriteBundleOptions): Promise; + favoriteBundle(options: CatalogFavoriteBundleOptions): Promise; +} diff --git a/dist/client/apis/CatalogAPI.js b/dist/client/apis/CatalogAPI.js new file mode 100644 index 000000000..35e39ca27 --- /dev/null +++ b/dist/client/apis/CatalogAPI.js @@ -0,0 +1,205 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CatalogAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class CatalogAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://catalog.roblox.com/" + }); + } + getAssetBundles(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/bundles`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getBundleDetails(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/${options.bundleId}/details`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getBundleRecommendationsByBundleId(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.bundleId}/recommendations`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getMultiBundleDetails(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/details`, + qs: { + bundleIds: options.bundleIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + getUserBundles(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/bundles`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserBundlesByType(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/bundles/${options.bundleType}` + }, + json: true + }).then((response) => response.body); + } + unpackBundle(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/${options.bundleId}/unpack`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + getAssetToCategory() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/asset-to-category` + }, + json: true + }).then((response) => response.body); + } + getAssetToSubCategory() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/asset-to-subcategory` + }, + json: true + }).then((response) => response.body); + } + getCategories() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/categories` + }, + json: true + }).then((response) => response.body); + } + getSubCategories() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/subcategories` + }, + json: true + }).then((response) => response.body); + } + getAppStoreExclusiveBundles(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/exclusive-items/${options.appStoreType}/bundles` + }, + json: true + }).then((response) => response.body); + } + getAssetFavoriteCount(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/assets/${options.assetId}/count` + }, + json: true + }).then((response) => response.body); + } + getBundleFavoriteCount(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/bundles/${options.bundleId}/count` + }, + json: true + }).then((response) => response.body); + } + removeAssetFavorite(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getUserFavoriteAsset(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite` + }, + json: true + }).then((response) => response.body); + } + favoriteAsset(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/assets/${options.assetId}/favorite`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + removeBundleFavorite(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getUserFavoriteBundle(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite` + }, + json: true + }).then((response) => response.body); + } + favoriteBundle(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/favorites/users/${options.userId}/bundles/${options.bundleId}/favorite`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } +} +exports.CatalogAPI = CatalogAPI; diff --git a/dist/client/apis/ChatAPI.d.ts b/dist/client/apis/ChatAPI.d.ts new file mode 100644 index 000000000..21cbfbe4c --- /dev/null +++ b/dist/client/apis/ChatAPI.d.ts @@ -0,0 +1,266 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type ChatPartialConversationData = { + id: number; + title?: string; +}; +export declare type ChatMessageSentData = { + content: string; + filteredForReceivers: boolean; + messageId: string; + sent: string; + messageType: "PlainText" | string; + resultType: "Success" | string; + statusMessage: string; +}; +export declare type ChatMessageData = { + id: string; + senderType: string; + sent: string; + read: boolean; + messageType: "PlainText" | string; + decorators: string[]; + senderTargetId: number; + content: string; + link?: { + type: "Game"; + game: { + universeId: number; + }; + }; + eventBased?: { + type: "SetConversationUniverse"; + setConversationUniverse: { + actorUserId: number; + universeId: number; + }; + }; +}; +export declare type ChatGetChatSettings = { + chatEnabled: boolean; +}; +export declare type ChatGetConversationMessages = ChatMessageData[]; +export declare type ChatGetRolloutSettings = { + rolloutFeatures: { + featureName: string; + isRolloutEnabled: boolean; + }[]; +}; +export declare type ChatGetUnreadConversationCount = { + count: number; +}; +export declare type ChatGetUnreadMessagesInConversations = { + conversationId: number; + chatMessages: ChatMessageData[]; +}[]; +export declare type ChatConversationData = { + id: number; + title: string; + initiator: { + type: "User" | string; + targetId: number; + name: string | null; + displayName: string | null; + }; + hasUnreadMessages: boolean; + participants: { + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + conversationType: "OneToOneConversation" | string; + conversationTitle: { + titleForViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: string; + conversationUniverse: number | null; +}; +export declare type ChatGetMetaData = { + isChatEnabledByPrivacySetting: string; + languageForPrivacySettingUnavailable: string; + maxConversationTitleLength: number; + numberOfMembersForPartyChrome: number; + partyChromeDisplayTimeStampInterval: number; + signalRDisconnectionResponseInMilliseconds: number; + typingInChatFromSenderThrottleMs: number; + typingInChatForReceiverExpirationMs: number; + relativeValueToRecordUiPerformance: number; + isChatDataFromLocalStorageEnabled: boolean; + chatDataFromLocalStorageExpirationSeconds: number; + isUsingCacheToLoadFriendsInfoEnabled: boolean; + cachedDataFromLocalStorageExpirationMS: number; + senderTypesForUnknownMessageTypeError: string[]; + isInvalidMessageTypeFallbackEnabled: boolean; + isRespectingMessageTypeEnabled: boolean; + validMessageTypesWhiteList: string[]; + shouldRespectConversationHasUnreadMessageToMarkAsRead: boolean; + isVoiceChatForClientSideEnabled: boolean; + isAliasChatForClientSideEnabled: boolean; + isPlayTogetherForGameCardsEnabled: boolean; + isRoactChatEnabled: boolean; +}; +export declare type ChatGetMultiLatestConversationMessages = ChatGetUnreadMessagesInConversations; +export declare type ChatAddUsersToConversation = { + conversationId: number; + rejectedParticipants: { + rejectedReason: string; + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + resultType: "Success" | string; + statusMessage: string; +}; +export declare type ChatMarkMessageInConversationAsReadOptions = { + conversationId: number; + endMessageId: string; +}; +export declare type ChatMarkConversationMessagesRead = { + resultType: "Success" | string; +}; +export declare type ChatMarkConversationsAsSeenOptions = { + conversationsToMarkSeen: number[]; +}; +export declare type ChatMarkConversationsSeen = { + resultType: "Success" | string; +}; +export declare type ChatRemoveUserFromConversation = { + conversation: ChatPartialConversationData; + resultType: "Success" | string; + statusMessage: string; +}; +export declare type ChatRenameGroupConversation = { + conversationTitle: string; + statusMessage: string; + resultType: "Success" | string; + title: { + titleForViewer: string; + isDefaultTitle: boolean; + }; +}; +export declare type ChatResetConversationUniverse = { + statusMessage: string; +}; +export declare type ChatSendGameLinkMessage = ChatMessageSentData; +export declare type ChatSendMessage = ChatMessageSentData; +export declare type ChatSetConversationUniverse = { + statusMessage: string; +}; +export declare type ChatStartCloudEditConversation = { + conversation: ChatConversationData; + rejectedParticipants: { + rejectedReason: string; + type: "User"; + targetId: number; + name: string; + displayName: string; + }[]; + resultType: "Success" | string; + statusMessage: string; +}; +export declare type ChatStartGroupConversation = ChatStartCloudEditConversation; +export declare type ChatStartOneToOneConversation = ChatStartCloudEditConversation; +export declare type ChatUpdateUserTypingStatus = { + statusMessage: string; +}; +export declare type ChatGetConversationsOptions = { + conversationIds: number[]; +}; +export declare type ChatGetConversationMessagesOptions = { + conversationId: number; + pageSize: number; + exclusiveStartMessageId?: string; +}; +export declare type ChatGetRolloutSettingsOptions = { + featureNames: string[]; +}; +export declare type ChatGetUnreadMessagesInConversationsOptions = { + conversationIds: number[]; + pageSize?: number; +}; +export declare type ChatGetUserConversationsOptions = { + pageNumber: number; + pageSize: number; +}; +export declare type ChatGetMultiLatestConversationMessagesOptions = { + conversationIds: number[]; + pageSize: number; +}; +export declare type ChatAddUsersToConversationOptions = { + participantUserIds: number[]; + conversationId: number; +}; +export declare type ChatMarkConversationMessagesReadOptions = { + conversationId: number; + endMessageId: string; +}; +export declare type ChatMarkConversationsSeenOptions = { + conversationsToMarkSeen: number[]; +}; +export declare type ChatRemoveUserFromConversationOptions = { + participantUserId: number; + conversationId: number; +}; +export declare type ChatRenameGroupConversationOptions = { + conversationId: number; + newTitle: string; +}; +export declare type ChatResetConversationUniverseOptions = { + conversationId: number; +}; +export declare type ChatSendMessageOptions = { + message: string; + conversationId: number; + decorators: string[]; +}; +export declare type ChatSetConversationUniverseOptions = { + conversationId: number; + universeId: number; +}; +export declare type ChatStartCloudEditConversationOptions = { + placeId: number; +}; +export declare type ChatStartGroupConversationOptions = { + participantUserIds: number[]; + title: string; +}; +export declare type ChatStartOneToOneConversationOptions = { + participantUserId: number; +}; +export declare type ChatUpdateUserTypingStatusOptions = { + conversationId: number; + isTyping: boolean; +}; +export declare type ChatSendGameLinkMessageOptions = { + universeId: number; + conversationId: number; + decorators: string[]; +}; +export declare class ChatAPI extends BaseAPI { + constructor(client: Client); + getChatSettings(): Promise; + getConversations(options: ChatGetConversationsOptions): Promise; + getConversationMessages(options: ChatGetConversationMessagesOptions): Promise; + getRolloutSettings(options: ChatGetRolloutSettingsOptions): Promise; + getUnreadConversationCount(): Promise; + getUnreadMessagesInConversations(options: ChatGetUnreadMessagesInConversationsOptions): Promise; + getUserConversations(options: ChatGetUserConversationsOptions): Promise; + getMetaData(): Promise; + getMultiLatestConversationMessages(options: ChatGetMultiLatestConversationMessagesOptions): Promise; + addUsersToConversation(options: ChatAddUsersToConversationOptions): Promise; + markConversationMessagesRead(options: ChatMarkConversationMessagesReadOptions): Promise; + markConversationsSeen(options: ChatMarkConversationsSeenOptions): Promise; + removeUserFromConversation(options: ChatRemoveUserFromConversationOptions): Promise; + renameGroupConversation(options: ChatRenameGroupConversationOptions): Promise; + resetConversationUniverse(options: ChatResetConversationUniverseOptions): Promise; + sendGameLinkMessage(options: ChatSendGameLinkMessageOptions): Promise; + sendMessage(options: ChatSendMessageOptions): Promise; + setConversationUniverse(options: ChatSetConversationUniverseOptions): Promise; + startCloudEditConversation(options: ChatStartCloudEditConversationOptions): Promise; + startGroupConversation(options: ChatStartGroupConversationOptions): Promise; + startOneToOneConversation(options: ChatStartOneToOneConversationOptions): Promise; + updateUserTypingStatus(options: ChatUpdateUserTypingStatusOptions): Promise; +} diff --git a/dist/client/apis/ChatAPI.js b/dist/client/apis/ChatAPI.js new file mode 100644 index 000000000..81b209bdb --- /dev/null +++ b/dist/client/apis/ChatAPI.js @@ -0,0 +1,250 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ChatAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class ChatAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://chat.roblox.com/" + }); + } + getChatSettings() { + return this.request({ + requiresAuth: true, + request: { + path: `v2/chat-settings` + }, + json: true + }).then((response) => response.body); + } + getConversations(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-conversations`, + qs: { + conversationIds: options.conversationIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + getConversationMessages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-messages`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getRolloutSettings(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-rollout-settings`, + qs: { + featureNames: options.featureNames.join(",") + } + }, + json: true + }).then((response) => response.body); + } + getUnreadConversationCount() { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-conversation-count` + }, + json: true + }).then((response) => response.body); + } + getUnreadMessagesInConversations(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-unread-messages`, + qs: { + conversationIds: options.conversationIds.join(","), + pageSize: options.pageSize + } + }, + json: true + }).then((response) => response.body); + } + getUserConversations(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-user-conversations`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getMetaData() { + return this.request({ + requiresAuth: true, + request: { + path: `v2/metadata` + }, + json: true + }).then((response) => response.body); + } + getMultiLatestConversationMessages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/multi-get-latest-messages`, + qs: options + }, + json: true + }).then((response) => response.body); + } + addUsersToConversation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/add-to-conversation`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markConversationMessagesRead(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/mark-as-read`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markConversationsSeen(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/mark-as-seen`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + removeUserFromConversation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/remove-from-conversation`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + renameGroupConversation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/rename-group-conversation`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + resetConversationUniverse(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/reset-conversation-universe`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + sendGameLinkMessage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/send-game-link-message`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + sendMessage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/send-message`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + setConversationUniverse(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/set-conversation-universe`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + startCloudEditConversation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/start-cloud-edit-conversation`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + startGroupConversation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/get-user-conversations`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + startOneToOneConversation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/start-one-to-one-conversation`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + updateUserTypingStatus(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v2/update-user-typing-status`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.ChatAPI = ChatAPI; diff --git a/dist/client/apis/ContactsAPI.d.ts b/dist/client/apis/ContactsAPI.d.ts new file mode 100644 index 000000000..10a69a519 --- /dev/null +++ b/dist/client/apis/ContactsAPI.d.ts @@ -0,0 +1,34 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type ContactsGetContactsMetaData = { + multiGetContactsMaxSize: number; + multiGetContactsCacheTTLinMS: number; +}; +export declare type ContactsGetUsersTagsOptions = { + targetUserIds: number[]; +}; +export declare type ContactsGetUsersTags = { + targetUserId: number; + targetUserTag: string; +}[]; +export declare type ContactsSetPendingUserTagOptions = { + targetUserId: number; + userTag: string; +}; +export declare type ContactsSetPendingUserTag = { + status: "Success" | string; +}; +export declare type ContactsSetUserTagOptions = { + targetUserId: number; + userTag: string; +}; +export declare type ContactsSetUserTag = { + status: "Success" | string; +}; +export declare class ContactsAPI extends BaseAPI { + constructor(client: Client); + getContactsMetaData(): Promise; + getUsersTags(options: ContactsGetUsersTagsOptions): Promise; + setPendingUserTag(options: ContactsSetPendingUserTagOptions): Promise; + setUserTag(options: ContactsSetUserTagOptions): Promise; +} diff --git a/dist/client/apis/ContactsAPI.js b/dist/client/apis/ContactsAPI.js new file mode 100644 index 000000000..1b18c86e6 --- /dev/null +++ b/dist/client/apis/ContactsAPI.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ContactsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class ContactsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://contacts.roblox.com/" + }); + } + getContactsMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/contacts/metadata` + }, + json: true + }).then((response) => response.body); + } + getUsersTags(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/get-tags`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + setPendingUserTag(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/set-pending-tag`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + setUserTag(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/tag`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.ContactsAPI = ContactsAPI; diff --git a/dist/client/apis/DataAPI.d.ts b/dist/client/apis/DataAPI.d.ts new file mode 100644 index 000000000..c11ecf2d2 --- /dev/null +++ b/dist/client/apis/DataAPI.d.ts @@ -0,0 +1,11 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type DataUploadDataOptions = { + assetId: number; + data: unknown; +}; +export declare type DataUploadDataResult = unknown; +export declare class DataAPI extends BaseAPI { + constructor(client: Client); + uploadData(options: DataUploadDataOptions): Promise; +} diff --git a/dist/client/apis/DataAPI.js b/dist/client/apis/DataAPI.js new file mode 100644 index 000000000..43b77a198 --- /dev/null +++ b/dist/client/apis/DataAPI.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class DataAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://data.roblox.com/" + }); + } + uploadData(options) { + return this.request({ + requiresAuth: true, + json: true, + request: { + path: `Data/Upload.ashx?assetid=${options.assetId}`, + method: "POST", + headers: { + "User-Agent": "Roblox/WinInet", + Requester: "Client", + "Content-Type": "application/xml", + Accept: "application/json" + } + } + }).then((response) => response.body); + } +} +exports.DataAPI = DataAPI; diff --git a/dist/client/apis/DevelopAPI.d.ts b/dist/client/apis/DevelopAPI.d.ts new file mode 100644 index 000000000..89e894ce9 --- /dev/null +++ b/dist/client/apis/DevelopAPI.d.ts @@ -0,0 +1,604 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { PartialGroupOptions } from "../../old_structures/Group"; +import { ISOString } from "../../types/GenericTypes"; +export declare type DevelopGameUniverseOptions = { + id: number; + rootPlaceId: number; + name: string; + description: string; + creatorType: string; + creator: { + id: number; + name: string; + }; + price: number; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: string; + updated: string; + studioAccessToApisAllowed: boolean; + createVipServersAllowed: boolean; + universeAvatarType: string; + genre: string; +}; +export declare type DevelopAgeDataAvailable = { + isAgeDataAvailable: boolean; +}; +export declare type DevelopProductAggregation = { + developerProductName: string; + revenueAmount: number; +}; +export declare type DevelopProductAggregations = { + allDevicesDeveloperProductRevenue: DevelopProductAggregation[]; + developerProductRevenueByDevice: { + Computer: DevelopProductAggregation[]; + Phone: DevelopProductAggregation[]; + Tablet: DevelopProductAggregation[]; + Console: DevelopProductAggregation[]; + }; +}; +export declare type DevelopTeamCreateSessionMember = { + id: number; + name: string; + displayName: string; +}; +export declare type DevelopTeamCreateSessionMembers = { + data: DevelopTeamCreateSessionMember[]; +}; +export declare type DevelopTeamCreateEnabled = { + isEnabled: boolean; +}; +export declare type DevelopTeamCreateMember = { + buildersClubMembershipType: "None" | "RobloxPremium"; + userId: number; + username: string; + displayName: string; +}; +export declare type DevelopTeamCreateMembers = { + previousPageCursor: string; + nextPageCursor: string; + data: DevelopTeamCreateMember[]; +}; +export declare type DevelopInvitedTeamCreatePlace = { + id: number; + name: string; + description: string; + isArchived: boolean; + rootPlaceId: number; + isActive: boolean; + privacyType: "Public" | "FriendsOnly" | "Private"; + creatorType: "User" | "Group"; + creatorTargetId: number; + creatorName: string; + created: ISOString; + updated: ISOString; +}; +export declare type DevelopInvitedTeamCreatePlaces = { + previousPageCursor: string; + nextPageCursor: string; + data: DevelopInvitedTeamCreatePlace[]; +}; +export declare type DevelopGetUniverseLiveStatsOptions = { + universeId: number; +}; +export declare type DevelopGetUniverseLiveStats = { + totalPlayerCount: number; + playerCountsByDeviceType: Record; + gameCount: number; +}; +export declare type DevelopGetUniverseRevenueReportsOptions = { + universeId: number; +}; +export declare type DevelopGetUniverseRevenueReport = { + month: number; + year: number; + RevenueReportStatus: "NotGenerated" | "ReadyForDownload"; +}; +export declare type DevelopGetUniverseRevenueReports = { + monthlyRevenueReportStatusList: DevelopGetUniverseRevenueReport[]; +}; +export declare type DevelopGetUniverseRevenueReportOptions = { + universeId: number; + yearDashMonth: `${number}-${number}`; +}; +export declare type DevelopCreatorDashboardMetadata = { + isPlayFabDataSourceChartsEnabled: boolean; + playFabDataSourceChartsAvailableByKPITypes: string[]; +}; +export declare type DevelopGetAssetsVoteInformationOptions = { + assetIds: number[]; +}; +export declare type DevelopGetAssetsVoteInformation = { + data: { + assetId: number; + hasUserVoted: number; + canUserVote: number; + shouldShowVote: boolean; + upVotes: number; + downVotes: number; + reasonForNotAbleToVote: string; + }[]; +}; +export declare type DevelopGetGameTemplates = { + gameTemplateType: string; + hasTutorials: boolean; + universe: DevelopGameUniverseOptions; +}[]; +export declare type DevelopGetGameUpdatesHistoryOptions = { + universeId: number; +}; +export declare type DevelopGetGameUpdatesHistory = { + universeId: number; + createdOn: string; + createdOnKey: string; + creatorType: string; + creatorId: number; + creatorName: string; + expiredOn: string; + content: string; + impressions: number; + plays: number; + unfollows: number; +}[]; +export declare type DevelopPublishGameNotificationOptions = { + universeId: number; + gameUpdateText: unknown; +}; +export declare type DevelopPublishGameNotification = DevelopGetGameUpdatesHistory; +export declare type DevelopFilterPublishGameNotificationOptions = { + text: string; +}; +export declare type DevelopFilterPublishGameNotification = { + filteredGameUpdateText: string; + isFiltered: boolean; + moderationLevel: number; +}; +export declare type DevelopGetGroupUniversesOptions = { + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type DevelopGetGroupUniverses = { + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + description: string; + isArchived: boolean; + rootPlaceId: number | null; + isActive: boolean; + privacyType: "Private" | string; + creatorType: "Group" | string; + creatorTargetId: null; + creatorName: string; + created: string; + updated: string; + }[]; +}; +export declare type DevelopGetPlaceCompatibilitiesOptions = { + placeId: number; +}; +export declare type DevelopGetPlaceCompatibilities = { + Compatibilities: { + status: "Good" | string; + platformName: string; + crashRatePercentage: number; + }[]; +}; +export declare type DevelopUpdatePlaceConfigurationOptions = { + placeId: number; + name: string; + description: string; +}; +export declare type DevelopUpdatePlaceConfiguration = { + id: number; + universeId: number; + name: string; + description: string; +}; +export declare type DevelopGetPlaceStatisticsByTypeOptions = { + placeId: number; + type: "Revenue" | "RevenuePerVisit" | "AverageVisitLength" | "Visits"; + granularity?: "Hourly" | "Daily" | "Monthly"; + divisionType?: "Device" | "Age"; + startTime?: string; + endTime?: string; +}; +export declare type DevelopGetPlaceStatisticsByType = { + placeId: number; + dataType: DevelopGetPlaceStatisticsByTypeOptions["type"]; + dataGranularity: DevelopGetPlaceStatisticsByTypeOptions["granularity"]; + startTime: string; + endTime: string; + data: unknown; +}; +export declare type DevelopGetPluginsByIdOptions = { + pluginIds: number[]; +}; +export declare type DevelopGetPluginsById = { + data: { + id: number; + name: string; + description: string; + commentsEnabled: boolean; + versionId: number; + created: string; + updated: string; + }[]; +}; +export declare type DevelopUpdatePluginOptions = { + pluginId: number; + name: string; + description: string; + commentsEnabled: boolean; +}; +export declare type DevelopUpdatePlugin = unknown; +export declare type DevelopSearchUniversesOptions = { + q: { + creator: "user" | "group" | "team"; + archived?: boolean; + active?: boolean; + groups?: unknown[]; + search?: string; + }; + sort?: ("+GameCreated" | "-GameCreated" | "+GameName" | "-GameName" | "+RootPlaceName" | "-RootPlaceName" | "+RootPlaceUpdated" | "-RootPlaceUpdated" | "+LastUpdated" | "-LastUpdated")[]; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type DevelopSearchUniverseData = { + id: number; + name: string; + description: string; + isArchived: boolean; + rootPlaceId: number; + isActive: boolean; + privacyType: "Public" | "Private"; + creatorType: "User" | "Group"; + creatorTargetId: number; + creatorName: string; + created: string; + updated: string; +}; +export declare type DevelopSearchUniverses = { + previousPageCursor: string | null; + nextPageCursor: string | null; + data: DevelopSearchUniverseData[]; +}; +export declare type DevelopSearchToolboxOptions = { + category: string; + keyword?: string; + sort?: string; + creatorId?: number; + num?: number; + page?: number; + groupId?: number; + cacheMode?: "Normal" | "Bypass" | "ForceUpdate"; +}; +export declare type DevelopSearchToolbox = { + TotalResults: number; + Results: { + Asset: { + Id: number; + Name: string; + TypeId: number; + AssetGenres: string[]; + IsEndorsed: boolean; + Description: string; + Duration: number; + Created: string; + Updated: string; + CreatedRaw: string; + UpdatedRaw: string; + }; + Creator: { + Id: number; + Name: string; + Type: number; + }; + Thumbnail: { + Final: boolean; + Url: string; + RetryUrl: string; + UserId: number; + EndpointType: string; + }; + Voting: { + ShowVotes: boolean; + UpVotes: number; + DownVotes: number; + CanVote: boolean; + UserVote: boolean; + HasVoted: number; + ReasonForNotVoteable: string; + Product: { + ProductId: number; + Price: number; + }; + }; + }[]; +}; +export declare type DevelopGetUniverseOptions = { + universeId: number; +}; +export declare type DevelopGetUniverse = DevelopGameUniverseOptions; +export declare type DevelopGetUniversePermissionsOptions = { + universeId: number; +}; +export declare type DevelopGetUniversePermissions = { + canManage: boolean; + canCloudEdit: boolean; +}; +export declare type DevelopGetUniversePlacesOptions = { + universeId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type DevelopGetUniversePlaces = { + previousPageCursor: string; + nextPageCursor: string; + data: unknown[]; +}; +export declare type DevelopGetUniverseStatisticsReportsOptions = { + universeId: number; +}; +export declare type DevelopGetUniverseStatisticsReports = { + reports: { + universeId: number; + yearDashMonth: string; + status: "NotGenerated" | string; + spreadsheetId: string; + }[]; +}; +export declare type DevelopGetUniverseStatisticsReportsByTimeOptions = { + universeId: number; + yearDashMonth: string; +}; +export declare type DevelopGetUniverseStatisticsReportByTime = { + universeId: number; + yearDashMonth: string; + status: "NotGenerated" | string; + spreadsheetId: string; +}; +export declare type DevelopDownloadUniverseStatisticsReportByTimeOptions = { + universeId: number; + yearDashMonth: string; +}; +export declare type DevelopDownloadUniverseStatisticsReportByTime = unknown; +export declare type DevelopMultiGetUniversesOptions = { + ids: number[]; +}; +export declare type DevelopMultiGetUniverses = DevelopGameUniverseOptions[]; +export declare type DevelopMultiGetUniversesPermissionsOptions = { + ids: number[]; +}; +export declare type DevelopMultiGetUniversesPermissions = { + data: { + universeId: number; + canManage: boolean; + canCloudEdit: boolean; + }[]; +}; +export declare type DevelopActivateUniverseOptions = { + universeId: number; +}; +export declare type DevelopActivateUniverse = unknown; +export declare type DevelopDeactivateUniverseOptions = { + universeId: number; +}; +export declare type DevelopDeactivateUniverse = unknown; +export declare type DevelopGenerateUniverseStatisticReportsByTimeOptions = { + universeId: number; + yearDashMonth: string; +}; +export declare type DevelopGenerateUniverseStatisticReportsByTime = unknown; +export declare type DevelopGetUniverseConfigurationOptions = { + universeId: number; +}; +export declare type DevelopGetUniverseConfiguration = { + id: number; + name: string; + universeAvatarType: "MorphToR6" | "MorphToR15"; + universeScaleType: "NoScales" | string; + universeAnimationType: "Standard" | string; + universeCollisionType: "InnerBox" | string; + universeBodyType: "Standard" | string; + universeJointPositioningType: "Standard" | string; + isArchived: boolean; + isFriendsOnly: boolean; + genre: "All" | string; + playableDevices: ("Computer" | string)[]; + isForSale: boolean; + price: number; +}; +export declare type DevelopUpdateUniverseConfigurationOptions = Omit & { + universeId: number; +}; +export declare type DevelopUpdateUniverseConfiguration = DevelopGetUniverseConfiguration; +export declare type DevelopGetUniverseVIPServersConfigurationOptions = { + universeId: number; +}; +export declare type DevelopGetUniverseVIPServersConfiguration = { + isEnabled: boolean; + price: number; + activeServersCount: number; + activeSubscriptionsCount: number; +}; +export declare type DevelopGetUniverseTeamCreateSettingsOptions = { + universeId: number; +}; +export declare type DevelopGetUniverseTeamCreateSettings = { + isEnabled: boolean; +}; +export declare type DevelopUpdateUniverseTeamCreateSettingsOptions = DevelopGetUniverseTeamCreateSettingsOptions; +export declare type DevelopUpdateUniverseTeamCreateSettings = unknown; +export declare type DevelopRemoveUserFromUniverseTeamCreateOptions = { + universeId: number; + userId: number; +}; +export declare type DevelopRemoveUserFromUniverseTeamCreate = unknown; +export declare type DevelopGetUsersInUniverseTeamCreateOptions = { + universeId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type DevelopGetUsersInUniverseTeamCreate = { + previousPageCursor: string; + nextPageCursor: string; + data: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }[]; +}; +export declare type DevelopGetSelfTeamCreateUniversesAccessOptions = { + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type DevelopGetSelfTeamCreateUniversesAccess = { + previousPageCursor: string; + nextPageCursor: string; + data: DevelopGameUniverseOptions[]; +}; +export declare type DevelopGetSelfGroupsAccess = { + data: PartialGroupOptions[]; +}; +export declare type DevelopGetNotificationsStatisticReports = { + data: { + UserId: number; + UniverseId: number; + Expires: number; + RootPlaceId: number; + GameName: string; + }[]; +}; +export declare type DevelopGetStudioDataOptions = { + clientKey: string; +}; +export declare type DevelopGetStudioData = unknown; +export declare type DevelopSetStudioDataOptions = { + clientKey: string; + data: unknown; +}; +export declare type DevelopSetStudioData = { + success: boolean; +}; +export declare type DevelopGetSelfUniversesOptions = { + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type DevelopGetSelfUniverses = { + previousPageCursor: string; + nextPageCursor: string; + data: DevelopGameUniverseOptions[]; +}; +export declare type DevelopCreateUniverseAliasOptions = { + name: string; + type: "Asset" | string; + targetId: number; +}; +export declare type DevelopCreateUniverseAlias = unknown; +export declare type DevelopDeleteUniverseAliasOptions = { + universeId: number; + name: string; +}; +export declare type DevelopDeleteUniverseAlias = unknown; +export declare type DevelopUpdateUniverseAliasOptions = DevelopCreateUniverseAliasOptions; +export declare type DevelopUpdateUniverseAlias = unknown; +export declare type DevelopCreateDeveloperProductOptions = { + universeId: number; + name: string; + description: string; + priceInRobux: number; + iconImageAssetId?: number; +}; +export declare type DevelopCreateDeveloperProduct = { + id: number; + name: string; + Description: string; + shopId: number; + iconImageAssetId: number; +}; +export declare type DevelopUpdateDeveloperProductOptions = { + universeId: number; + developerProductId: number; + Name: string; + Description: string; + IconImageAssetId?: number; + PriceInRobux: number; +}; +export declare type DevelopUpdateDeveloperProduct = unknown; +export declare class DevelopAPI extends BaseAPI { + constructor(client: Client); + getGameTemplates(): Promise; + getGameUpdatesHistory(options: DevelopGetGameUpdatesHistoryOptions): Promise; + publishGameUpdateNotification(options: DevelopPublishGameNotificationOptions): Promise; + filterGameUpdateNotificationText(options: DevelopFilterPublishGameNotificationOptions): Promise; + getGroupUniverses(options: DevelopGetGroupUniversesOptions): Promise; + getPlaceCompatibilities(options: DevelopGetPlaceCompatibilitiesOptions): Promise; + updatePlaceConfiguration(options: DevelopUpdatePlaceConfigurationOptions): Promise; + getPlaceStatistics(options: DevelopGetPlaceStatisticsByTypeOptions): Promise; + isPlaceAgeDataAvailable(options: { + placeId: number; + }): Promise; + getDeveloperProductAggregation(options: { + placeId: number; + timeFrame: "Hourly" | "Daily" | "Monthly"; + }): Promise; + getCreatorDashboardMetadata(): Promise; + getTeamCreateSessionMembers(options: { + placeId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + }): Promise; + setTeamCreateEnabled(options: { + universeId: number; + } & DevelopTeamCreateEnabled): Promise; + getMultiPlugins(options: DevelopGetPluginsByIdOptions): Promise; + updatePlugin(options: DevelopUpdatePluginOptions): Promise; + searchUniverses(options: DevelopSearchUniversesOptions): Promise; + searchToolbox(options: DevelopSearchToolboxOptions): Promise; + getUniverse(options: DevelopGetUniverseOptions): Promise; + getUniverseLiveStats(options: DevelopGetUniverseLiveStatsOptions): Promise; + getSelfUniversePermissions(options: DevelopGetUniversePermissionsOptions): Promise; + getPlacesInUniverse(options: DevelopGetUniversePlacesOptions): Promise; + getUniverseRevenueReports(options: DevelopGetUniverseRevenueReportsOptions): Promise; + getUniverseRevenueReport(options: DevelopGetUniverseRevenueReportOptions): Promise; + downloadUniverseRevenueReport(options: DevelopGetUniverseRevenueReportOptions): Promise; + getUniverseStatisticReports(options: DevelopGetUniverseStatisticsReportsOptions): Promise; + getUniverseStatisticReportsByTime(options: DevelopGetUniverseStatisticsReportsByTimeOptions): Promise; + downloadUniverseStatisticReportsByTime(options: DevelopDownloadUniverseStatisticsReportByTimeOptions): Promise; + getMultiUniverses(options: DevelopMultiGetUniversesOptions): Promise; + getMultiUniversesPermissions(options: DevelopMultiGetUniversesPermissionsOptions): Promise; + activateUniverse(options: DevelopActivateUniverseOptions): Promise; + deactivateUniverse(options: DevelopDeactivateUniverseOptions): Promise; + generateUniverseStatisticReportsByTime(options: DevelopGenerateUniverseStatisticReportsByTimeOptions): Promise; + getUniverseConfiguration(options: DevelopGetUniverseConfigurationOptions): Promise; + updateUniverseConfiguration(options: DevelopUpdateUniverseConfigurationOptions): Promise; + getUniverseVIPServersConfiguration(options: DevelopGetUniverseVIPServersConfigurationOptions): Promise; + getUniverseTeamCreateSettings(options: DevelopGetUniverseTeamCreateSettingsOptions): Promise; + removeUserFromUniverseTeamCreate(options: DevelopRemoveUserFromUniverseTeamCreateOptions): Promise; + getUniverseTeamCreateMembers(options: DevelopGetUsersInUniverseTeamCreateOptions): Promise; + getSelfUniversesTeamCreateAccess(options: DevelopGetSelfTeamCreateUniversesAccessOptions): Promise; + getSelfManageableGroups(): Promise; + getSelfNotificationStatisticReports(): Promise; + getStudioData(options: DevelopGetStudioDataOptions): Promise; + setStudioData(options: DevelopSetStudioDataOptions): Promise; + getSelfUniverses(options: DevelopGetSelfUniversesOptions): Promise; + createUniverseAlias(options: DevelopCreateUniverseAliasOptions): Promise; + deleteUniverseAlias(options: DevelopDeleteUniverseAliasOptions): Promise; + updateUniverseAlias(options: DevelopUpdateUniverseAliasOptions): Promise; + createDeveloperProduct(options: DevelopCreateDeveloperProductOptions): Promise; + updateDeveloperProduct(options: DevelopUpdateDeveloperProductOptions): Promise; +} diff --git a/dist/client/apis/DevelopAPI.js b/dist/client/apis/DevelopAPI.js new file mode 100644 index 000000000..0577d3025 --- /dev/null +++ b/dist/client/apis/DevelopAPI.js @@ -0,0 +1,516 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DevelopAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class DevelopAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://develop.roblox.com/" + }); + } + getGameTemplates() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gametemplates` + }, + json: true + }).then((response) => response.body.data); + } + getGameUpdatesHistory(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gameUpdateNotifications/${options.universeId}` + }, + json: true + }).then((response) => response.body); + } + publishGameUpdateNotification(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gameUpdateNotifications/${options.universeId}`, + method: "POST", + json: `"${options.gameUpdateText}"` + }, + json: true + }).then((response) => response.body); + } + filterGameUpdateNotificationText(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/gameUpdateNotifications/filter`, + method: "POST", + json: `"${options.text}"` + }, + json: true + }).then((response) => response.body); + } + getGroupUniverses(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/universes`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getPlaceCompatibilities(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/compatibilities` + }, + json: true + }).then((response) => response.body); + } + updatePlaceConfiguration(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getPlaceStatistics(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/stats/${options.type}`, + qs: options + }, + json: true + }).then((response) => response.body); + } + isPlaceAgeDataAvailable(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/is-age-data-available`, + method: "GET" + }, + json: true + }).then((response) => response.body); + } + getDeveloperProductAggregation(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/places/${options.placeId}/developer-product-aggregation`, + method: "GET", + qs: options + }, + json: true + }).then((response) => response.body); + } + getCreatorDashboardMetadata() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/creator-dashboard-metadata` + }, + json: true + }).then((response) => response.body); + } + getTeamCreateSessionMembers(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/places/${options.placeId}/teamcreate/active_session/members`, + qs: { + limit: options.limit || 10, + cursor: options.cursor + } + }, + json: true + }).then((response) => response.body); + } + setTeamCreateEnabled(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/teamcreate`, + method: "PATCH", + json: { isEnabled: options.isEnabled } + }, + json: true + }).then(() => true); + } + getMultiPlugins(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/plugins`, + qs: { + pluginIds: options.pluginIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + updatePlugin(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/plugins/${options.pluginId}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + searchUniverses(options) { + const encodedQuery = `${options.q.search || ""} creator:${options.q.creator.slice(0, 1).toUpperCase() + options.q.creator.slice(1)} ${typeof options.q.active !== "undefined" + ? `active:${options.q.active ? "True" : "False"}` + : ""} ${options.q.archived + ? `archived:${options.q.archived ? "True" : "False"}` + : ""} ${options.q.groups ? `groups:${options.q.groups.join(",")}` : ""}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/search/universes`, + qs: Object.assign(Object.assign({}, options), { sort: (options.sort || []).join(","), + // End me, please... + q: encodedQuery }) + }, + json: true + }).then((response) => response.body); + } + searchToolbox(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/toolbox/items`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUniverse(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}` + }, + json: true + }).then((response) => response.body); + } + getUniverseLiveStats(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/live-stats` + }, + json: true + }).then((response) => response.body); + } + getSelfUniversePermissions(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/permissions` + }, + json: true + }).then((response) => response.body); + } + getPlacesInUniverse(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/places`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUniverseRevenueReports(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/revenue-reports`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUniverseRevenueReport(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/revenue-reports/${options.yearDashMonth}` + }, + json: true + }).then((response) => response.body); + } + downloadUniverseRevenueReport(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/revenue-reports/${options.yearDashMonth}/download`, + method: "GET" + } + }).then((response) => response.body); + } + getUniverseStatisticReports(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports` + }, + json: true + }).then((response) => response.body); + } + getUniverseStatisticReportsByTime(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}` + }, + json: true + }).then((response) => response.body); + } + downloadUniverseStatisticReportsByTime(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/download` + }, + json: true + }).then((response) => response.body); + } + getMultiUniverses(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/multiget`, + qs: { + ids: options.ids.join(",") + } + }, + json: true + }).then((response) => response.body); + } + getMultiUniversesPermissions(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/multiget/permissions`, + qs: { + ids: options.ids.join(",") + } + }, + json: true + }).then((response) => response.body); + } + activateUniverse(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/activate`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + deactivateUniverse(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/deactivate`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + generateUniverseStatisticReportsByTime(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/statistic-reports/${options.yearDashMonth}/generate`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + getUniverseConfiguration(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/configuration` + }, + json: true + }).then((response) => response.body); + } + updateUniverseConfiguration(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/configuration`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getUniverseVIPServersConfiguration(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/configuration/vip-servers` + }, + json: true + }).then((response) => response.body); + } + getUniverseTeamCreateSettings(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate` + }, + json: true + }).then((response) => response.body); + } + removeUserFromUniverseTeamCreate(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate/memberships`, + method: "DELETE", + json: options + }, + json: true + }).then((response) => response.body); + } + getUniverseTeamCreateMembers(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/teamcreate/memberships`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSelfUniversesTeamCreateAccess(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/teamcreate/memberships`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSelfManageableGroups() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/groups/canmanage` + }, + json: true + }).then((response) => response.body); + } + getSelfNotificationStatisticReports() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/notifications/statistic-reports` + }, + json: true + }).then((response) => response.body); + } + getStudioData(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/studiodata`, + qs: options + }, + json: true + }).then((response) => response.body); + } + setStudioData(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/studiodata`, + method: "POST", + json: options, + qs: { + clientKey: options.clientKey + } + }, + json: true + }).then((response) => response.body); + } + getSelfUniverses(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/user/universes`, + qs: options + }, + json: true + }).then((response) => response.body); + } + createUniverseAlias(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.targetId}/aliases` + }, + json: true + }).then((response) => response.body); + } + deleteUniverseAlias(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/aliases/${options.name}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + updateUniverseAlias(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.targetId}/aliases/${options.name}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + createDeveloperProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/developerproducts`, + method: "POST", + qs: options + }, + json: true + }).then((response) => response.body); + } + updateDeveloperProduct(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/universes/${options.universeId}/developerproducts/${options.developerProductId}/update`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.DevelopAPI = DevelopAPI; diff --git a/dist/client/apis/EconomyAPI.d.ts b/dist/client/apis/EconomyAPI.d.ts new file mode 100644 index 000000000..a8d5db4dd --- /dev/null +++ b/dist/client/apis/EconomyAPI.d.ts @@ -0,0 +1,174 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { BillingSubmitDeveloperExchangeOptions } from "./BillingAPI"; +export declare type EconomyGetAssetResaleDataOptions = { + assetId: number; +}; +export declare type EconomyGetAssetResaleData = { + assetStock: number; + sales: number; + numberRemaining: number; + recentAveragePrice: number; + originalPrice: number; + priceDataPoints: { + value: number; + date: string; + }[]; + volumeDataPoints: { + value: number; + date: string; + }[]; +}; +export declare type EconomyGetAssetResellersOptions = { + assetId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type EconomyGetAssetResellers = { + previousPageCursor: string; + nextPageCursor: string; + data: { + userAssetId: number; + seller: { + id: number; + type: "User" | "Group"; + name: string; + }; + price: number; + serialNumber: number; + }[]; +}; +export declare type EconomyGetUserResellableAssetCopiesOptions = { + userId: number; + assetId: number; +}; +export declare type EconomyGetUserResellableAssetCopies = { + data: EconomyGetAssetResellers["data"]; +}; +export declare type EconomyGetResaleTaxRate = { + taxRate: number; + minimumFee: number; +}; +export declare type EconomySetAssetCopiesOptions = { + assetId: number; + userAssetId: number; + price: number; +}; +export declare type EconomySetAssetCopies = unknown; +export declare type EconomyGetDeveloperExchangeAbility = { + canCashOut: boolean; + meetsPremiumRequirement: boolean; + hasVerifiedEmail: boolean; + isUserBlackListed: boolean; + meetsMinimumCashOutBalance: boolean; + hasCashedOutThisMonth: boolean; + lastImbursementStatusIsValid: boolean; +}; +export declare type EconomyGetDeveloperExchangeHelp = unknown; +export declare type EconomyGetDeveloperExchangeInfoOptions = { + fromDevExPage: boolean; +}; +export declare type EconomyGetDeveloperExchangeInfo = { + hasCurrencyOperationError: boolean; + currencyOperationErrorMessage: string; + showOnlyExchangeRates: boolean; + meetsMembershipRequirements: boolean; + emailIsVerified: boolean; + isImbursementBlacklistUser: boolean; + canProceedToCashout: boolean; + showProgressBar: boolean; + percentRobux: number; + minRobuxToCashOut: number; + maxRobuxCanCashOut: number; + lastImbursementStatus: string; + lastImbursementSubmissionDate: string; + conversionPercent: number; +}; +export declare type EconomySubmitDeveloperExchangeOptions = BillingSubmitDeveloperExchangeOptions; +export declare type EconomySubmitDeveloperExchange = { + submitted: boolean; + cashOutAbility: { + canCashOut: boolean; + meetsPremiumRequirement: boolean; + hasVerifiedEmail: boolean; + isUserBlcakListed: boolean; + meetsMinimumCashOutBalance: boolean; + hasCashedOutThisMonth: boolean; + lastImbursementStatusIsValid: boolean; + }; + errors: unknown; +}; +export declare type EconomyGetGroupCurrencyOptions = { + groupId: number; +}; +export declare type EconomyGetGroupCurrency = { + robux: number; +}; +export declare type EconomyGetSelfCurrencyOptions = { + userId: number; +}; +export declare type EconomyGetSelfCurrency = { + robux: number; +}; +export declare type EconomyGetGroupRevenueSummaryInTimeFrameOptions = { + groupId: number; + timeFrame: "Day" | "Week" | "Month" | "Year"; +}; +export declare type EconomyGetGroupRevenueSummaryInTimeFrame = { + recurringRobuxStipend: number; + itemSaleRobux: number; + purchasedRoblox: number; + tradeSystemRobux: number; + pendingRobux: number; + groupPayoutRobux: number; +}; +export declare type EconomyGetSelfRevenueSummaryInTimeFrameOptions = Omit & { + userId: number; +}; +export declare type EconomyGetSelfRevenueSummaryInTimeFrame = EconomyGetGroupRevenueSummaryInTimeFrame; +export declare type EconomyGetGroupTransactionsOptions = { + groupId: number; + transactionType: "Sale" | "Purchase" | "AffiliateSale" | "DevEx" | "GroupPayout" | "AdImpressionPayout"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type EconomyGetGroupTransactions = { + previousPageCursor: string; + nextPageCursor: string; + data: { + created: string; + isPending: boolean; + agent: { + id: number; + type: "User" | "Group"; + name: string; + }; + details: unknown; + currency: { + amount: number; + type: "Robux" | string; + }; + }[]; +}; +export declare type EconomyGetSelfTransactionsOptions = Omit & { + userId: number; +}; +export declare type EconomyGetSelfTransactions = EconomyGetGroupTransactions; +export declare class EconomyAPI extends BaseAPI { + constructor(client: Client); + getAssetResaleData(options: EconomyGetAssetResaleDataOptions): Promise; + getAssetResellers(options: EconomyGetAssetResellersOptions): Promise; + getUserResellableAssetCopies(options: EconomyGetUserResellableAssetCopiesOptions): Promise; + getResaleTaxRate(): Promise; + setAssetCopiesForSale(options: EconomySetAssetCopiesOptions): Promise; + getDeveloperExchangeAbility(): Promise; + getDeveloperExchangeHelp(): Promise; + getDeveloperExchangeInfo(options: EconomyGetDeveloperExchangeInfoOptions): Promise; + submitDeveloperExchange(options: EconomySubmitDeveloperExchangeOptions): Promise; + getGroupCurrency(options: EconomyGetGroupCurrencyOptions): Promise; + getSelfCurrency(options: EconomyGetSelfCurrencyOptions): Promise; + getGroupRevenueByTime(options: EconomyGetGroupRevenueSummaryInTimeFrameOptions): Promise; + getSelfRevenueSummaryByTIme(options: EconomyGetSelfRevenueSummaryInTimeFrameOptions): Promise; + getGroupTransactions(options: EconomyGetGroupTransactionsOptions): Promise; + getSelfTransactions(options: EconomyGetSelfTransactionsOptions): Promise; +} diff --git a/dist/client/apis/EconomyAPI.js b/dist/client/apis/EconomyAPI.js new file mode 100644 index 000000000..ec7112ddb --- /dev/null +++ b/dist/client/apis/EconomyAPI.js @@ -0,0 +1,158 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EconomyAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class EconomyAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://economy.roblox.com/" + }); + } + getAssetResaleData(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/resale-data` + }, + json: true + }).then((response) => response.body); + } + getAssetResellers(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/resellers`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserResellableAssetCopies(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/${options.assetId}/users/${options.userId}/resellable-copies` + }, + json: true + }).then((response) => response.body); + } + getResaleTaxRate() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/resale-tax-rate` + }, + json: true + }).then((response) => response.body); + } + setAssetCopiesForSale(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/assets/${options.assetId}/resellable-copies/${options.userAssetId}`, + method: "PATCH", + json: { + price: options.price + } + }, + json: true + }).then((response) => response.body); + } + getDeveloperExchangeAbility() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/cashoutAbility` + }, + json: true + }).then((response) => response.body); + } + getDeveloperExchangeHelp() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/help` + }, + json: true + }).then((response) => response.body); + } + getDeveloperExchangeInfo(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/info`, + qs: options + }, + json: true + }).then((response) => response.body); + } + submitDeveloperExchange(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/developer-exchange/submit`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getGroupCurrency(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/currency` + }, + json: true + }).then((response) => response.body); + } + getSelfCurrency(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/currency` + }, + json: true + }).then((response) => response.body); + } + getGroupRevenueByTime(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/revenue/summary/${options.timeFrame}` + }, + json: true + }).then((response) => response.body); + } + getSelfRevenueSummaryByTIme(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/revenue/summary/${options.timeFrame}` + }, + json: true + }).then((response) => response.body); + } + getGroupTransactions(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/transactions`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSelfTransactions(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/transactions`, + qs: options + }, + json: true + }).then((response) => response.body); + } +} +exports.EconomyAPI = EconomyAPI; diff --git a/dist/client/apis/EconomyCreatorStatsAPI.d.ts b/dist/client/apis/EconomyCreatorStatsAPI.d.ts new file mode 100644 index 000000000..56131c1fd --- /dev/null +++ b/dist/client/apis/EconomyCreatorStatsAPI.d.ts @@ -0,0 +1,16 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type EconomyCreatorStatsGetUniverseStatsOptions = { + universeId: number; + type: "PremiumUpsells" | "PremiumVisits"; + startTime: string; + endTime: string; +}; +export declare type EconomyCreatorStatsGetUniverseStats = { + dataGranularity: "Hourly" | string; + data: unknown; +}; +export declare class EconomyCreatorStatsAPI extends BaseAPI { + constructor(client: Client); + getUniverseStats(options: EconomyCreatorStatsGetUniverseStatsOptions): Promise; +} diff --git a/dist/client/apis/EconomyCreatorStatsAPI.js b/dist/client/apis/EconomyCreatorStatsAPI.js new file mode 100644 index 000000000..b3bc65d32 --- /dev/null +++ b/dist/client/apis/EconomyCreatorStatsAPI.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EconomyCreatorStatsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class EconomyCreatorStatsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://economycreatorstats.roblox.com/" + }); + } + getUniverseStats(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universes/${options.universeId}/stats`, + qs: { + "request.type": options.type, + "request.startTime": options.startTime, + "request.endTime": options.endTime + } + }, + json: true + }).then((response) => response.body); + } +} +exports.EconomyCreatorStatsAPI = EconomyCreatorStatsAPI; diff --git a/dist/client/apis/EngagementPayoutsAPI.d.ts b/dist/client/apis/EngagementPayoutsAPI.d.ts new file mode 100644 index 000000000..864be93cd --- /dev/null +++ b/dist/client/apis/EngagementPayoutsAPI.d.ts @@ -0,0 +1,12 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type EngagementPayoutsGetUniversePayoutHistoryOptions = { + universeId: number; + startDate: string; + endDate: string; +}; +export declare type EngagementPayoutsGetUniversePayoutHistory = unknown; +export declare class EngagementPayoutsAPI extends BaseAPI { + constructor(client: Client); + getUniversePayoutHistory(options: EngagementPayoutsGetUniversePayoutHistoryOptions): Promise; +} diff --git a/dist/client/apis/EngagementPayoutsAPI.js b/dist/client/apis/EngagementPayoutsAPI.js new file mode 100644 index 000000000..da58518fc --- /dev/null +++ b/dist/client/apis/EngagementPayoutsAPI.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EngagementPayoutsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class EngagementPayoutsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://engagementpayouts.roblox.com/" + }); + } + getUniversePayoutHistory(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/universe-payout-history`, + qs: options + }, + json: true + }).then((response) => response.body); + } +} +exports.EngagementPayoutsAPI = EngagementPayoutsAPI; diff --git a/dist/client/apis/FollowingsAPI.d.ts b/dist/client/apis/FollowingsAPI.d.ts new file mode 100644 index 000000000..fad88680e --- /dev/null +++ b/dist/client/apis/FollowingsAPI.d.ts @@ -0,0 +1,38 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type FollowingsGetUserFollowedUniversesOptions = { + userId: number; +}; +export declare type FollowingsGetUserFollowedUniverses = { + universeId: number; + userId: number; +}[]; +export declare type FollowingsGetUserFollowingUniverseStatusOptions = { + userId: number; + universeId: number; +}; +export declare type FollowingsGetUserFollowingUniverseStatus = { + UniverseId: number; + UserId: number; + CanFollow: boolean; + IsFollowing: boolean; + FollowingCountByType: number; + FollowingLimitByType: number; +}; +export declare type FollowingsUnFollowUniverseOptions = { + userId: number; + universeId: number; +}; +export declare type FollowingsUnFollowUniverse = { + universeId: number; + userId: number; +}; +export declare type FollowingsFollowUniverseOptions = FollowingsUnFollowUniverseOptions; +export declare type FollowingsFollowUniverse = FollowingsUnFollowUniverse; +export declare class FollowingsAPI extends BaseAPI { + constructor(client: Client); + getUserFollowedUniverses(options: FollowingsGetUserFollowedUniversesOptions): Promise; + getUserFollowingUniverseStatus(options: FollowingsGetUserFollowingUniverseStatusOptions): Promise; + unFollowUniverse(options: FollowingsUnFollowUniverseOptions): Promise; + followUniverse(options: FollowingsFollowUniverseOptions): Promise; +} diff --git a/dist/client/apis/FollowingsAPI.js b/dist/client/apis/FollowingsAPI.js new file mode 100644 index 000000000..482a68032 --- /dev/null +++ b/dist/client/apis/FollowingsAPI.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FollowingsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class FollowingsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://followings.roblox.com/" + }); + } + getUserFollowedUniverses(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes` + }, + json: true + }).then((response) => response.body); + } + getUserFollowingUniverseStatus(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes/${options.universeId}/status` + }, + json: true + }).then((response) => response.body); + } + unFollowUniverse(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes/${options.universeId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + followUniverse(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/universes/${options.universeId}`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } +} +exports.FollowingsAPI = FollowingsAPI; diff --git a/dist/client/apis/FriendsAPI.d.ts b/dist/client/apis/FriendsAPI.d.ts new file mode 100644 index 000000000..d810b69fa --- /dev/null +++ b/dist/client/apis/FriendsAPI.d.ts @@ -0,0 +1,200 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { GeneralGetUserFriendsCount, GeneralGetUserFriendsCountOptions } from "./GeneralAPI"; +import { PartialUser } from "../../old_structures/User"; +import { EnumUserPresence, UserPresence } from "../../interfaces/GeneralInterfaces"; +export declare type FriendsFindFriendByCodeOptions = { + code: string; +}; +export declare type FriendsFindFriendByCode = { + userId: number; + username: string; + friendshipStatus: "NoFriendship" | string; +}; +export declare type FriendsCheckSessionHealth = unknown; +export declare type FriendsRedeemNearbyFriendCodeOptions = { + code: string; +}; +export declare type FriendsRedeemNearbyFriendCode = unknown; +export declare type FriendsDeleteSession = unknown; +export declare type FriendsGetOrCreateNearbySession = { + code: string; + expires: number; +}; +export declare type FriendsRedeemQRCodeOptions = { + code: string; +}; +export declare type FriendsRedeemQRCode = { + userId: number; + username: string; +}; +export declare type FriendsDeleteQRCodeSession = unknown; +export declare type FriendsGetOrCreateQRCodeSession = FriendsGetOrCreateNearbySession; +export declare type FriendsGetMetaDataOptions = { + targetUserId: number; +}; +export declare type FriendsGetMetaData = { + isFriendFinderEnabled: boolean; + isNearbyUpsellEnabled: boolean; + isFriendsUserDataStoreCacheEnabled: boolean; + userName: string; +}; +export declare type FriendsGetSelfFriendsCount = { + count: number; +}; +export declare type FriendsGetSelfFriendRequestsOptions = { + sortOrder?: "Desc" | "Asc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type FriendsGetSelfFriendRequests = { + previousPageCursor: string; + nextPageCursor: string; + data: { + description: string; + created: string; + isBanned: boolean; + userId: number; + username: string; + }[]; +}; +export declare type FriendsGetSelfFriendRequestsCount = { + count: number; +}; +export declare type FriendsGetUserFollowersOptions = { + userId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type FriendsGetUserFollowers = { + previousPageCursor: string; + nextPageCursor: string; + data: { + isOnline: boolean; + isDeleted: boolean; + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; + }[]; +}; +export declare type FriendsGetUserFollowersCountOptions = { + userId: number; +}; +export declare type FriendsGetUserFollowersCount = { + count: number; +}; +export declare type FriendsGetUserFollowingOptions = FriendsGetUserFollowersOptions; +export declare type FriendsGetUserFollowing = FriendsGetUserFollowers; +export declare type FriendsGetUserFollowingCountOptions = FriendsGetUserFollowersCountOptions; +export declare type FriendsGetUserFollowingCount = FriendsGetUserFollowersCount; +export declare type FriendsGetUserFriendsOptions = { + cursor?: string; + limit?: 10 | 25 | 50 | 100; + userId: number; +}; +export declare type FriendsGetUserFriends = { + data: { + isOnline: boolean; + isDeleted: boolean; + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; + }[]; +}; +export declare type FriendsGetUserOnlineFriendsOptions = { + userId: number; +}; +export declare type FriendsGetUserOnlineFriends = { + data: { + userId: number; + username: string; + presence: { + placeId: number | null; + universeId: number | null; + UserPresenceType: UserPresence | null; + UserLocationType: string | null; + lastLocation: string | null; + gameInstanceId: string | null; + lastOnline: string | null; + }; + }[]; +}; +export declare type FriendsGetUserFriendsWithStatusesOptions = { + userId: number; + withUserIds: number[]; +}; +export declare type FriendsGetUserFriendsWithStatuses = { + data: { + id: number; + status: "NotFriends" | string; + }[]; +}; +export declare type FriendsDeclineAllFriendRequests = unknown; +export declare type FriendsAcceptFriendRequestOptions = { + userId: number; +}; +export declare type FriendsAcceptFriendRequest = unknown; +export declare type FriendsDeclineFriendRequestOptions = FriendsAcceptFriendRequestOptions; +export declare type FriendsDeclineFriendRequest = unknown; +export declare type FriendsFollowUserOptions = { + userId: number; +}; +export declare type FriendsFollowUser = { + success: boolean; + isCaptchaRequired: boolean; +}; +export declare type FriendsSendFriendRequestOptions = { + userId: number; + source?: "Unknown" | string; +}; +export declare type FriendsSendFriendRequest = { + success: boolean; + isCaptchaRequired: boolean; +}; +export declare type FriendsUnFollowUserOptions = FriendsFollowUserOptions; +export declare type FriendsUnFollowUser = FriendsFollowUser; +export declare type FriendsUnfriendUserOptions = { + userId: number; +}; +export declare type FriendsUnfriendUser = unknown; +export declare type FriendsGetSelfRecommendedUsers = { + user: PartialUser; + profileUrl: string; + presenceType: EnumUserPresence; +}[]; +export declare class FriendsAPI extends BaseAPI { + constructor(client: Client); + findFriendByCode(options: FriendsFindFriendByCodeOptions): Promise; + checkSessionHealth(): Promise; + redeemFriendCode(options: FriendsRedeemNearbyFriendCodeOptions): Promise; + deleteFriendSession(): Promise; + getSession(): Promise; + redeemFriendQRCode(options: FriendsRedeemQRCodeOptions): Promise; + deleteFriendQRSession(): Promise; + getFriendQRSession(): Promise; + getMetaData(options: FriendsGetMetaDataOptions): Promise; + getSelfFriendsCount(): Promise; + getSelfFriendRequests(options: FriendsGetSelfFriendRequestsOptions): Promise; + getSelfFriendRequestsCount(): Promise; + getUserFollowers(options: FriendsGetUserFollowersOptions): Promise; + getUserFollowersCount(options: FriendsGetUserFollowersCountOptions): Promise; + getUserFollowing(options: FriendsGetUserFollowingOptions): Promise; + getUserFollowingCount(options: FriendsGetUserFollowingCountOptions): Promise; + getUserFriends(options: FriendsGetUserFriendsOptions): Promise; + getUserFriendsCount(options: GeneralGetUserFriendsCountOptions): Promise; + getUserFriendsOnline(options: FriendsGetUserOnlineFriendsOptions): Promise; + getUserFriendsWithStatuses(options: FriendsGetUserFriendsWithStatusesOptions): Promise; + declineAllFriendRequests(): Promise; + acceptFriendRequest(options: FriendsAcceptFriendRequestOptions): Promise; + declineFriendRequest(options: FriendsDeclineFriendRequestOptions): Promise; + followUser(options: FriendsFollowUserOptions): Promise; + sendFriendRequest(options: FriendsSendFriendRequestOptions): Promise; + unFollowUser(options: FriendsUnFollowUserOptions): Promise; + unfriendUser(options: FriendsUnfriendUserOptions): Promise; + getRecommendedUsers(): Promise; +} diff --git a/dist/client/apis/FriendsAPI.js b/dist/client/apis/FriendsAPI.js new file mode 100644 index 000000000..1d6341a33 --- /dev/null +++ b/dist/client/apis/FriendsAPI.js @@ -0,0 +1,289 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FriendsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class FriendsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://friends.roblox.com/" + }); + } + findFriendByCode(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/code/${options.code}` + }, + json: true + }).then((response) => response.body); + } + checkSessionHealth() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/health` + }, + json: true + }).then((response) => response.body); + } + redeemFriendCode(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/code/${options.code}/redeem`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + deleteFriendSession() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/session`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getSession() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/nearby/session`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + redeemFriendQRCode(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/qr/${options.code}/redeem`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + deleteFriendQRSession() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/qr/session`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getFriendQRSession() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/friends/verified/qr/session`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + getMetaData(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/metadata`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSelfFriendsCount() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/my/friends/count` + }, + json: true + }).then((response) => response.body); + } + getSelfFriendRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/my/friends/requests`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSelfFriendRequestsCount() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/friend-requests/count` + }, + json: true + }).then((response) => response.body); + } + getUserFollowers(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followers`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserFollowersCount(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followers/count` + }, + json: true + }).then((response) => response.body); + } + getUserFollowing(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followings`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserFollowingCount(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/followings/count` + }, + json: true + }).then((response) => response.body); + } + getUserFriends(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/friends`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserFriendsCount(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/friends/count` + }, + json: true + }).then((response) => response.body); + } + getUserFriendsOnline(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/friends/online` + }, + json: true + }).then((response) => response.body); + } + getUserFriendsWithStatuses(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/friends/statuses`, + qs: { + userIds: options.withUserIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + declineAllFriendRequests() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/friend-requests/decline-all`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + acceptFriendRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/accept-friend-request`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + declineFriendRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/decline-friend-request`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + followUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/follow`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + sendFriendRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/request-friendship`, + method: "POST", + json: { + friendshipOriginSourceType: options.source || "Unknown" + } + }, + json: true + }).then((response) => response.body); + } + unFollowUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/unfollow`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + unfriendUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/unfriend`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + getRecommendedUsers() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/recommended-users` + }, + json: true + }).then((response) => response.body); + } +} +exports.FriendsAPI = FriendsAPI; diff --git a/dist/client/apis/GameInternationalizationAPI.d.ts b/dist/client/apis/GameInternationalizationAPI.d.ts new file mode 100644 index 000000000..8a56273ad --- /dev/null +++ b/dist/client/apis/GameInternationalizationAPI.d.ts @@ -0,0 +1,119 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type GameInternationalizationGetGameInfoOptions = { + gameId: number; +}; +export declare type GameInternationalizationGetGameInfo = { + data: { + name: string; + description: string; + languageCode: string; + }[]; +}; +export declare type GameInternationalizationUpdateGameInfoOptions = { + gameId: number; + data: GameInternationalizationGetGameInfo; +}; +export declare type GameInternationalizationUpdateGameInfo = { + successOperations: GameInternationalizationGetGameInfo["data"]; + failedOperations: { + languageCode: string; + errorCode: number; + }[]; +}; +export declare type GameInternationalizationGetNameDescriptionMetaData = { + isNameDescriptionMigrationEnabled: boolean; +}; +export declare type GameInternationalizationGetGameInfoHistoryOptions = { + gameId: number; + requestType: string; + languageCode: string; + cursor: string; + count: number; + sortOrder: "Asc" | "Desc" | string; +}; +export declare type GameInternationalizationGetGameInfoHistory = { + history: { + translationText: string; + translator: { + id: number; + agentType: "User" | string; + }; + created: Date; + }[]; + lastEvaluatedId: string; +}; +export declare type GameInternationalizationGetGameSourceLanguageOptions = { + gameId: number; +}; +export declare type GameInternationalizationGetGameSourceLanguage = { + name: string; + nativeName: string; + languageCode: string; +}; +export declare type GameInternationalizationUpdateGameSourceLanguageOptions = { + gameId: number; + languageCode: string; +}; +export declare type GameInternationalizationUpdateGameSourceLanguage = unknown; +export declare type GameInternationalizationGetGameSupportedLanguagesOptions = { + gameId: number; +}; +export declare type GameInternationalizationGetGameSupportedLanguages = { + data: { + name: string; + languageCodeType: string; + languageCode: string; + }[]; +}; +export declare type GameInternationalizationModifyGameSupportedLanguagesOptions = { + data: { + languageCodeType: string; + languageCode: string; + delete: boolean; + }[]; + gameId: number; +}; +export declare type GameInternationalizationModifyGameSupportedLanguages = unknown; +export declare type GameInternationalizationGetGameAutomaticTranslationResultsOptions = { + gameId: number; +}; +export declare type GameInternationalizationGetGameAutomaticTranslationResults = { + data: { + languageCodeType: string; + languageCode: string; + isAutomaticTranslationEnabled: boolean; + }[]; +}; +export declare type GameInternationalizationGetSupportedLanguagesMetaData = { + isFeatureEnabled: boolean; + areAllLanguagesEnabled: boolean; + minimumUniverseIdForFeature: number; + isHumanTranslationProgressUIEnabled: boolean; + isAutomaticTranslationProgressUIEnabled: boolean; + isSupportedLanguagesChildLocalesUIEnabled: boolean; +}; +export declare type GameInternationalizationToggleAutomaticGameTranslationOptions = { + gameId: number; + languageCode: string; + enableAutomaticTranslation: boolean; +}; +export declare type GameInternationalizationToggleAutomaticGameTranslation = { + gameId: number; + languageCode: string; + isAutomaticTranslationEnabled: boolean; +}; +export declare class GameInternationalizationAPI extends BaseAPI { + constructor(client: Client); + getGameInfo(options: GameInternationalizationGetGameInfoOptions): Promise; + updateGameInfo(options: GameInternationalizationUpdateGameInfoOptions): Promise; + getNameDescriptionMetaData(): Promise; + getGameInfoHistory(options: GameInternationalizationGetGameInfoHistoryOptions): Promise; + getGameSourceLanguage(options: GameInternationalizationGetGameSourceLanguageOptions): Promise; + updateGameSourceLanguage(options: GameInternationalizationUpdateGameSourceLanguageOptions): Promise; + getGameSupportedLanguages(options: GameInternationalizationGetGameSupportedLanguagesOptions): Promise; + modifyGameSupportedLanguages(options: GameInternationalizationModifyGameSupportedLanguagesOptions): Promise; + getGameAutomaticTranslationStatus(options: GameInternationalizationGetGameAutomaticTranslationResultsOptions): Promise; + getSupportedLanguagesMetaData(): Promise; + toggleGameAutomaticTranslation(options: GameInternationalizationToggleAutomaticGameTranslationOptions): Promise; +} diff --git a/dist/client/apis/GameInternationalizationAPI.js b/dist/client/apis/GameInternationalizationAPI.js new file mode 100644 index 000000000..033687db5 --- /dev/null +++ b/dist/client/apis/GameInternationalizationAPI.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GameInternationalizationAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class GameInternationalizationAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://gameinternationalization.roblox.com/" + }); + } + getGameInfo(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/games/${options.gameId}` + }, + json: true + }).then((response) => response.body); + } + updateGameInfo(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/games/${options.gameId}`, + method: "PATCH", + json: { + data: options.data + } + }, + json: true + }).then((response) => response.body); + } + getNameDescriptionMetaData() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/metadata` + }, + json: true + }).then((response) => response.body); + } + getGameInfoHistory(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/name-description/games/${options.gameId}/history`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getGameSourceLanguage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/source-language/games/${options.gameId}` + }, + json: true + }).then((response) => response.body); + } + updateGameSourceLanguage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/source-language/games/${options.gameId}`, + method: "PATCH", + qs: { + languageCode: options.languageCode + } + }, + json: true + }).then((response) => response.body); + } + getGameSupportedLanguages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}` + }, + json: true + }).then((response) => response.body); + } + modifyGameSupportedLanguages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}`, + method: "PATCH", + json: options.data + }, + json: true + }).then((response) => response.body); + } + getGameAutomaticTranslationStatus(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}/automatic-translation-status` + }, + json: true + }).then((response) => response.body); + } + getSupportedLanguagesMetaData() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/metadata` + }, + json: true + }).then((response) => response.body); + } + toggleGameAutomaticTranslation(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/supported-languages/games/${options.gameId}/languages/${options.languageCode}/automatic-translation-status`, + method: "PATCH", + json: String(options.enableAutomaticTranslation).toString() + }, + json: true + }).then((response) => response.body); + } +} +exports.GameInternationalizationAPI = GameInternationalizationAPI; diff --git a/dist/client/apis/GamesAPI.d.ts b/dist/client/apis/GamesAPI.d.ts new file mode 100644 index 000000000..0504f0564 --- /dev/null +++ b/dist/client/apis/GamesAPI.d.ts @@ -0,0 +1,285 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { GameUniverseOptions, PartialGameUniverse, PlaceOptions, VIPServerOptions } from "../../old_structures/Game"; +export declare type GamesGameServer = { + id: string; + maxPlayers: number; + playing: number; + fps: number; + ping: number; + name: string; + vipServerId: number; + accessCode: string; +}; +export declare type GamesGetGameUniversesOptions = { + universeIds: number[]; +}; +export declare type GamesGetGameUniverses = GameUniverseOptions[]; +export declare type GamesGetGameServersByTypeOptions = { + placeId: number; + serverType: "Public" | "Friend" | "VIP"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GamesGetGameServersByType = { + previousPageCursor: string; + nextPageCursor: string; + data: GamesGameServer[]; +}; +export declare type GamesGetGamesProductInfoOptions = { + universeIds: number[]; +}; +export declare type GamesGameGamesProductInfo = { + data: { + universeId: number; + isForSale: boolean; + price: number; + sellerId: number; + productId: number; + }[]; +}; +export declare type GamesListGamesOptions = { + sortToken?: string; + gameFilter?: string; + timeFilter?: string; + genreFilter?: string; + exclusiveStartId?: number; + sortOrder?: string; + gameSetTargetId?: number; + keyword?: string; + startRows?: number; + maxRows?: number; + isKeywordSuggestionEnabled?: boolean; + contextCountryRegionId?: number; + contextUniverseId?: number; + pageContextPageId?: number; + pageContextSeeAll?: boolean; + sortPosition?: number; +}; +export declare type GamesListGames = { + games: { + creatorId: number; + creatorName: string; + creatorType: "User" | "Group" | string; + upVotes: number; + downVotes: number; + universeId: number; + placeId: number; + playerCount: number; + imageToken: string; + users: { + userId: number; + gameId: string; + }[]; + isSponsored: boolean; + nativeAdData: string; + price: number; + analyticsIdentifier: string; + }[]; + suggestedKeyword: string; + correctedKeyword: string; + filteredKeyword: string; + hasMoreRows: boolean; + nextPageExclusiveStartId: number; + featuredSearchUniverseId: number; + emphasis: boolean; + cutOffIndex: number; + algorithm: string; + algorithmQueryType: string; + suggestionAlgorithm: string; +}; +export declare type GamesMultiGetPlacesOptions = { + placeIds: number[]; +}; +export declare type GamesMultiGetPlaces = PlaceOptions[]; +export declare type GamesMultiGetGameUniversesPlayabilityOptions = { + universeIds: number[]; +}; +export declare type GamesMultiGetGameUniversesPlayability = { + playabilityStatus: "UnplayableOtherReason" | string; + isPlayable: boolean; + universeId: number; +}[]; +export declare type GamesGetGameRecommendationsByAlgorithmOptions = { + algorithmName: string; + paginationKey?: string; + maxRows?: number; +}; +export declare type GamesGetGameRecommendationsByAlgorithm = { + games: GamesListGames["games"]; + nextPaginationKey: string | null; +}; +export declare type GamesGetGameRecommendationsByGameOptions = { + universeId: number; + paginationKey?: string; + maxRows?: number; +}; +export declare type GamesGetGameRecommendationsByGame = GamesGetGameRecommendationsByAlgorithm; +export declare type GamesGetGameSortsOptions = { + gameSortsContext?: "GamesDefaultSorts" | "GamesAllSorts" | "HomeSorts" | "ChatSorts" | "UnifiedHomeSorts" | "GamesPageAbTestSorts1" | "GamesPageAbTestSorts2"; +}; +export declare type GamesGetGameSorts = { + sorts: { + token: string; + name: string; + displayName: string; + gameSetTargetId: null; + timeOptionsAvailable: boolean; + genreOptionsAvailable: boolean; + numberOfRows: number; + numberOfGames: null; + isDefaultSort: boolean; + contextUniverseId: null; + contextCountryRegionId: number; + tokenExpiryInSeconds: number; + }[]; + timeFilters: { + token: string; + name: string; + tokenExpiryInSeconds: number; + }[]; + genreFilters: { + token: string; + name: string; + tokenExpiryInSeconds: number; + }[]; + pageContext: { + pageId: string; + isSeeAllPage: boolean; + }; +}; +export declare type GamesIsGameFavoritedOptions = { + universeId: number; +}; +export declare type GamesIsGameFavorited = { + isFavorited: boolean; +}; +export declare type GamesToggleGameFavoriteOptions = { + universeId: number; + favorite: boolean; +}; +export declare type GamesToggleGameFavorite = unknown; +export declare type GamesGetGameFavoriteCountOptions = { + universeId: number; +}; +export declare type GamesGetGameFavoriteCount = { + favoritesCount: number; +}; +export declare type GamesGetGameGamePassesOptions = { + universeId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GamesGetGameGamePasses = { + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + displayName: string; + productId: number; + price: number; + }[]; +}; +export declare type GamesGetSelfUniverseVoteStatusOptions = { + universeId: number; +}; +export declare type GamesGetSelfUniverseVoteStatus = { + canVote: boolean; + userVote: boolean; + reasonForNotVoteable: string; +}; +export declare type GamesGetGamesVotesOptions = { + universeIds: number[]; +}; +export declare type GamesGetGamesVotes = { + data: { + number: PartialGameUniverse; + upVotes: number; + downVotes: number; + }[]; +}; +export declare type GamesSetSelfGameVoteOptions = { + universeId: number; + vote: boolean; +}; +export declare type GamesSetSelfGameVote = unknown; +export declare type GamesCanSelfInviteUserToVIPServerOptions = { + userId: number; +}; +export declare type GamesCanSelfInviteUserToVIPServer = { + canInvite: boolean; +}; +export declare type GamesGetVIPServerOptions = { + id: number; +}; +export declare type GamesGetVIPServer = VIPServerOptions; +export declare type GamesUpdateVIPServerOptions = { + id: number; + name: string; + newJoinCode: boolean; + active: boolean; +}; +export declare type GamesUpdateVIPServer = VIPServerOptions; +export declare type GamesCreateVIPServerOptions = { + universeId: number; + name: string; + expectedPrice: number; +}; +export declare type GamesCreateVIPServer = GamesGameServer; +export declare type GamesUpdateVIPServerPermissionsOptions = { + id: number; + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + usersToAdd: number[]; + usersToRemove: number[]; +}; +export declare type GamesUpdateVIPServerPermissions = { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: { + id: number; + name: string; + displayName: string; + }[]; +}; +export declare type GamesUpdateVIPServerSubscriptionOptions = { + id: number; + active: boolean; + price: number; +}; +export declare type GamesUpdateVIPServerSubscription = { + active: boolean; + expired: boolean; + expirationDate: string; + price: number; +}; +export declare class GamesAPI extends BaseAPI { + constructor(client: Client); + getGames(options: GamesGetGameUniversesOptions): Promise; + getGameServersByType(options: GamesGetGameServersByTypeOptions): Promise; + getGamesProductInfo(options: GamesGetGamesProductInfoOptions): Promise; + listGames(options: GamesListGamesOptions): Promise; + getMultiPlaces(options: GamesMultiGetPlacesOptions): Promise; + getMultiGamesPlayabilityStatus(options: GamesMultiGetGameUniversesPlayabilityOptions): Promise; + getGameRecommendationsByAlgorithm(options: GamesGetGameRecommendationsByAlgorithmOptions): Promise; + getGameRecommendationsByGame(options: GamesGetGameRecommendationsByGameOptions): Promise; + getGameSorts(options: GamesGetGameSortsOptions): Promise; + isGameFavorited(options: GamesIsGameFavoritedOptions): Promise; + toggleGameFavorite(options: GamesToggleGameFavoriteOptions): Promise; + getGameFavoriteCount(options: GamesGetGameFavoriteCountOptions): Promise; + getGameGamePasses(options: GamesGetGameGamePassesOptions): Promise; + getSelfGameVote(options: GamesGetSelfUniverseVoteStatusOptions): Promise; + getGamesVotes(options: GamesGetGamesVotesOptions): Promise; + setSelfGameVote(options: GamesSetSelfGameVoteOptions): Promise; + canSelfInviteUserToVIPServer(options: GamesCanSelfInviteUserToVIPServerOptions): Promise; + getVIPServer(options: GamesGetVIPServerOptions): Promise; + updateVIPServer(options: GamesUpdateVIPServerOptions): Promise; + createVIPServer(options: GamesCreateVIPServerOptions): Promise; + updateVIPServerPermissions(options: GamesUpdateVIPServerPermissionsOptions): Promise; + updateVIPServerSubscription(options: GamesUpdateVIPServerSubscriptionOptions): Promise; +} diff --git a/dist/client/apis/GamesAPI.js b/dist/client/apis/GamesAPI.js new file mode 100644 index 000000000..59502486a --- /dev/null +++ b/dist/client/apis/GamesAPI.js @@ -0,0 +1,264 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GamesAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class GamesAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://games.roblox.com/" + }); + } + getGames(options) { + const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games?${universeIdsQueryString}` + }, + json: true + }).then((response) => response.body); + } + getGameServersByType(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.placeId}/servers/${options.serverType}`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getGamesProductInfo(options) { + const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/games-product-info?${universeIdsQueryString}` + }, + json: true + }).then((response) => response.body); + } + listGames(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/list`, + qs: { + "model.sortToken": options.sortToken, + "model.gameFilter": options.gameFilter, + "model.timeFilter": options.timeFilter, + "model.genreFilter": options.genreFilter, + "model.exclusiveStartId": options.exclusiveStartId, + "model.sortOrder": options.sortOrder, + "model.gameSetTargetId": options.gameSetTargetId, + "model.keyword": options.keyword, + "model.startRows": options.startRows, + "model.maxRows": options.maxRows, + "model.isKeywordSuggestionEnabled": options.isKeywordSuggestionEnabled, + "model.contextCountryRegionId": options.contextCountryRegionId, + "model.contextUniverseId": options.contextUniverseId, + "model.pageContext.pageId": options.pageContextPageId, + "model.pageContext.isSeeAllPage": options.pageContextSeeAll, + "model.sortPosition": options.sortPosition + } + }, + json: true + }).then((response) => response.body); + } + getMultiPlaces(options) { + const placeIdsQueryString = `placeIds=${options.placeIds.join("&placeIds=")}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/multiget-place-details?${placeIdsQueryString}` + }, + json: true + }).then((response) => response.body); + } + getMultiGamesPlayabilityStatus(options) { + const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/multiget-playability-status?${universeIdsQueryString}` + }, + json: true + }).then((response) => response.body); + } + getGameRecommendationsByAlgorithm(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/recommendations/algorithm/${options.algorithmName}`, + qs: { + "model.paginationKey": options.paginationKey, + "model.maxRows": options.maxRows + } + }, + json: true + }).then((response) => response.body); + } + getGameRecommendationsByGame(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/recommendations/game/${options.universeId}`, + qs: { + "model.paginationKey": options.paginationKey, + "model.maxRows": options.maxRows + } + }, + json: true + }).then((response) => response.body); + } + getGameSorts(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/sorts`, + qs: { + "model.gameSortsContext": options.gameSortsContext + } + }, + json: true + }).then((response) => response.body); + } + isGameFavorited(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/favorites` + }, + json: true + }).then((response) => response.body); + } + toggleGameFavorite(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/favorites`, + method: "POST", + json: { + isFavorited: options.favorite + } + }, + json: true + }).then((response) => response.body); + } + getGameFavoriteCount(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/favorites/count` + }, + json: true + }).then((response) => response.body); + } + getGameGamePasses(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/game-passes`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSelfGameVote(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/votes/user` + }, + json: true + }).then((response) => response.body); + } + getGamesVotes(options) { + const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/votes?${universeIdsQueryString}` + }, + json: true + }).then((response) => response.body); + } + setSelfGameVote(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/${options.universeId}/user-votes`, + method: "PATCH", + json: { + vote: options.vote + } + }, + json: true + }).then((response) => response.body); + } + canSelfInviteUserToVIPServer(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/vip-server/can-invite/${options.userId}` + }, + json: true + }).then((response) => response.body); + } + getVIPServer(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/vip-servers/${options.id}`, + qs: options + }, + json: true + }).then((response) => response.body); + } + updateVIPServer(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/vip-servers/${options.id}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + createVIPServer(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/vip-servers/${options.universeId}`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + updateVIPServerPermissions(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/vip-servers/${options.id}/permissions`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + updateVIPServerSubscription(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/games/vip-servers/${options.id}/subscription`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.GamesAPI = GamesAPI; diff --git a/dist/client/apis/GeneralAPI.d.ts b/dist/client/apis/GeneralAPI.d.ts new file mode 100644 index 000000000..7e61a5c24 --- /dev/null +++ b/dist/client/apis/GeneralAPI.d.ts @@ -0,0 +1,180 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { AssetVersionOptions, ProductOptions } from "../../old_structures/Asset"; +export declare type GeneralGetAssetVersionOptions = number; +export declare type GeneralAwardBadgeOptions = { + userId: number; + badgeId: number; + placeId: number; +}; +export declare type GeneralGetUserFriendsOptions = { + userId: number; + page: number; +}; +export declare type GeneralAcceptFriendRequestOptions = { + userId: number; +}; +export declare type GeneralDeclineFriendRequestOptions = { + userId: number; +}; +export declare type GeneralSendFriendRequestOptions = { + userId: number; +}; +export declare type GeneralGetUserFriendsCountOptions = { + userId: number; +}; +export declare type GeneralUnfriendUserOptions = { + userId: number; +}; +export declare type GeneralIsUserFollowingOptions = { + userId: number; + followUserId: number; +}; +export declare type GeneralFollowUserOptions = { + userId: number; +}; +export declare type GeneralUnfollowUserOptions = { + userId: number; +}; +export declare type GeneralGetUserGroupsOptions = { + userId: number; +}; +export declare type GeneralGetGroupOptions = { + groupId: number; +}; +export declare type GeneralGetGroupAlliesOptions = { + groupId: number; + page: number; +}; +export declare type GeneralGetGroupEnemiesOptions = { + groupId: number; + page: number; +}; +export declare type GeneralGetProductInfoOptions = { + assetId: number; +}; +export declare type GeneralGetGamePassProductInfoOptions = { + gamePassId: number; +}; +export declare type GeneralUserOwnsAssetOptions = { + userId: number; + assetId: number; +}; +export declare type GeneralBlockUserOptions = { + userId: number; +}; +export declare type GeneralUnblockUserOptions = { + userId: number; +}; +export declare type GeneralGetUserByUsernameOptions = { + username: string; +}; +export declare type GeneralUserCanManageAssetOptions = { + userId: number; + assetId: number; +}; +export declare type GeneralGetUserByIdOptions = { + userId: number; +}; +export declare type GeneralGetAssetVersions = AssetVersionOptions[]; +export declare type GeneralAwardBadge = boolean; +export declare type GeneralGetBalance = { + robux: number; +}; +export declare type GeneralGetUserFriends = { + Id: number; + Username: string; + AvatarUri: string; + AvatarFinal: boolean; + IsOnline: boolean; +}[]; +export declare type GeneralAcceptFriendRequest = boolean; +export declare type GeneralDeclineFriendRequest = boolean; +export declare type GeneralSendFriendRequest = boolean; +export declare type GeneralGetUserFriendsCount = { + count: number; +}; +export declare type GeneralUnfriendUser = boolean; +export declare type GeneralIsUserFollowing = boolean; +export declare type GeneralFollowUser = boolean; +export declare type GeneralUnfollowUser = boolean; +export declare type GeneralGetUserGroups = { + id: number; + name: string; + emblemId: number | null; + emblemUrl: string | null; + role: { + rank: number; + name: string; + }; + inClan: boolean; + primary: boolean; +}[]; +export declare type GeneralGetGroup = { + Name: string; + Id: number; + Owner: { + Name: string; + Id: number; + }; + EmblemUrl: string; + Description: string; + Roles: { + Name: string; + Rank: number; + }[]; +}; +export declare type GeneralGetGroupAllies = { + Groups: GeneralGetGroup[]; + FinalPage: boolean; +}; +export declare type GeneralGetGroupEnemies = GeneralGetGroupAllies; +export declare type GeneralGetIncomingItems = { + unreadMessageCount: number; + friendRequestsCount: number; +}; +export declare type GeneralGetProductInfo = ProductOptions; +export declare type GeneralGetGamePassProductInfo = ProductOptions; +export declare type GeneralUserOwnsAsset = boolean; +export declare type GeneralGetDeviceInfo = { + platformType: string; + deviceType: string; + operatingSystemType: string; +}; +export declare type GeneralBlockUser = boolean; +export declare type GeneralUnblockUser = boolean; +export declare type GeneralGetUserById = { + id: number; + name: string; +}; +export declare type GeneralGetUserByUsername = GeneralGetUserById; +export declare type GeneralUserCanManageAsset = boolean; +export declare class GeneralAPI extends BaseAPI { + constructor(client: Client); + getAssetVersions(options: GeneralGetAssetVersionOptions): Promise; + awardBadge(options: GeneralAwardBadgeOptions): Promise; + getBalance(): Promise; + getUserFriends(options: GeneralGetUserFriendsOptions): Promise; + acceptFriendRequest(options: GeneralAcceptFriendRequestOptions): Promise; + declineFriendRequest(options: GeneralDeclineFriendRequestOptions): Promise; + sendFriendRequest(options: GeneralSendFriendRequestOptions): Promise; + getUserFriendsCount(options: GeneralGetUserFriendsCountOptions): Promise; + unfriendUser(options: GeneralUnfriendUserOptions): Promise; + isUserFollowing(options: GeneralIsUserFollowingOptions): Promise; + followUser(options: GeneralFollowUserOptions): Promise; + unfollowUser(options: GeneralUnfollowUserOptions): Promise; + getUserGroups(options: GeneralGetUserGroupsOptions): Promise; + getGroup(options: GeneralGetGroupOptions): Promise; + getGroupAllies(options: GeneralGetGroupAlliesOptions): Promise; + getGroupEnemies(options: GeneralGetGroupEnemiesOptions): Promise; + getIncomingItems(): Promise; + getProductInfo(options: GeneralGetProductInfoOptions): Promise; + getGamePassProductInfo(options: GeneralGetGamePassProductInfoOptions): Promise; + userOwnsAsset(options: GeneralUserOwnsAssetOptions): Promise; + getDeviceInfo(): Promise; + blockUser(options: GeneralBlockUserOptions): Promise; + unblockUser(options: GeneralUnblockUserOptions): Promise; + getUserById(options: GeneralGetUserByIdOptions): Promise; + getUserByUsername(options: GeneralGetUserByUsernameOptions): Promise; + userCanManageAsset(options: GeneralUserCanManageAssetOptions): Promise; +} diff --git a/dist/client/apis/GeneralAPI.js b/dist/client/apis/GeneralAPI.js new file mode 100644 index 000000000..c1a747c2d --- /dev/null +++ b/dist/client/apis/GeneralAPI.js @@ -0,0 +1,293 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeneralAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class GeneralAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + baseUrl: "https://api.roblox.com/", + client + }); + } + getAssetVersions(options) { + return this.request({ + requiresAuth: true, + request: { + path: `assets/${options}/versions` + }, + json: true + }).then((response) => response.body); + } + awardBadge(options) { + return this.request({ + requiresAuth: true, + request: { + path: "assets/award-badge", + method: "POST", + qs: options + } + }).then(() => true); + } + getBalance() { + return this.request({ + requiresAuth: true, + request: { + path: "currency/balance" + } + }).then((response) => response.body); + } + getUserFriends(options) { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}/friends`, + qs: { + page: options.page + } + }, + json: true + }).then((response) => response.body); + } + acceptFriendRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: "user/accept-friend-request", + method: "POST", + qs: { + requesterUserId: options.userId + } + } + }).then(() => true); + } + declineFriendRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: "user/decline-friend-request", + method: "POST", + qs: { + requesterUserId: options.userId + } + } + }).then(() => true); + } + sendFriendRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: "user/request-friendship", + method: "POST", + qs: { + recipientUserId: options.userId + } + } + }).then(() => true); + } + getUserFriendsCount(options) { + return this.request({ + requiresAuth: false, + request: { + path: "user/get-friendship-count", + qs: options + }, + json: true + }).then((response) => response.body.count); + } + unfriendUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: "user/unfriend", + method: "POST", + qs: { + friendUserId: options.userId + } + } + }).then(() => true); + } + isUserFollowing(options) { + return this.request({ + requiresAuth: false, + request: { + path: "user/following-exists", + qs: options + } + }).then((response) => response.body.isFollowing); + } + followUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: "user/follow", + method: "POST", + qs: { + followedUserId: options.userId + } + } + }).then(() => true); + } + unfollowUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: "user/unfollow", + method: "POST", + qs: { + followedUserId: options.userId + } + } + }).then(() => true); + } + getUserGroups(options) { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}/groups` + } + }).then((response) => response.body); + } + getGroup(options) { + return this.request({ + requiresAuth: false, + request: { + path: `groups/${options.groupId}` + }, + json: true + }).then((response) => response.body); + } + getGroupAllies(options) { + return this.request({ + requiresAuth: true, + request: { + path: `groups/${options.groupId}/allies`, + qs: { + page: options.page + } + }, + json: true + }).then((response) => response.body); + } + getGroupEnemies(options) { + return this.request({ + requiresAuth: true, + request: { + path: `groups/${options.groupId}/enemies`, + qs: { + page: options.page + } + }, + json: true + }).then((response) => response.body); + } + getIncomingItems() { + return this.request({ + requiresAuth: true, + request: { + path: "incoming-items/counts" + }, + json: true + }).then((response) => ({ + friendRequestsCount: response.body.friendRequestsCount, + unreadMessageCount: response.body.unreadMessageCount + })); + } + getProductInfo(options) { + return this.request({ + requiresAuth: false, + request: { + path: "marketplace/productinfo", + qs: options + }, + json: true + }).then((response) => response.body); + } + getGamePassProductInfo(options) { + return this.request({ + requiresAuth: false, + request: { + path: "marketplace/game-pass-product-info", + qs: options + }, + json: true + }).then((response) => response.body); + } + userOwnsAsset(options) { + return this.request({ + requiresAuth: false, + request: { + path: "ownership/hasasset", + qs: options + } + }).then((response) => response.body.includes("true")); + } + getDeviceInfo() { + return this.request({ + requiresAuth: false, + request: { + path: "reference/deviceinfo" + } + }).then((response) => ({ + deviceType: response.body.DeviceType, + operatingSystemType: response.body.OperationSystemType, + platformType: response.body.PlatformType + })); + } + blockUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: "userblock/block", + qs: options, + method: "POST" + }, + json: true + }).then((response) => response.body.success === true); + } + unblockUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: "userblock/unblock", + qs: options, + method: "POST" + }, + json: true + }).then((response) => response.body.success === true); + } + getUserById(options) { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}` + }, + json: true + }).then((response) => ({ + id: response.body.Id, + name: response.body.Username + })); + } + getUserByUsername(options) { + return this.request({ + requiresAuth: false, + request: { + path: "users/get-by-username", + qs: options + }, + json: true + }).then((response) => ({ + id: response.body.Id, + name: response.body.Username + })); + } + userCanManageAsset(options) { + return this.request({ + requiresAuth: false, + request: { + path: `users/${options.userId}/canmanage/${options.assetId}` + }, + json: true + }).then((response) => response.body.CanManage === true); + } +} +exports.GeneralAPI = GeneralAPI; diff --git a/dist/client/apis/GroupsAPI.d.ts b/dist/client/apis/GroupsAPI.d.ts new file mode 100644 index 000000000..f0b588829 --- /dev/null +++ b/dist/client/apis/GroupsAPI.d.ts @@ -0,0 +1,665 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type GroupsGroupRolePermissionsOptions = { + groupId: number; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + permissions: { + groupPostsPermissions: { + viewWall: boolean; + postToWall: boolean; + deleteFromWall: boolean; + viewStatus: boolean; + postToStatus: boolean; + }; + groupMembershipPermissions: { + changeRank: boolean; + inviteMembers: boolean; + removeMembers: boolean; + }; + groupManagementPermissions: { + manageRelationships: boolean; + manageClan: boolean; + viewAuditLogs: boolean; + }; + groupEconomyPermissions: { + spendGroupFunds: boolean; + advertiseGroup: boolean; + createItems: boolean; + manageItems: boolean; + addGroupPlaces: boolean; + manageGroupGames: boolean; + viewGroupPayouts: boolean; + }; + }; +}; +export declare type GroupsGroupRoleOptions = { + id?: number; + name?: string; + rank?: number; + group: { + id: number; + name?: string; + }; +}; +export declare type GroupsGroupOptions = { + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + } | null; + shout: { + body: string; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + created: string; + updated: string; + } | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; +}; +export declare type GroupsGetGroupOptions = { + groupId: number; +}; +export declare type GroupsGetGroup = { + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + shout: { + body: string; + poster: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + created: string; + updated: string; + }; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; +}; +export declare type GroupsGetMultiGroupsOptions = { + groupIds: number[]; +}; +export declare type GroupsGetMultiGroups = { + data: GroupsGroupOptions[]; +}; +export declare type GroupsGetGroupAuditLogsOptions = { + groupId: number; + actionType: "DeletePost" | "RemoveMember" | "AcceptJoinRequest" | "DeclineJoinRequest" | "PostStatus" | "ChangeRank" | "BuyAd" | "SendAllyRequest" | "CreateEnemy" | "AcceptAllyRequest" | "DeclineAllyRequest" | "DeleteAlly" | "DeleteEnemy" | "AddGroupPlace" | "RemoveGroupPlace" | "CreateItems" | "ConfigureItems" | "SpendGroupFunds" | "ChangeOwner" | "Delete" | "AdjustCurrencyAmounts" | "Abandon" | "Claim" | "Rename" | "ChangeDescription" | "InviteToClan" | "KickFromClan" | "CancelCLanInvite" | "BuyClan" | "CreateGroupAsset" | "UpdateGroupAsset" | "ConfigureGroupAsset" | "RevertGroupAsset" | "CreateGroupDeveloperProduct" | "ConfigureGroupGame" | "Lock" | "Unlock" | "CreateGamePass" | "CreateBadge" | "ConfigureBadge" | "SavePlace" | "PublishPlace"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GroupsGetGroupAuditLogs = { + previousPageCursor: string; + nextPageCursor: string; + data: { + actor: { + user: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + }; + actionType: string; + description: unknown; + created: string; + }[]; +}; +export declare type GroupsGetGroupSettingsOptions = { + groupId: number; +}; +export declare type GroupsGetGroupSettings = { + groupId: number; + isApprovalRequired: boolean; + isBuildersClubRequired: boolean; + areEnemiesAllowed: boolean; + areGroupFundsVisible: boolean; + areGroupGamesVisible: boolean; +}; +export declare type GroupsUpdateGroupSettingsOptions = GroupsGetGroupSettings; +export declare type GroupsUpdateGroupSettings = unknown; +export declare type GroupsGetGroupConfigurationMetaData = { + groupConfiguration: { + nameMaxLength: number; + descriptionMaxLength: number; + iconMaxFileSizeMb: number; + cost: number; + }; + recurringPayoutsConfiguration: { + maxPayoutPartners: number; + }; + roleConfiguration: { + nameMaxLength: number; + descriptionMaxLength: number; + limit: number; + cost: number; + minRank: number; + maxRank: number; + }; + isPremiumPayoutsEnabled: boolean; + isDefaultEmblemPolicyEnabled: boolean; +}; +export declare type GroupsGetGroupsMetaData = { + groupLimit: number; + currentGroupCount: number; + groupStatusMaxLength: number; + groupPostMaxLength: number; + isGroupWallNotificationsEnabled: boolean; + groupWallNotificationsSubscribeIntervalInMilliseconds: number; + areProfileGroupsHidden: boolean; + isGroupDetailsPolicyEnabled: boolean; + showPreviousGroupNames: boolean; +}; +export declare type GroupsCreateGroupOptions = { + name: string; + description: string; + publicGroup: boolean; + buildersClubMembersOnly: boolean; + files: unknown; +}; +export declare type GroupsCreateGroup = GroupsGroupOptions; +export declare type GroupsUpdateGroupDescriptionOptions = { + groupId: number; + description: string; +}; +export declare type GroupsUpdateGroupDescription = { + newDescription: string; +}; +export declare type GroupsUpdateGroupStatusOptions = { + groupId: number; + message: string; +}; +export declare type GroupsUpdateGroupStatus = GroupsGroupOptions["shout"]; +export declare type GroupsUpdateGroupIconOptions = { + groupId: number; + files: unknown; +}; +export declare type GroupsUpdateGroupIcon = unknown; +export declare type GroupsDeclineJoinRequestsOptions = { + groupId: number; + userIds: number[]; +}; +export declare type GroupsDeclineJoinRequests = unknown; +export declare type GroupsGetJoinRequestsOptions = { + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GroupsGetJoinRequests = { + previousPageCursor: string; + nextPageCursor: string; + data: { + requester: { + userId: number; + username: string; + displayName: string; + }; + created: string; + }[]; +}; +export declare type GroupsAcceptJoinRequestsOptions = { + groupId: number; + userIds: number[]; +}; +export declare type GroupsAcceptJoinRequests = unknown; +export declare type GroupsDeclineJoinRequestOptions = { + groupId: number; + userId: number; +}; +export declare type GroupsDeclineJoinRequest = unknown; +export declare type GroupsGetJoinRequestOptions = { + groupId: number; + userId: number; +}; +export declare type GroupsGetJoinRequest = GroupsGetJoinRequests["data"][0]; +export declare type GroupsAcceptJoinRequestOptions = { + groupId: number; + userId: number; +}; +export declare type GroupsAcceptJoinRequest = unknown; +export declare type GroupsGetSelfGroupMembershipOptions = { + groupId: number; +}; +export declare type GroupsGetSelfGroupMembership = { + groupId: number; + isPrimary: boolean; + isPendingJoin: boolean; + userRole: { + user: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + }; + permissions: GroupsGroupRolePermissionsOptions["permissions"]; +}; +export declare type GroupsGetGroupRolesOptions = { + groupId: number; +}; +export declare type GroupsGetGroupRoles = { + groupId: number; + roles: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }[]; +}; +export declare type GroupsGetMembersWithRoleOptions = { + groupId: number; + roleId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GroupsGetMembersWithRole = { + previousPageCursor: string; + nextPageCursor: string; + data: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }[]; +}; +export declare type GroupsGetMembersOptions = { + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GroupsGetMembers = GroupsGetMembersWithRole; +export declare type GroupsJoinGroupOptions = { + groupId: number; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; +export declare type GroupsJoinGroup = unknown; +export declare type GroupsGetSelfPendingGroupJoins = { + data: GroupsGroupOptions[]; +}; +export declare type GroupsGetUserGroupsOptions = { + userId: number; +}; +export declare type GroupsGetUserGroups = { + data: { + group: GroupsGroupOptions; + role: GroupsGetGroupRoles["roles"][0]; + }[]; +}; +export declare type GroupsChangeOwnerOptions = { + groupId: number; + userId: number; +}; +export declare type GroupsChangeOwner = unknown; +export declare type GroupsClaimGroupOptions = { + groupId: number; +}; +export declare type GroupsClaimGroup = unknown; +export declare type GroupsKickMemberOptions = { + groupId: number; + userId: number; +}; +export declare type GroupsKickMember = unknown; +export declare type GroupsUpdateMemberOptions = { + groupId: number; + userId: number; + roleId: number; +}; +export declare type GroupsUpdateMember = unknown; +export declare type GroupsGetGroupPayoutsOptions = { + groupId: number; +}; +export declare type GroupsGetGroupPayouts = { + data: { + user: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + percentage: number; + }[]; +}; +export declare type GroupsPayoutMembersOptions = { + groupId: number; + users: { + userId: number; + amount: number; + }[]; + type: "FixedAmount" | "Percentage" | string; +}; +export declare type GroupsPayoutMembers = unknown; +export declare type GroupsUpdateRecurringPayoutsOptions = GroupsPayoutMembersOptions; +export declare type GroupsUpdateRecurringPayouts = unknown; +export declare type GroupsGetGroupRelationshipsOptions = { + groupId: number; + relationshipType: "enemies" | "allies"; + startRowIndex?: number; + maxRows?: number; +}; +export declare type GroupsGetGroupRelationships = { + groupId: number; + relationshipType: GroupsGetGroupRelationshipsOptions["relationshipType"]; + totalGroupCount: number; + relatedGroups: GroupsGroupOptions[]; + nextRowIndex: number; +}; +export declare type GroupsDeclineRelationshipRequestsOptions = { + groupId: number; + relationshipType: GroupsGetGroupRelationshipsOptions["relationshipType"]; + withGroups: number[]; +}; +export declare type GroupsDeclineRelationshipRequests = unknown; +export declare type GroupsGetRelationshipRequestsOptions = GroupsGetGroupRelationshipsOptions; +export declare type GroupsGetRelationshipRequests = GroupsGetGroupRelationships; +export declare type GroupsAcceptRelationshipRequestsOptions = GroupsDeclineRelationshipRequestsOptions; +export declare type GroupsAcceptRelationshipRequests = unknown; +export declare type GroupsDeleteRelationshipOptions = Omit & { + withGroup: number; +}; +export declare type GroupsDeleteRelationship = unknown; +export declare type GroupsCreateRelationshipOptions = Omit & { + withGroup: number; +}; +export declare type GroupsCreateRelationship = unknown; +export declare type GroupsDeclineRelationshipRequestOptions = Omit & { + withGroup: number; +}; +export declare type GroupsDeclineRelationshipRequest = unknown; +export declare type GroupsAcceptRelationshipRequestOptions = GroupsDeclineRelationshipRequestOptions; +export declare type GroupsAcceptRelationshipRequest = unknown; +export declare type GroupsGetRolePermissionsOptions = { + groupId: number; + roleId: number; +}; +export declare type GroupsGetRolePermissions = GroupsGroupRolePermissionsOptions; +export declare type GroupsUpdateRolePermissionsOptions = { + groupId: number; + roleId: number; + DeleteFromWall: boolean; + PostToWall: boolean; + InviteMembers: boolean; + PostToStatus: boolean; + RemoveMembers: boolean; + ViewStatus: boolean; + ViewWall: boolean; + ChangeRank: boolean; + AdvertiseGroup: boolean; + ManageRelationships: boolean; + AddGroupPlaces: boolean; + ViewAuditLogs: boolean; + CreateItems: boolean; + ManageItems: boolean; + SpendGroupFunds: boolean; + ManageClan: boolean; + ManageGroupGames: boolean; +}; +export declare type GroupsUpdateRolePermissions = unknown; +export declare type GroupsGetGuestPermissionsOptions = { + groupId: number; +}; +export declare type GroupsGetGuestPermissions = GroupsGroupRolePermissionsOptions; +export declare type GroupsGetAllRolesPermissionsOptions = { + groupId: number; +}; +export declare type GroupsGetAllRolesPermissions = { + data: GroupsGroupRolePermissionsOptions[]; +}; +export declare type GroupsGetSocialLinksOptions = { + groupId: number; +}; +export declare type GroupsGetSocialLinks = { + data: { + id: number; + type: "Facebook" | string; + url: string; + title: string; + }[]; +}; +export declare type GroupsPostSocialLinkOptions = { + groupId: number; + type: "Facebook" | string; + url: string; + title: string; +}; +export declare type GroupsPostSocialLink = GroupsGetSocialLinks["data"][0]; +export declare type GroupsDeleteSocialLinkOptions = { + groupId: number; + id: number; +}; +export declare type GroupsDeleteSocialLink = unknown; +export declare type GroupsUpdateSocialLinkOptions = { + groupId: number; + id: number; + type: "Facebook" | string; + url: string; + title: string; +}; +export declare type GroupsUpdateSocialLink = unknown; +export declare type GroupsGetWallPostsOptions = { + groupId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GroupsGetWallPosts = { + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + body: string; + created: string; + updated: string; + poster: { + buildersClubMembershipType: "None" | string; + userId: number; + username: string; + displayName: string; + }; + }[]; +}; +export declare type GroupsCreateWallPostOptions = { + groupId: number; + body: string; + captchaToken: string; + captchaProvider: "PROVIDER_ARKOSELABS" | string; +}; +export declare type GroupsCreateWallPost = GroupsGetWallPosts["data"][0]; +export declare type GroupsDeleteWallPostOptions = { + groupId: number; + id: number; +}; +export declare type GroupsDeleteWallPost = unknown; +export declare type GroupsDeleteWallPostsByUserOptions = { + groupId: number; + userId: number; +}; +export declare type GroupsDeleteWallPostsByUser = unknown; +export declare type GroupsSearchGroupsByKeywordOptions = { + keyword: string; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GroupsSearchGroupsByKeyword = { + keyword: string; + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + name: string; + description: string; + memberCount: number; + publicEntryAllowed: boolean; + created: string; + updated: string; + }[]; +}; +export declare type GroupsSearchGroupsOptions = { + groupName: string; +}; +export declare type GroupsSearchGroups = { + data: { + id: number; + name: string; + memberCount: number; + }[]; +}; +export declare type GroupsGetGroupSearchMetaData = { + SuggestedGroupKeywords: string[]; +}; +export declare type GroupsGetRolesByIdsOptions = { + roleIds: number[]; +}; +export declare type GroupsGetRolesByIds = { + data: { + groupId: number; + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }[]; +}; +export declare type GroupsGetUserPrimaryGroupOptions = { + userId: number; +}; +export declare type GroupsGetUserPrimaryGroup = { + group?: GroupsGroupOptions; + role?: GroupsGroupRoleOptions; + isPrimaryGroup?: boolean; +}; +export declare type GroupsRemovePrimaryGroup = unknown; +export declare type GroupsSetPrimaryGroupOptions = { + groupId: number; +}; +export declare type GroupsSetPrimaryGroup = unknown; +export declare type GroupsCreateRoleOptions = { + groupId: number; + name: string; + description: string; + rank: number; + usingGroupFunds: boolean; +}; +export declare type GroupsCreateRole = Omit; +export declare type GroupsDeleteRoleOptions = { + groupId: number; + roleId: number; +}; +export declare type GroupsDeleteRole = unknown; +export declare type GroupsUpdateRoleOptions = { + groupId: number; + roleId: number; + name: string; + description: string; + rank: number; +}; +export declare type GroupsUpdateRole = GroupsCreateRole; +export declare class GroupsAPI extends BaseAPI { + constructor(client: Client); + getGroup(options: GroupsGetGroupOptions): Promise; + getMultiGroups(options: GroupsGetMultiGroupsOptions): Promise; + getAuditLogs(options: GroupsGetGroupAuditLogsOptions): Promise; + getGroupSettings(options: GroupsGetGroupSettingsOptions): Promise; + updateGroupSettings(options: GroupsUpdateGroupSettingsOptions): Promise; + getGroupConfigurationMetaData(): Promise; + getGroupsMetaData(): Promise; + createGroup(options: GroupsCreateGroupOptions): Promise; + updateGroupDescription(options: GroupsUpdateGroupDescriptionOptions): Promise; + updateGroupStatus(options: GroupsUpdateGroupStatusOptions): Promise; + updateGroupIcon(options: GroupsUpdateGroupIconOptions): Promise; + declineJoinRequests(options: GroupsDeclineJoinRequestsOptions): Promise; + getJoinRequests(options: GroupsGetJoinRequestsOptions): Promise; + acceptJoinRequests(options: GroupsAcceptJoinRequestsOptions): Promise; + declineJoinRequest(options: GroupsDeclineJoinRequestOptions): Promise; + getJoinRequest(options: GroupsGetJoinRequestOptions): Promise; + acceptJoinRequest(options: GroupsAcceptJoinRequestOptions): Promise; + getSelfGroupMembership(options: GroupsGetSelfGroupMembershipOptions): Promise; + getGroupRoles(options: GroupsGetGroupRolesOptions): Promise; + getMembersWithRole(options: GroupsGetMembersWithRoleOptions): Promise; + getMembers(options: GroupsGetMembersOptions): Promise; + joinGroup(options: GroupsJoinGroupOptions): Promise; + getSelfPendingGroupJoins(): Promise; + getUserGroups(options: GroupsGetUserGroupsOptions): Promise; + changeGroupOwner(options: GroupsChangeOwnerOptions): Promise; + claimGroup(options: GroupsClaimGroupOptions): Promise; + kickMember(options: GroupsKickMemberOptions): Promise; + updateMember(options: GroupsUpdateMemberOptions): Promise; + getGroupPayouts(options: GroupsGetGroupPayoutsOptions): Promise; + payoutMembers(options: GroupsPayoutMembersOptions): Promise; + updateRecurringPayouts(options: GroupsUpdateRecurringPayoutsOptions): Promise; + getGroupRelationships(options: GroupsGetGroupRelationshipsOptions): Promise; + declineRelationshipRequests(options: GroupsDeclineRelationshipRequestsOptions): Promise; + getRelationshipRequests(options: GroupsGetRelationshipRequestsOptions): Promise; + acceptRelationshipRequests(options: GroupsAcceptRelationshipRequestsOptions): Promise; + deleteRelationship(options: GroupsDeleteRelationshipOptions): Promise; + createRelationship(options: GroupsCreateRelationshipOptions): Promise; + acceptRelationshipRequest(options: GroupsAcceptRelationshipRequestOptions): Promise; + declineRelationshipRequest(options: GroupsDeclineRelationshipRequestOptions): Promise; + getRolePermissions(options: GroupsGetRolePermissionsOptions): Promise; + updateRolePermissions(options: GroupsUpdateRolePermissionsOptions): Promise; + getGuestPermissions(options: GroupsGetGuestPermissionsOptions): Promise; + getAllRolesPermissions(options: GroupsGetAllRolesPermissionsOptions): Promise; + getSocialLinks(options: GroupsGetSocialLinksOptions): Promise; + createSocialLink(options: GroupsPostSocialLinkOptions): Promise; + deleteSocialLink(options: GroupsDeleteSocialLinkOptions): Promise; + updateSocialLink(options: GroupsUpdateSocialLinkOptions): Promise; + getWallPosts(options: GroupsGetWallPostsOptions): Promise; + createWallPost(options: GroupsCreateWallPostOptions): Promise; + deleteWallPost(options: GroupsDeleteWallPostOptions): Promise; + deleteUserWallPosts(options: GroupsDeleteWallPostsByUserOptions): Promise; + searchGroupsByKeyword(options: GroupsSearchGroupsByKeywordOptions): Promise; + searchGroups(options: GroupsSearchGroupsOptions): Promise; + getGroupSearchMetaData(): Promise; + getRolesByIds(options: GroupsGetRolesByIdsOptions): Promise; + getUserPrimaryGroup(options: GroupsGetUserPrimaryGroupOptions): Promise; + removePrimaryGroup(): Promise; + setPrimaryGroup(options: GroupsSetPrimaryGroupOptions): Promise; + createRole(options: GroupsCreateRoleOptions): Promise; + deleteRole(options: GroupsDeleteRoleOptions): Promise; + updateRole(options: GroupsUpdateRoleOptions): Promise; +} diff --git a/dist/client/apis/GroupsAPI.js b/dist/client/apis/GroupsAPI.js new file mode 100644 index 000000000..fcc9f0f18 --- /dev/null +++ b/dist/client/apis/GroupsAPI.js @@ -0,0 +1,663 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GroupsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class GroupsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://groups.roblox.com/" + }); + } + getGroup(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}` + }, + json: true + }).then((response) => response.body); + } + getMultiGroups(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/groups`, + qs: { + groupIds: options.groupIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + getAuditLogs(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/audit-log`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getGroupSettings(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/settings` + }, + json: true + }).then((response) => response.body); + } + updateGroupSettings(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/settings`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getGroupConfigurationMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/configuration/metadata` + }, + json: true + }).then((response) => response.body); + } + getGroupsMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/metadata` + }, + json: true + }).then((response) => response.body); + } + createGroup(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/create`, + method: "POST", + formData: { + "request.name": options.name, + "request.description": options.description, + "request.publicGroup": options.publicGroup, + "request.buildersClubMembersOnly": options.buildersClubMembersOnly, + "request.files": options.files + } + }, + json: true + }).then((response) => response.body); + } + updateGroupDescription(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/description`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + updateGroupStatus(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/status`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + updateGroupIcon(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/icon`, + method: "PATCH", + body: options.files + }, + json: true + }).then((response) => response.body); + } + declineJoinRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests`, + method: "DELETE", + json: { + UserIds: options.userIds + } + }, + json: true + }).then((response) => response.body); + } + getJoinRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests`, + qs: options + }, + json: true + }).then((response) => response.body); + } + acceptJoinRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests`, + method: "POST", + json: { + UserIds: options.userIds + } + }, + json: true + }).then((response) => response.body); + } + declineJoinRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getJoinRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}` + }, + json: true + }).then((response) => response.body); + } + acceptJoinRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/join-requests/users/${options.userId}`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + getSelfGroupMembership(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/membership` + }, + json: true + }).then((response) => response.body); + } + getGroupRoles(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/roles` + }, + json: true + }).then((response) => response.body); + } + getMembersWithRole(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/${options.roleId}/users`, + qs: Object.assign(Object.assign({}, options), { roleSetId: options.roleId }) + }, + json: true + }).then((response) => response.body); + } + getMembers(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/users`, + qs: options + }, + json: true + }).then((response) => response.body); + } + joinGroup(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/users`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getSelfPendingGroupJoins() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/groups/pending` + }, + json: true + }).then((response) => response.body); + } + getUserGroups(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/groups/roles` + }, + json: true + }).then((response) => response.body); + } + changeGroupOwner(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/change-owner`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + claimGroup(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/claim-ownership`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + kickMember(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/users/${options.userId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + updateMember(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/users/${options.userId}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getGroupPayouts(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/payouts` + }, + json: true + }).then((response) => response.body); + } + payoutMembers(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/payouts`, + method: "POST", + json: { + PayoutType: options.type, + Recipients: options.users.map((userData) => ({ + recipientId: userData.userId, + recipientType: "User", + amount: userData.amount + })) + } + }, + json: true + }).then((response) => response.body); + } + updateRecurringPayouts(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/payouts/recurring`, + method: "POST", + json: { + PayoutType: options.type, + Recipients: options.users.map((userData) => ({ + recipientId: userData.userId, + recipientType: "User", + amount: userData.amount + })) + } + }, + json: true + }).then((response) => response.body); + } + getGroupRelationships(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}`, + qs: { + "model.startRowIndex": options.startRowIndex || 0, + "model.maxRows": options.maxRows + } + }, + json: true + }).then((response) => response.body); + } + declineRelationshipRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, + method: "DELETE", + json: { + GroupIds: options.withGroups + } + }, + json: true + }).then((response) => response.body); + } + getRelationshipRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, + qs: options + }, + json: true + }).then((response) => response.body); + } + acceptRelationshipRequests(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests`, + method: "DELETE", + json: { + GroupIds: options.withGroups + } + }, + json: true + }).then((response) => response.body); + } + deleteRelationship(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/${options.withGroup}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + createRelationship(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/${options.withGroup}`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + acceptRelationshipRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}` + }, + json: true + }).then((response) => response.body); + } + declineRelationshipRequest(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/relationships/${options.relationshipType}/requests/${options.withGroup}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getRolePermissions(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions` + }, + json: true + }).then((response) => response.body); + } + updateRolePermissions(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/roles/${options.roleId}/permissions`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getGuestPermissions(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/guest/permissions` + }, + json: true + }).then((response) => response.body); + } + getAllRolesPermissions(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/roles/permissions` + }, + json: true + }).then((response) => response.body); + } + getSocialLinks(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/social-links` + }, + json: true + }).then((response) => response.body); + } + createSocialLink(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/social-links`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + deleteSocialLink(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/social-links/${options.id}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + updateSocialLink(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/social-links/${options.id}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getWallPosts(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/${options.groupId}/wall/posts`, + qs: options + }, + json: true + }).then((response) => response.body); + } + createWallPost(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/wall/posts`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + deleteWallPost(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/wall/posts/${options.id}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + deleteUserWallPosts(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/wall/users/${options.userId}/posts`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + searchGroupsByKeyword(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/search`, + qs: options + }, + json: true + }).then((response) => response.body); + } + searchGroups(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/search/lookup`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getGroupSearchMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/search/metadata` + }, + json: true + }).then((response) => response.body); + } + getRolesByIds(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/roles`, + qs: { + ids: options.roleIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + getUserPrimaryGroup(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/groups/primary/role` + }, + json: true + }).then((response) => response.body); + } + removePrimaryGroup() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/groups/primary`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + setPrimaryGroup(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/user/groups/primary`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + createRole(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/rolesets/create`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + deleteRole(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/rolesets/${options.roleId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + updateRole(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/groups/${options.groupId}/rolesets/${options.roleId}`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.GroupsAPI = GroupsAPI; diff --git a/dist/client/apis/InventoryAPI.d.ts b/dist/client/apis/InventoryAPI.d.ts new file mode 100644 index 000000000..c381ffb28 --- /dev/null +++ b/dist/client/apis/InventoryAPI.d.ts @@ -0,0 +1,140 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type InventoryCanViewInventory = { + canView: boolean; +}; +export declare type InventoryItem = { + name: string; + displayName: string; + filter: string; + id: number; + type: string; + categoryType: string; +}; +export declare type InventoryCategory = { + name: string; + displayName: string; + categoryType: string; + items: InventoryItem[]; +}; +export declare type InventoryCategories = { + categories: InventoryCategory[]; +}; +export declare type InventoryGetPackageAssetsOptions = { + packageId: number; +}; +export declare type InventoryGetPackageAssets = { + assetIds: number[]; +}; +export declare type InventoryGetUserCollectiblesOptions = { + userId: number; + assetType?: "Image" | "TShirt" | "Audio" | "Mesh" | "Lua" | "HTML" | "Text" | "Hat" | "Place" | "Model" | "Shirt" | "Pants" | "Decal" | "Avatar" | "Head" | "Face" | "Gear" | "Badge" | "GroupEmblem" | "Animation" | "Arms" | "Legs" | "Torso" | "RightArm" | "LeftArm" | "LeftLeg" | "RightLeg" | "Package" | "YouTubeVideo" | "GamePass" | "App" | "Code" | "Plugin" | "SolidModel" | "MeshPart" | "HairAccessory" | "NeckAccessory" | "ShoulderAccessory" | "FrontAccessory" | "BackAccessory" | "WaistAccessory" | "ClimbAnimation" | "DeathAnimation" | "FallAnimation" | "IdleAnimation" | "JumpAnimation" | "RunAnimation" | "SwimAnimation" | "WalkAnimation" | "PoseAnimation" | "LocalizationTableManifest" | "LocalizationTableTranslation" | "EmoteAnimation" | "Video" | "TexturePack"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type InventoryGetUserCollectibles = { + previousPageCursor: string; + nextPageCursor: string; + data: { + userAssetId: number; + serialNumber: number; + assetId: number; + name: string; + recentAveragePrice: number; + originalPrice: number; + assetStock: number; + buildersClubMembershipType: "None" | string; + }[]; +}; +export declare type InventoryGetUserItemsByTypeAndTargetIdOptions = { + userId: number; + itemType: "Asset" | "GamePass" | "Badge" | "Bundle"; + itemTargetId: number; +}; +export declare type InventoryGetUserItemsByTypeAndTargetId = { + previousPageCursor: string; + nextPageCursor: string; + data: { + Id: number; + Name: string; + Type: InventoryGetUserItemsByTypeAndTargetIdOptions["itemType"]; + InstanceId: number; + }[]; +}; +export declare type InventoryGetAssetOwnersOptions = { + assetId: number; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type InventoryGetAssetOwners = { + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + serialNumber: number; + owner: { + id: number; + type: "User" | string; + name: string; + }; + created: string; + updated: string; + }; +}; +export declare type InventoryGetUserInventoryOptions = { + userId: number; + assetTypes: InventoryGetUserCollectiblesOptions["assetType"][]; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; +export declare type InventoryGetUserInventory = { + previousPageCursor: string; + nextPageCursor: string; + data: { + assetId: number; + name: string; + assetType: InventoryGetUserCollectiblesOptions["assetType"]; + created: string; + }[]; +}; +export declare type InventoryGetUserInventoryByAssetTypeIdOptions = Omit & { + assetTypeId: number; +}; +export declare type InventoryGetUserInventoryByAssetTypeId = { + previousPageCursor: string; + nextPageCursor: string; + data: { + assetName: string; + userAssetId: number; + assetId: number; + serialNumber: number; + owner: { + userId: number; + username: string; + buildersClubMembershipType: "None" | string; + }; + created: string; + updated: string; + }[]; +}; +export declare class InventoryAPI extends BaseAPI { + constructor(client: Client); + getPackageAssets(options: InventoryGetPackageAssetsOptions): Promise; + getUserCollectibles(options: InventoryGetUserCollectiblesOptions): Promise; + getUserItemsByTypeAndTargetId(options: InventoryGetUserItemsByTypeAndTargetIdOptions): Promise; + canViewInventory(options: { + userId: number; + }): Promise; + getCategories(options: { + userId: number; + }): Promise; + getCategoriesFavorites(options: { + userId: number; + }): Promise; + getAssetOwners(options: InventoryGetAssetOwnersOptions): Promise; + getUserInventory(options: InventoryGetUserInventoryOptions): Promise; + getUserInventoryByAssetTypeId(options: InventoryGetUserInventoryByAssetTypeIdOptions): Promise; +} diff --git a/dist/client/apis/InventoryAPI.js b/dist/client/apis/InventoryAPI.js new file mode 100644 index 000000000..9049356bc --- /dev/null +++ b/dist/client/apis/InventoryAPI.js @@ -0,0 +1,98 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.InventoryAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class InventoryAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://inventory.roblox.com/" + }); + } + getPackageAssets(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/packages/${options.packageId}/assets` + }, + json: true + }).then((response) => response.body); + } + getUserCollectibles(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/assets/collectibles`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserItemsByTypeAndTargetId(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/items/${options.itemType}/${options.itemTargetId}` + }, + json: true + }).then((response) => response.body); + } + canViewInventory(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/can-view-inventory` + }, + json: true + }).then((response) => response.body); + } + getCategories(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/categories` + }, + json: true + }).then((response) => response.body); + } + getCategoriesFavorites(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/categories/favorites` + }, + json: true + }).then((response) => response.body); + } + getAssetOwners(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/assets/${options.assetId}/owners`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserInventory(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/users/${options.userId}/inventory`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUserInventoryByAssetTypeId(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/users/${options.userId}/inventory/${options.assetTypeId}`, + qs: options + }, + json: true + }).then((response) => response.body); + } +} +exports.InventoryAPI = InventoryAPI; diff --git a/dist/client/apis/ItemConfigurationAPI.d.ts b/dist/client/apis/ItemConfigurationAPI.d.ts new file mode 100644 index 000000000..8296ff054 --- /dev/null +++ b/dist/client/apis/ItemConfigurationAPI.d.ts @@ -0,0 +1,88 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type ItemConfigurationGetCreatedAssetsOptions = { + assetType: string; + isArchived?: boolean; + groupId?: number; + sortOrder?: "Asc" | "Desc"; +}; +export declare type ItemConfigurationGetCreatedAssets = { + previousPageCursor: string; + nextPageCursor: string; + data: { + assetId: number; + name: string; + }[]; +}; +export declare type ItemConfigurationGetMultiCreatedAssetDetailsOptions = { + assetIds: number[]; +}; +export declare type ItemConfigurationGetMultiCreatedAssetDetails = { + assetId: number; + name: string; + status: string; + description: string; + creatorType: string; + creatorTargetId: number; + price: number; + priceConfiguration: { + priceInRobux: number; + premiumDiscountPercentage: number; + premiumPriceInRobux: number; + }; + isArchived: boolean; + assetType: string; +}[]; +export declare type ItemConfigurationGetItemTagsByItemIdsOptions = { + itemIds: number[]; +}; +export declare type ItemConfigurationGetItemTagsByItemIds = { + data: { + id: string; + itemTags: { + id: string; + tag: { + tagId: string; + name: string; + localizedDisplayName: string; + status: "Success" | string; + }; + }[]; + }[]; +}; +export declare type ItemConfigurationCreateItemTagOptions = { + itemId: number; + tagId: string; +}; +export declare type ItemConfigurationCreateItemTag = ItemConfigurationGetItemTagsByItemIds["data"][0]["itemTags"][0]; +export declare type ItemConfigurationGetItemTagsMetaData = { + isItemTagsFeatureEnabled: boolean; + enabledAssetTypes: string[]; + maximumItemTagsPerItem: number; +}; +export declare type ItemConfigurationDeleteItemTagOptions = { + itemTagId: number; +}; +export declare type ItemConfigurationDeleteItemTag = unknown; +export declare type ItemConfigurationGetTagsByTagIdsOptions = { + tagIds: number[]; +}; +export declare type ItemConfigurationGetTagsByTagIds = { + data: Omit[]; +}; +export declare type ItemConfigurationSearchTagsOptions = { + prefix: string; + results: number; +}; +export declare type ItemConfigurationSearchTags = ItemConfigurationGetTagsByTagIds; +export declare class ItemConfigurationAPI extends BaseAPI { + constructor(client: Client); + getCreatedAssets(options: ItemConfigurationGetCreatedAssetsOptions): Promise; + getMultiCreatedAssets(options: ItemConfigurationGetMultiCreatedAssetDetailsOptions): Promise; + getItemTagsByItemIds(options: ItemConfigurationGetItemTagsByItemIdsOptions): Promise; + createItemTag(options: ItemConfigurationCreateItemTagOptions): Promise; + getItemTagsMetaData(): Promise; + deleteItemTag(options: ItemConfigurationDeleteItemTagOptions): Promise; + getTagsByTagIds(options: ItemConfigurationGetTagsByTagIdsOptions): Promise; + searchTags(options: ItemConfigurationSearchTagsOptions): Promise; +} diff --git a/dist/client/apis/ItemConfigurationAPI.js b/dist/client/apis/ItemConfigurationAPI.js new file mode 100644 index 000000000..df7055b97 --- /dev/null +++ b/dist/client/apis/ItemConfigurationAPI.js @@ -0,0 +1,98 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ItemConfigurationAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class ItemConfigurationAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://itemconfiguration.roblox.com/" + }); + } + getCreatedAssets(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/creations/get-assets`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getMultiCreatedAssets(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/creations/get-asset-details`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getItemTagsByItemIds(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags`, + qs: { + itemIds: options.itemIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + createItemTag(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getItemTagsMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags/metadata` + }, + json: true + }).then((response) => response.body); + } + deleteItemTag(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/item-tags/${options.itemTagId}`, + method: "DELETE" + }, + json: true + }).then((response) => response.body); + } + getTagsByTagIds(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/tags`, + qs: { + tagIds: options.tagIds.join(",") + } + }, + json: true + }).then((response) => response.body); + } + searchTags(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/tags/prefix-search`, + qs: options + }, + json: true + }).then((response) => response.body); + } +} +exports.ItemConfigurationAPI = ItemConfigurationAPI; diff --git a/dist/client/apis/LocaleAPI.d.ts b/dist/client/apis/LocaleAPI.d.ts new file mode 100644 index 000000000..02ef1254b --- /dev/null +++ b/dist/client/apis/LocaleAPI.d.ts @@ -0,0 +1,61 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type LocaleGetCountryRegionsOptions = { + locale: string; +}; +export declare type LocaleGetCountryRegions = { + countryRegionList: { + code: string; + name: string; + displayName: string; + }[]; +}; +export declare type LocaleGetLocalesOptions = { + displayValueLocale?: string; +}; +export declare type LocaleGetLocales = { + data: { + locale: { + id: number; + locale: string; + name: string; + nativeName: string; + language: { + id: number; + name: string; + nativeName: string; + languageCode: string; + }; + }; + isEnabledForFullExperience: boolean; + isEnabledForSignupAndLogin: boolean; + isEnabledForInGameUgc: boolean; + }[]; +}; +export declare type LocaleGetSupportedLocales = { + supportedLocales: LocaleGetLocales["data"][0]["locale"][]; +}; +export declare type LocaleGetUserLocale = { + supportedLocale: LocaleGetLocales["data"][0]["locale"]; +}; +export declare type LocaleGetLocusSupportedLocales = { + signupAndLogin: LocaleGetLocales["data"][0]["locale"]; + generalExperience: LocaleGetLocales["data"][0]["locale"]; + ugc: LocaleGetLocales["data"][0]["locale"]; +}; +export declare type LocaleSetUserLocaleOptions = { + supportedLocaleCode: string; +}; +export declare type LocaleSetUserLocale = { + success: boolean; +}; +export declare class LocaleAPI extends BaseAPI { + constructor(client: Client); + getCountryRegions(options: LocaleGetCountryRegionsOptions): Promise; + getLocales(options: LocaleGetLocalesOptions): Promise; + getSupportedLocales(): Promise; + getSupportedLocalsForCreators(): Promise; + getUserLocale(): Promise; + getLocusSupportedLocales(): Promise; + setUserLocale(options: LocaleSetUserLocaleOptions): Promise; +} diff --git a/dist/client/apis/LocaleAPI.js b/dist/client/apis/LocaleAPI.js new file mode 100644 index 000000000..d28d07193 --- /dev/null +++ b/dist/client/apis/LocaleAPI.js @@ -0,0 +1,80 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LocaleAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class LocaleAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://locale.roblox.com/" + }); + } + getCountryRegions(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/country-regions`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getLocales(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getSupportedLocales() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales/supported-locales` + }, + json: true + }).then((response) => response.body); + } + getSupportedLocalsForCreators() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales/supported-locales-for-creators` + }, + json: true + }).then((response) => response.body); + } + getUserLocale() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/locales/user-locale` + }, + json: true + }).then((response) => response.body); + } + getLocusSupportedLocales() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/locales/user-localization-locus-supported-locales` + }, + json: true + }).then((response) => response.body); + } + setUserLocale(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/locales/set-user-supported-locale`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.LocaleAPI = LocaleAPI; diff --git a/dist/client/apis/MetricsAPI.d.ts b/dist/client/apis/MetricsAPI.d.ts new file mode 100644 index 000000000..1d2078aa6 --- /dev/null +++ b/dist/client/apis/MetricsAPI.d.ts @@ -0,0 +1,26 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type MetricsGetThumbnailsMetaData = { + logRatio: number; +}; +export declare type MetricsRecordThumbnailLoadOptions = { + duration: number; + loadState: string; + thumbnailType: string; +}; +export declare type MetricsRecordThumbnailLoad = unknown; +export declare type MetricsReportBundleLoadOptions = { + bundleUrl: string; + bundleName: string; + loadTimeInMilliseconds: number; + cdnProviderName: string; + loadState: string; + bundleContentType: string; +}; +export declare type MetricsReportBundleLoad = unknown; +export declare class MetricsAPI extends BaseAPI { + constructor(client: Client); + getThumbnailsMetaData(): Promise; + recordThumbnailLoad(options: MetricsRecordThumbnailLoadOptions): Promise; + recordBundleLoad(options: MetricsReportBundleLoadOptions): Promise; +} diff --git a/dist/client/apis/MetricsAPI.js b/dist/client/apis/MetricsAPI.js new file mode 100644 index 000000000..cb2d20454 --- /dev/null +++ b/dist/client/apis/MetricsAPI.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MetricsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class MetricsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://metrics.roblox.com/" + }); + } + getThumbnailsMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/thumbnails/metadata` + }, + json: true + }).then((response) => response.body); + } + recordThumbnailLoad(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/thumbnails/load`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + recordBundleLoad(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundle-metrics/report`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.MetricsAPI = MetricsAPI; diff --git a/dist/client/apis/NotificationsAPI.d.ts b/dist/client/apis/NotificationsAPI.d.ts new file mode 100644 index 000000000..6c201d9f0 --- /dev/null +++ b/dist/client/apis/NotificationsAPI.d.ts @@ -0,0 +1,267 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type NotificationsGetNotificationsSettings = { + notificationBandSettings: { + notificationSourceType: string; + receiverDestinationType: string; + isEnabled: boolean; + isOverridable: boolean; + isSetByReceiver: boolean; + pushNotificationDestinationPreferences: [ + { + name: string; + platform: string; + destinationId: 0; + isEnabled: boolean; + isSetByReceiver: boolean; + } + ]; + }[]; + optedOutNotificationSourceTypes: string[]; + optedOutReceiverDestinationTypes: string[]; +}; +export declare type NotificationsGetRealtimeNotificationsSettings = { + primaryDomain: string; + fallbackDomain: string; +}; +export declare type NotificationsAllowNotificationSourceOptions = { + sourceType: string; +}; +export declare type NotificationsAllowNotificationSource = unknown; +export declare type NotificationsDisallowNotificationSourceOptions = NotificationsAllowNotificationSourceOptions; +export declare type NotificationsDisallowNotificationSource = unknown; +export declare type NotificationsAllowNotificationsDestinationOptions = { + destinationType: string; +}; +export declare type NotificationsAllowNotificationsDestination = unknown; +export declare type NotificationsDisallowNotificationsDestinationOptions = NotificationsAllowNotificationsDestinationOptions; +export declare type NotificationsDisallowNotificationsDestination = unknown; +export declare type NotificationsUpdateNotificationDestinationSettingsOptions = { + notificationSourceType: string; + destinationId: number; + isEnabled: boolean; +}; +export declare type NotificationsUpdateNotificationDestinationSettings = unknown; +export declare type NotificationsUpdateNotificationSettingsOptions = { + updatedSettings: { + notificationSourceType: string; + receiverDestination: string; + isEnabled: boolean; + }[]; +}; +export declare type NotificationsUpdateNotificationSettings = unknown; +export declare type NotificationsGetChromeNotificationsManifest = { + name: string; + gcm_sender_id: string; +}; +export declare type NotificationsGetCurrentNotificationDeviceDestination = { + destination: { + user: { + name: string; + userId: number; + }; + name: string; + notificationToken: string; + supportsUpdateNotifications: boolean; + userPushNotificationDestinationId: number; + application: string; + platform: string; + }; + statusMessage: string; +}; +export declare type NotificationsGetNotificationDestinations = { + destinations: NotificationsGetCurrentNotificationDeviceDestination["destination"][]; + statusMessage: string; +}; +export declare type NotificationsGetNotificationsMetaDataOptions = { + notificationToken: string; + notificationId: number; +}; +export declare type NotificationsGetNotificationsMetaData = { + metadata: { + notificationId: string; + type: string; + detail: unknown; + fallbackDelivered: boolean; + }; + statusMessage: string; +}; +export declare type NotificationsGetNotificationIdsOptions = { + notificationToken: string; + limit: number; + cursor?: string; +}; +export declare type NotificationsGetNotificationIds = { + ids: string[]; + statusMessage: string; +}; +export declare type NotificationsDeregisterAllDevices = { + statusMessage: string; +}; +export declare type NotificationsDeregisterCurrentDevice = { + statusMessage: string; +}; +export declare type NotificationsMarkNotificationReadOptions = { + platformType: string; + notificationId: string; +}; +export declare type NotificationsMarkNotificationRead = { + statusMessage: string; +}; +export declare type NotificationsMarkNotificationCategoryReadOptions = { + notificationType: string; + category: string; + latestNotificationId: string; +}; +export declare type NotificationsMarkNotificationCategoryRead = { + statusMessage: string; +}; +export declare type NotificationsMarkNotificationInteractionOptions = { + platformType: string; + notificationToken: string; + notificationId: number; + interactionType: string; +}; +export declare type NotificationsMarkNotificationInteraction = { + statusMessage: string; +}; +export declare type NotificationsRegisterAmazonAndroidOptions = { + notificationToken: string; + authorizeForUser: boolean; + oldNotificationToken: string; + deviceName: string; +}; +export declare type NotificationsRegisterAmazonAndroid = { + registration: { + userPushNotificationDestinationId: number; + name: string; + notificationToken: string; + application: string; + platform: string; + }; + statusMessage: string; +}; +export declare type NotificationsRegisterAndroidNativeOptions = NotificationsRegisterAmazonAndroidOptions; +export declare type NotificationsRegisterAndroidNative = NotificationsRegisterAmazonAndroid; +export declare type NotificationsRegisterAndroidTencentServiceOptions = NotificationsRegisterAmazonAndroidOptions; +export declare type NotificationsRegisterAndroidTencentService = NotificationsRegisterAmazonAndroid; +export declare type NotificationsRegisterChromeOptions = { + notificationToken: string; + initiatedByUser: boolean; +}; +export declare type NotificationsRegisterChrome = NotificationsRegisterAmazonAndroid; +export declare type NotificationsRegisterFirefoxOptions = NotificationsRegisterChromeOptions & { + notificationEndpoint: string; +}; +export declare type NotificationsRegisterFirefox = NotificationsRegisterAmazonAndroid; +export declare type NotificationsRegisterIOSNativeOptions = { + notificationToken: string; + destinationIdentifier: string; + authorizeForUser: boolean; + oldNotificationToken: string; + deviceName: string; +}; +export declare type NotificationsRegisterIOSNative = NotificationsRegisterAmazonAndroid; +export declare type NotificationsGetLatestUniversesUpdatesOptions = { + universeIds: number[]; + sinceDateTime?: string; +}; +export declare type NotificationsGetLatestUniverseUpdates = { + universeId: number; + rootPlaceId: number; + createdOn: string; + createdOnKey: string; + content: string; + universeName: string; +}[]; +export declare type NotificationsGetStreamNotificationsPromptSettings = { + hasUserInteractedWithNotificationsStream: boolean; + showNotificationStreamPrompt: boolean; +}; +export declare type NotificationsGetRecentStreamNotificationsOptions = { + startIndex?: number; + maxRows?: number; +}; +export declare type NotificationsGetRecentStreamNotifications = { + id: number; + notificationSourceType: string; + eventDate: string; + isInteracted: boolean; + metadataCollection: unknown[]; + eventCount: number; +}[]; +export declare type NotificationsGetStreamNotificationsMetaData = { + bannerDismissTimeSpan: number; + signalRDisconnectionResponseInMilliseconds: number; + canLaunchGameFromGameUpdate: boolean; + useFriendsApiForAjaxRequests: boolean; +}; +export declare type NotificationsGetStreamNotificationsUnreadCount = { + unreadNotifications: number; + statusMessage: string; +}; +export declare type NotificationsClearUnreadStreamNotifications = { + statusMessage: string; +}; +export declare type NotificationsSendGameUpdateNotificationInteractedOptions = { + universeId: number; + createdOnKey: string; + interactioNType: string; + currentUserId: number; +}; +export declare type NotificationsSendGameUpdateNotificationInteracted = { + statusMessage: string; +}; +export declare type NotificationsSendGameUpdateNotificationReadOptions = { + universeId: number; + createdOn: string; + currentUserId: number; +}; +export declare type NotificationsSendGameUpdateNotificationRead = { + statusMessage: string; +}; +export declare type NotificationsMarkStreamNotificationInteractedOptions = { + eventId: string; +}; +export declare type NotificationsMarkStreamNotificationInteracted = { + statusMessage: string; +}; +export declare type NotificationsSuppressStreamNotificationsPrompt = { + statusMessage: string; +}; +export declare class NotificationsAPI extends BaseAPI { + constructor(client: Client); + getNotificationsSettings(): Promise; + getRealtimeNotificationSettings(): Promise; + allowNotificationSource(options: NotificationsAllowNotificationSourceOptions): Promise; + disallowNotificationSource(options: NotificationsDisallowNotificationSourceOptions): Promise; + allowNotificationDestination(options: NotificationsAllowNotificationsDestinationOptions): Promise; + disallowNotificationDestination(options: NotificationsDisallowNotificationsDestinationOptions): Promise; + updateDestinationSetting(options: NotificationsUpdateNotificationDestinationSettingsOptions): Promise; + updateNotificationSettings(options: NotificationsUpdateNotificationSettingsOptions): Promise; + getChromeManifest(): Promise; + getCurrentDeviceDestination(): Promise; + getDestinations(): Promise; + getPushNotificationsMetaData(): Promise; + getNotificationIds(options: NotificationsGetNotificationIdsOptions): Promise; + deregisterAllDevices(): Promise; + deregisterCurrentDevice(): Promise; + markNotificationRead(options: NotificationsMarkNotificationReadOptions): Promise; + markNotificationCategoryRead(options: NotificationsMarkNotificationCategoryReadOptions): Promise; + markNotificationInteraction(options: NotificationsMarkNotificationInteractionOptions): Promise; + registerAndroidAmazon(options: NotificationsRegisterAmazonAndroidOptions): Promise; + registerAndroidNative(options: NotificationsRegisterAndroidNativeOptions): Promise; + registerAndroidTencentSerice(options: NotificationsRegisterAndroidTencentServiceOptions): Promise; + registerChrome(options: NotificationsRegisterChromeOptions): Promise; + registerFirefox(options: NotificationsRegisterFirefoxOptions): Promise; + registerIOSNative(options: NotificationsRegisterIOSNativeOptions): Promise; + getLatestUniversesUpdates(options: NotificationsGetLatestUniversesUpdatesOptions): Promise; + getStreamNotificationsPromptSettings(): Promise; + getRecentStreamNotifications(options: NotificationsGetRecentStreamNotificationsOptions): Promise; + getStreamNotificationsMetaData(): Promise; + getUnreadStreamNotificationsCount(): Promise; + clearUnreadStreamNotifications(): Promise; + markGameUpdateNotificationInteracted(options: NotificationsSendGameUpdateNotificationInteractedOptions): Promise; + markGameUpdateNotificationRead(options: NotificationsSendGameUpdateNotificationReadOptions): Promise; + suppressStreamNotificationsPrompt(): Promise; +} diff --git a/dist/client/apis/NotificationsAPI.js b/dist/client/apis/NotificationsAPI.js new file mode 100644 index 000000000..0cfc145f3 --- /dev/null +++ b/dist/client/apis/NotificationsAPI.js @@ -0,0 +1,350 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NotificationsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class NotificationsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://notifications.roblox.com/" + }); + } + getNotificationsSettings() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/get-settings` + }, + json: true + }).then((response) => response.body); + } + getRealtimeNotificationSettings() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/settings/realtime` + }, + json: true + }).then((response) => response.body); + } + allowNotificationSource(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/notification-source-types/allow`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + disallowNotificationSource(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/notification-source-types/opt-out`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + allowNotificationDestination(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/receiver-destination-types/allow`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + disallowNotificationDestination(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/receiver-destination-types/opt-out`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + updateDestinationSetting(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/update-destination-setting`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + updateNotificationSettings(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/notifications/update-notification-settings`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getChromeManifest() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/chrome-manifest` + }, + json: true + }).then((response) => response.body); + } + getCurrentDeviceDestination() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/get-current-device-destination` + }, + json: true + }).then((response) => response.body); + } + getDestinations() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/get-destinations` + }, + json: true + }).then((response) => response.body); + } + getPushNotificationsMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/metadata` + }, + json: true + }).then((response) => response.body); + } + getNotificationIds(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/notification-ids`, + qs: options + }, + json: true + }).then((response) => response.body); + } + deregisterAllDevices() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/deregister-all-devices`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + deregisterCurrentDevice() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/deregister-current-device` + }, + json: true + }).then((response) => response.body); + } + markNotificationRead(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/mark-as-read`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markNotificationCategoryRead(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/mark-category-as-read`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markNotificationInteraction(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/mark-interaction`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + registerAndroidAmazon(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-android-amazon`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + registerAndroidNative(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-android-native`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + registerAndroidTencentSerice(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-android-tencent-service`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + registerChrome(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-chrome`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + registerFirefox(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-firefox`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + registerIOSNative(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/push-notifications/register-ios-native`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getLatestUniversesUpdates(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-latest-game-updates`, + qs: Object.assign(Object.assign({}, options), { universeId: options.universeIds.join(",") }) + }, + json: true + }).then((response) => response.body); + } + getStreamNotificationsPromptSettings() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-prompt-settings` + }, + json: true + }).then((response) => response.body); + } + getRecentStreamNotifications(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-recent`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getStreamNotificationsMetaData() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/metadata` + }, + json: true + }).then((response) => response.body); + } + getUnreadStreamNotificationsCount() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/unread-count` + }, + json: true + }).then((response) => response.body); + } + clearUnreadStreamNotifications() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/clear-unread`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + markGameUpdateNotificationInteracted(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/game-update-notification-interacted`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markGameUpdateNotificationRead(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/get-latest-game-updates`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + suppressStreamNotificationsPrompt() { + return this.request({ + requiresAuth: false, + request: { + path: `v2/stream-notifications/suppress-prompt`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } +} +exports.NotificationsAPI = NotificationsAPI; diff --git a/dist/client/apis/OtherAPI.d.ts b/dist/client/apis/OtherAPI.d.ts new file mode 100644 index 000000000..944b75318 --- /dev/null +++ b/dist/client/apis/OtherAPI.d.ts @@ -0,0 +1,49 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; +export declare type OtherGetUserProfileHeaderOptions = { + userId: number; +}; +export declare type OtherGetUserProfileHeader = { + UserId: number; + ProfileUserId: number; + ProfileUserName: string; + ProfileDisplayName: string; + FriendsCount: number; + UserPresenceType: EnumUserPresence; + LastLocation: string | null; + UserStatus: string | null; + UserStatusDate: string | null; + UserPlaceId: number | null; + FollowersCount: number; + FollowingsCount: number; + IsVieweeBlocked: boolean; + IsViewerBlocked: boolean; + AreFriends: boolean; + IncomingFriendRequestPending: boolean; + MaySendFriendInvitation: boolean; + FriendRequestPending: boolean; + MayFollow: boolean; + IsFollowing: boolean; + CanMessage: boolean; + MessagesDisabled: boolean; + CanBeFollowed: boolean; + CanTrade: boolean; + CanSeeFavorites: boolean; + MayImpersonate: boolean; + MayEdit: boolean; + HeadShotImage: { + Final: boolean; + Url: string; + RetryUrl: string | null; + UserId: number; + EndpointType: "Avatar" | string; + }; + PreviousUserNames: string; + IsUserOnPhone: boolean; + CanSeeInventory: boolean; +}; +export declare class OtherAPI extends BaseAPI { + constructor(client: Client); + getUserProfileHeader(options: OtherGetUserProfileHeaderOptions): Promise; +} diff --git a/dist/client/apis/OtherAPI.js b/dist/client/apis/OtherAPI.js new file mode 100644 index 000000000..14e538266 --- /dev/null +++ b/dist/client/apis/OtherAPI.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OtherAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class OtherAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://roblox.com/" + }); + } + getUserProfileHeader(options) { + return this.request({ + requiresAuth: false, + request: { + url: `https://www.roblox.com/users/profile/profileheader-json?userId=${options.userId}` + }, + json: true + }).then((response) => response.body); + } +} +exports.OtherAPI = OtherAPI; diff --git a/dist/client/apis/PremiumFeaturesAPI.d.ts b/dist/client/apis/PremiumFeaturesAPI.d.ts new file mode 100644 index 000000000..0d4ab9a2c --- /dev/null +++ b/dist/client/apis/PremiumFeaturesAPI.d.ts @@ -0,0 +1,17 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type PremiumFeaturesUpsellCheckOptions = { + userId: number; + universeId: number; + placeId: number; +}; +export declare type PremiumFeaturesUpsellCheck = unknown; +export declare type PremiumFeaturesValidateUserMembershipOptions = { + userId: number; +}; +export declare type PremiumFeaturesValidateUserMembership = boolean; +export declare class PremiumFeaturesAPI extends BaseAPI { + constructor(client: Client); + premiumUpsellCheck(options: PremiumFeaturesUpsellCheckOptions): Promise; + validateUserMembership(options: PremiumFeaturesValidateUserMembershipOptions): Promise; +} diff --git a/dist/client/apis/PremiumFeaturesAPI.js b/dist/client/apis/PremiumFeaturesAPI.js new file mode 100644 index 000000000..a1ecde426 --- /dev/null +++ b/dist/client/apis/PremiumFeaturesAPI.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PremiumFeaturesAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class PremiumFeaturesAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://premiumfeatures.roblox.com/" + }); + } + premiumUpsellCheck(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/premium-upsell-check`, + qs: options + }, + json: true + }).then((response) => response.body); + } + validateUserMembership(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/validate-membership` + }, + json: true + }).then((response) => response.body); + } +} +exports.PremiumFeaturesAPI = PremiumFeaturesAPI; diff --git a/dist/client/apis/PresenceAPI.d.ts b/dist/client/apis/PresenceAPI.d.ts new file mode 100644 index 000000000..80966a2f1 --- /dev/null +++ b/dist/client/apis/PresenceAPI.d.ts @@ -0,0 +1,30 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +import { EnumUserPresence } from "../../interfaces/GeneralInterfaces"; +export declare type PresenceRegisterAppPresenceOptions = { + location: string; + placeId: number; + disconnect: boolean; +}; +export declare type PresenceRegisterAppPresence = unknown; +export declare type PresenceGetUsersPresencesOptions = { + userIds: number[]; +}; +export declare type PresenceGetUsersPresences = { + userPresences: PresenceGetUsersPresence[]; +}; +export declare type PresenceGetUsersPresence = { + userPresenceType: EnumUserPresence; + lastLocation: string; + placeId: number; + rootPlaceId: number; + gameId: string; + universeId: number; + userId: number; + lastOnline: string; +}; +export declare class PresenceAPI extends BaseAPI { + constructor(client: Client); + registerAppPresence(options: PresenceRegisterAppPresenceOptions): Promise; + getUsersPresences(options: PresenceGetUsersPresencesOptions): Promise; +} diff --git a/dist/client/apis/PresenceAPI.js b/dist/client/apis/PresenceAPI.js new file mode 100644 index 000000000..5b4ebda78 --- /dev/null +++ b/dist/client/apis/PresenceAPI.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PresenceAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class PresenceAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://presence.roblox.com/" + }); + } + registerAppPresence(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/presence/register-app-presence`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getUsersPresences(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/presence/users`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.PresenceAPI = PresenceAPI; diff --git a/dist/client/apis/PrivateMessagesAPI.d.ts b/dist/client/apis/PrivateMessagesAPI.d.ts new file mode 100644 index 000000000..8d248b7c0 --- /dev/null +++ b/dist/client/apis/PrivateMessagesAPI.d.ts @@ -0,0 +1,101 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type PrivateMessagesGetAnnouncements = { + collection: { + id: number; + sender: { + id: number; + name: string; + displayName: string; + }; + subject: string; + body: string; + created: string; + updated: string; + }; + totalCollectionSize: number; +}; +export declare type PrivateMessagesGetAnnouncementsMetaData = { + numOfAnnouncements: number; +}; +export declare type PrivateMessagesGetMessagesOptions = { + pageNumber?: number; + pageSize?: number; + messageTab?: "Inbox" | "Sent" | "Archive"; +}; +export declare type PrivateMessagesGetMessages = { + collection: { + id: number; + sender: { + id: number; + name: string; + displayName: string; + }; + recipient: { + id: number; + name: string; + displayName: string; + }; + subject: string; + body: string; + created: string; + updated: string; + isRead: boolean; + isSystemMessage: boolean; + isReportAbuseDisplayed: boolean; + }[]; + totalCollectionSize: number; + totalPages: number; + pageNumber: number; +}; +export declare type PrivateMessagesGetMessageOptions = { + messageId: number; +}; +export declare type PrivateMessagesGetMessage = PrivateMessagesGetMessages["collection"][0]; +export declare type PrivateMessagesGetUnreadMessagesCount = { + count: number; +}; +export declare type PrivateMessagesArchiveMessagesOptions = { + messageIds: number[]; +}; +export declare type PrivateMessagesArchiveMessages = { + failedMessages?: { + messageId: number; + errorMessage: string; + }[]; +}; +export declare type PrivateMessagesMarkMessagesReadOptions = PrivateMessagesArchiveMessagesOptions; +export declare type PrivateMessagesMarkMessagesRead = PrivateMessagesArchiveMessages; +export declare type PrivateMessagesMarkMessagesUnreadOptions = PrivateMessagesArchiveMessagesOptions; +export declare type PrivateMessagesMarkMessagesUnread = PrivateMessagesArchiveMessages; +export declare type PrivateMessagesSendMessageOptions = { + userId: number; + subject: string; + body: string; + recipientId: number; + replyMessageId?: number; + includePreviousMessage?: boolean; +}; +export declare type PrivateMessagesSendMessage = { + success: boolean; + shortMessage: string; + message: string; +}; +export declare type PrivateMessagesUnArchiveMessagesOptions = PrivateMessagesArchiveMessagesOptions; +export declare type PrivateMessagesUnArchiveMessages = PrivateMessagesArchiveMessages; +export declare class PrivateMessagesAPI extends BaseAPI { + constructor(client: Client); + getAnnouncements(): Promise; + getAnnouncementsMetaData(): Promise; + getMessages(options: PrivateMessagesGetMessagesOptions): Promise; + getMessage(options: PrivateMessagesGetMessageOptions): Promise; + canMessage(options: { + userId: number; + }): Promise; + getUnreadMessagesCount(): Promise; + archiveMessages(options: PrivateMessagesArchiveMessagesOptions): Promise; + markMessagesRead(options: PrivateMessagesMarkMessagesReadOptions): Promise; + markMessagesUnread(options: PrivateMessagesMarkMessagesUnreadOptions): Promise; + sendMessage(options: PrivateMessagesSendMessageOptions): Promise; + unArchiveMessages(options: PrivateMessagesUnArchiveMessagesOptions): Promise; +} diff --git a/dist/client/apis/PrivateMessagesAPI.js b/dist/client/apis/PrivateMessagesAPI.js new file mode 100644 index 000000000..ef77c97d1 --- /dev/null +++ b/dist/client/apis/PrivateMessagesAPI.js @@ -0,0 +1,123 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PrivateMessagesAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class PrivateMessagesAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://privatemessages.roblox.com/" + }); + } + getAnnouncements() { + return this.request({ + requiresAuth: false, + request: { + path: `v1/announcements` + }, + json: true + }).then((response) => response.body); + } + getAnnouncementsMetaData() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/announcements/metadata` + }, + json: true + }).then((response) => response.body); + } + getMessages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getMessage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/${options.messageId}` + }, + json: true + }).then((response) => response.body); + } + canMessage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/${options.userId}/can-message` + }, + json: true + }).then((response) => response.body.canMessage); + } + getUnreadMessagesCount() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/unread/count` + }, + json: true + }).then((response) => response.body); + } + archiveMessages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/archive`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markMessagesRead(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/mark-read`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + markMessagesUnread(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/mark-unread`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + sendMessage(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/send`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + unArchiveMessages(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/messages/unarchive`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.PrivateMessagesAPI = PrivateMessagesAPI; diff --git a/dist/client/apis/PublishAPI.d.ts b/dist/client/apis/PublishAPI.d.ts new file mode 100644 index 000000000..51d8fb9a1 --- /dev/null +++ b/dist/client/apis/PublishAPI.d.ts @@ -0,0 +1,71 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type PublishUploadAssetsOptions = { + files: unknown; +}; +export declare type PublishUploadAssets = { + AssetDetails: { + assetId: number; + assetFileName: string; + uploadAssetError: "None" | string; + }[]; +}; +export declare type PublishAudioOptions = { + name: string; + file: unknown; + groupId?: number; + paymentSource: string; +}; +export declare type PublishAudio = { + Id: number; + Name: string; +}; +export declare type PublishVerifyAudioOptions = PublishAudioOptions; +export declare type PublishVerifyAudio = { + price: number; + canAfford: boolean; +}; +export declare type PublishBadgeIconOptions = { + badgeId: number; + files: unknown; +}; +export declare type PublishBadgeIcon = { + targetId: number; +}; +export declare type PublishGamePassIconOptions = { + gamePassId: number; + files: unknown; +}; +export declare type PublishGamePassIcon = { + targetId: number; +}; +export declare type PublishUploadGameThumbnailOptions = { + gameId: number; + files: unknown; +}; +export declare type PublishUploadGameThumbnail = { + targetId: number; +}; +export declare type PublishUploadPluginIconOptions = { + pluginId: number; + files: unknown; +}; +export declare type PublishUploadPluginIcon = { + targetId: number; +}; +export declare class PublishAPI extends BaseAPI { + constructor(client: Client); + /** + * @hidden + */ + uploadAssets(options: PublishUploadAssetsOptions): Promise; + publishAudio(options: PublishAudioOptions): Promise; + verifyAudio(options: PublishVerifyAudioOptions): Promise; + publishBadgeIcon(options: PublishBadgeIconOptions): Promise; + /** + * @hidden + */ + publishGamePassIcon(options: PublishGamePassIconOptions): Promise; + uploadGameThumbnail(options: PublishUploadGameThumbnailOptions): Promise; + uploadPluginIcon(options: PublishUploadPluginIconOptions): Promise; +} diff --git a/dist/client/apis/PublishAPI.js b/dist/client/apis/PublishAPI.js new file mode 100644 index 000000000..b00bb8fa8 --- /dev/null +++ b/dist/client/apis/PublishAPI.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PublishAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class PublishAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://publish.roblox.com/" + }); + } + /** + * @hidden + */ + uploadAssets(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets/upload`, + method: "POST", + body: options.files + }, + json: true + }).then((response) => response.body); + } + publishAudio(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/audio`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + verifyAudio(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/audio/verify`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + publishBadgeIcon(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/${options.badgeId}/icon`, + method: "POST", + body: options.files + }, + json: true + }).then((response) => response.body); + } + /** + * @hidden + */ + publishGamePassIcon(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/game-passes/${options.gamePassId}/icon`, + method: "POST", + body: options.files + }, + json: true + }).then((response) => response.body); + } + uploadGameThumbnail(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/${options.gameId}/thumbnail/image`, + method: "POST", + body: options.files + }, + json: true + }).then((response) => response.body); + } + uploadPluginIcon(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/plugins/${options.pluginId}/icon`, + method: "POST", + body: options.files + }, + json: true + }).then((response) => response.body); + } +} +exports.PublishAPI = PublishAPI; diff --git a/dist/client/apis/ThumbnailsAPI.d.ts b/dist/client/apis/ThumbnailsAPI.d.ts new file mode 100644 index 000000000..ace4b8653 --- /dev/null +++ b/dist/client/apis/ThumbnailsAPI.d.ts @@ -0,0 +1,154 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type ThumbnailsGetAssetsThumbnailsOptions = { + assetIds: number[]; + returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; + size?: "42x42" | "50x50" | "75x75" | "110x110" | "140x140" | "150x150" | "160x100" | "160x600" | "250x250" | "256x144" | "300x250" | "304x166" | "384x216" | "396x216" | "420x420" | "480x270" | "512x512" | "576x324" | "700x700" | "728x90" | "768x432"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetAssetsThumbnails = { + data: { + targetId: number; + state: "Error" | string; + imageUrl: string; + }[]; +}; +export declare type ThumbnailsGetBadgesIconsOptions = { + badgeIds: number[]; + size?: "150x150"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetBadgesIcons = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetBundlesThumbnailsOptions = { + bundleIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetBundlesThumbnails = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetDeveloperProductsIconsOptions = { + developerProductIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetDeveloperProductsIcons = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetGamePassesIconsOptions = { + gamePassIds: number[]; + size?: "150x150"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetGamePassesIcons = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUniverseThumbnailsOptions = { + universeId: number; + thumbnailIds: number[]; + size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUniverseThumbnails = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUniversesRootPlaceThumbnailsOptions = { + universeIds: number[]; + returnPolicy?: "PlaceHolder" | "AutoGenerated" | "ForceAutoGenerated"; + size?: "50x50" | "128x128" | "150x150" | "256x256" | "512x512"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUniversesRootPlaceThumbnails = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUniversesThumbnailsOptions = { + universeIds: number[]; + countPerUniverse?: number; + defaults?: boolean; + size?: "768x432" | "576x324" | "480x270" | "384x216" | "256x144"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUniversesThumbnails = { + data: { + universeId: number; + error?: { + code: number; + message: string; + userFacingMessage: string; + field: string; + fieldData: unknown; + }; + thumbnails: { + targetId: number; + state: "Error" | string; + imageUrl: string; + }[]; + }[]; +}; +export declare type ThumbnailsGetGroupsIconsOptions = { + groupIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetGroupsIcons = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUsersFullBodyAvatarImagesOptions = { + userIds: number[]; + size?: "30x30" | "48x48" | "60x60" | "75x75" | "100x100" | "140x140" | "150x150" | "150x200" | "180x180" | "250x250" | "352x352" | "420x420" | "720x720"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUsersFullBodyAvatarImages = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUsersAvatarBustImagesOptions = { + userIds: number[]; + size?: "50x50" | "60x60" | "75x75"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUsersAvatarBustImages = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUsersAvatarHeadShotsImagesOptions = { + userIds: number[]; + size?: "48x48" | "50x50" | "60x60" | "75x75" | "110x110" | "150x150" | "180x180" | "352x352" | "420x420" | "720x720"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUsersAvatarHeadShotsImages = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetUsersOutfitsImagesOptions = { + userOutfitIds: number[]; + size?: "150x150" | "420x420"; + format?: "png" | "jpg"; + isCircular?: boolean; +}; +export declare type ThumbnailsGetUsersOutfitsImages = ThumbnailsGetAssetsThumbnails; +export declare type ThumbnailsGetBatchImagesOptions = { + requestId: string; + targetId: number; + type: "Avatar" | "AvatarHeadShot" | "GameIcon" | "BadgeIcon" | "GameThumbnail" | "GamePass" | "Asset" | "BundleThumbnail" | "Outfit" | "GroupIcon" | "DeveloperProduct" | "AutoGeneratedAsset"; + size: string; + isCircular: boolean; +}; +export declare type ThumbnailsGetBatchImages = { + data: { + requestId: string; + errorCode?: number; + errorMessage?: string; + targetId: number; + state: "Error" | string; + imageUrl: string; + }[]; +}; +export declare class ThumbnailsAPI extends BaseAPI { + constructor(client: Client); + getAssetsThumbnails(options: ThumbnailsGetAssetsThumbnailsOptions): Promise; + getBadgesIcons(options: ThumbnailsGetBadgesIconsOptions): Promise; + getBundlesThumbnails(options: ThumbnailsGetBundlesThumbnailsOptions): Promise; + getDeveloperProductIcons(options: ThumbnailsGetDeveloperProductsIconsOptions): Promise; + getGamePassesIcons(options: ThumbnailsGetGamePassesIconsOptions): Promise; + getUniverseThumbnailIds(options: ThumbnailsGetUniverseThumbnailsOptions): Promise; + getUniversesRootPlaceThumbnail(options: ThumbnailsGetUniversesRootPlaceThumbnailsOptions): Promise; + getUniversesThumbnailIds(options: ThumbnailsGetUniversesThumbnailsOptions): Promise; + getGroupsIcons(options: ThumbnailsGetGroupsIconsOptions): Promise; + getUsersFullBodyAvatarImages(options: ThumbnailsGetUsersFullBodyAvatarImagesOptions): Promise; + getUsersAvatarBustImages(options: ThumbnailsGetUsersAvatarBustImagesOptions): Promise; + getUsersAvatarHeadShotImages(options: ThumbnailsGetUsersAvatarHeadShotsImagesOptions): Promise; + getUsersOutfitsImages(options: ThumbnailsGetUsersOutfitsImagesOptions): Promise; + getBatchImages(options: ThumbnailsGetBatchImagesOptions): Promise; +} diff --git a/dist/client/apis/ThumbnailsAPI.js b/dist/client/apis/ThumbnailsAPI.js new file mode 100644 index 000000000..1952b5cff --- /dev/null +++ b/dist/client/apis/ThumbnailsAPI.js @@ -0,0 +1,166 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ThumbnailsAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class ThumbnailsAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://thumbnails.roblox.com/" + }); + } + getAssetsThumbnails(options) { + const assetIdsQueryString = `assetIds=${options.assetIds.join("&assetIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets?${assetIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getBadgesIcons(options) { + const badgeIdsQueryString = `badgeIds=${options.badgeIds.join("&badgeIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/badges/icons?${badgeIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getBundlesThumbnails(options) { + const bundleIdsQueryString = `bundleIds=${options.bundleIds.join("&bundleIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/bundles/thumbnails?${bundleIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getDeveloperProductIcons(options) { + const developerProductIdsQueryString = `developerProductIds=${options.developerProductIds.join("&developerProductIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/developer-products/icons?${developerProductIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getGamePassesIcons(options) { + const gamePassIdsQueryString = `gamePassIds=${options.gamePassIds.join("&gamePassIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets?${gamePassIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getUniverseThumbnailIds(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/${options.universeId}/thumbnails`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getUniversesRootPlaceThumbnail(options) { + const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/icons?${universeIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getUniversesThumbnailIds(options) { + const universeIdsQueryString = `universeIds=${options.universeIds.join("&universeIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/games/multiget/thumbnails?${universeIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getGroupsIcons(options) { + const groupIdsQueryString = `groupIds=${options.groupIds.join("&groupIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/groups/icons?${groupIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getUsersFullBodyAvatarImages(options) { + const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/avatar?${userIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getUsersAvatarBustImages(options) { + const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/avatar-bust?${userIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getUsersAvatarHeadShotImages(options) { + const userIdsQueryString = `userIds=${options.userIds.join("&userIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/avatar-headshot?${userIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getUsersOutfitsImages(options) { + const outfitIdsQueryString = `userOutfitIds=${options.userOutfitIds.join("&userOutfitIds=")}`; + return this.request({ + requiresAuth: false, + request: { + path: `v1/assets?${outfitIdsQueryString}`, + qs: Object.assign({}, options) + }, + json: true + }).then((response) => response.body); + } + getBatchImages(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/batch`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.ThumbnailsAPI = ThumbnailsAPI; diff --git a/dist/client/apis/TradesAPI.d.ts b/dist/client/apis/TradesAPI.d.ts new file mode 100644 index 000000000..6105df631 --- /dev/null +++ b/dist/client/apis/TradesAPI.d.ts @@ -0,0 +1,111 @@ +import BaseAPI from "./BaseAPI"; +import Client from "../Client"; +export declare type GetTradeOptions = { + tradeId: number; +}; +export declare type GetTrade = { + offers: { + user: { + id: number; + name: string; + displayName: string; + }; + userAssets: { + id: number; + serialNumber: number; + assetId: number; + name: string; + recentAveragePrice: number; + originalPrice: number; + assetStock: number; + membershipType: "None" | string; + }[]; + robux: number; + }[]; + id: number; + user: { + id: number; + name: string; + displayName: string; + }; + created: string; + expiration: string; + isActive: boolean; + status: string; +}; +export declare type GetTradesByStatusTypeOptions = { + tradeStatusType: "Inbound" | "Outbound" | "Completed" | "Inactive"; + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type GetTradesByStatusType = { + previousPageCursor: string; + nextPageCursor: string; + data: { + id: number; + user: { + id: number; + name: string; + displayName: string; + }; + created: string; + expiration: string; + isActive: boolean; + status: string; + }[]; +}; +export declare type GetTradesCountByStatusTypeOptions = { + tradeStatusType: GetTradesByStatusTypeOptions["tradeStatusType"]; +}; +export declare type GetTradesCountByStatusType = { + count: number; +}; +export declare type GetTradesMetaData = { + maxItemsPerSide: number; + minValueRatio: number; + tradeSystemMaxRobuxPercent: number; + tradeSystemRobuxFee: number; +}; +export declare type CanSelfTradeWithUserOptions = { + userId: number; +}; +export declare type CanSelfTradeWithUser = { + canTrade: boolean; + status: string; +}; +export declare type AcceptTradeOptions = { + tradeId: number; +}; +export declare type AcceptTrade = unknown; +export declare type CounterTradeOptions = { + tradeId: number; + offers: { + userId: number; + userAssetIds: number[]; + robux: number; + }[]; +}; +export declare type CounterTrade = { + id: number; +}; +export declare type DeclineTradeOptions = { + tradeId: number; +}; +export declare type DeclineTrade = unknown; +export declare type SendTradeOptions = Omit; +export declare type SendTrade = { + id: number; +}; +export default class TradesAPI extends BaseAPI { + constructor(client: Client); + getTrade(options: GetTradeOptions): Promise; + getTradesByStatusType(options: GetTradesByStatusTypeOptions): Promise; + getTradesCountByStatusType(options: GetTradesCountByStatusTypeOptions): Promise; + getTradesMetaData(): Promise; + canTradeWith(options: CanSelfTradeWithUserOptions): Promise; + acceptTrade(options: AcceptTradeOptions): Promise; + counterTrade(options: CounterTradeOptions): Promise; + declineTrade(options: DeclineTradeOptions): Promise; + sendTrade(options: SendTradeOptions): Promise; +} diff --git a/dist/client/apis/TradesAPI.js b/dist/client/apis/TradesAPI.js new file mode 100644 index 000000000..7d67285a9 --- /dev/null +++ b/dist/client/apis/TradesAPI.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const BaseAPI_1 = (0, tslib_1.__importDefault)(require("./BaseAPI")); +class TradesAPI extends BaseAPI_1.default { + constructor(client) { + super({ + client, + baseUrl: "https://trades.roblox.com/" + }); + } + getTrade(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}` + }, + json: true + }).then((response) => response.body); + } + getTradesByStatusType(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeStatusType}` + }, + json: true + }).then((response) => response.body); + } + getTradesCountByStatusType(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeStatusType}/count` + }, + json: true + }).then((response) => response.body); + } + getTradesMetaData() { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/metadata` + }, + json: true + }).then((response) => response.body); + } + canTradeWith(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/can-trade-with` + }, + json: true + }).then((response) => response.body); + } + acceptTrade(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}/accept`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + counterTrade(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}/counter`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + declineTrade(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/${options.tradeId}/decline`, + method: "POST" + }, + json: true + }).then((response) => response.body); + } + sendTrade(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/trades/send`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.default = TradesAPI; diff --git a/dist/client/apis/TranslationRolesAPI.d.ts b/dist/client/apis/TranslationRolesAPI.d.ts new file mode 100644 index 000000000..0605df1a6 --- /dev/null +++ b/dist/client/apis/TranslationRolesAPI.d.ts @@ -0,0 +1,47 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type TranslationRolesGetSelfGameRolesOptions = { + gameId: number; +}; +export declare type TranslationRolesGetSelfGameRoles = { + data: string[]; +}; +export declare type TranslationRolesGetGameRoleAssigneesOptions = { + gameId: number; + role: "translator"; +}; +export declare type TranslationRolesGetGameRoleAssignees = { + data: { + id: null; + name: string; + type: "user"; + }[]; +}; +export declare type TranslationRolesGetSelfGamesAccessByRoleOptions = { + role: "translator"; + exclusiveStartKey?: string; + pageSize?: number; +}; +export declare type TranslationRolesGetSelfGamesAccessByRole = { + games: { + gameId: number; + assignee: { + assigneeType: "user"; + id: number; + }; + }[]; +}; +export declare type TranslationRolesUpdateUserAccess = { + gameId: number; + userId: number; + role: "translator"; + revoke?: boolean; +}; +export declare type TranslationRolesUpdateUser = unknown; +export declare class TranslationRolesAPI extends BaseAPI { + constructor(client: Client); + getSelfGameRoles(options: TranslationRolesGetSelfGameRolesOptions): Promise; + getGameRoleAssignees(options: TranslationRolesGetGameRoleAssigneesOptions): Promise; + getSelfGamesAccessByRole(options: TranslationRolesGetSelfGamesAccessByRoleOptions): Promise; + updateUserAccess(options: TranslationRolesUpdateUserAccess): Promise; +} diff --git a/dist/client/apis/TranslationRolesAPI.js b/dist/client/apis/TranslationRolesAPI.js new file mode 100644 index 000000000..a955eecae --- /dev/null +++ b/dist/client/apis/TranslationRolesAPI.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TranslationRolesAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class TranslationRolesAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://translationroles.roblox.com/" + }); + } + getSelfGameRoles(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/games/${options.gameId}/current-user/roles` + }, + json: true + }).then((response) => response.body); + } + getGameRoleAssignees(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/games/${options.gameId}/roles/${options.role}/assignees` + }, + json: true + }).then((response) => response.body); + } + getSelfGamesAccessByRole(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/roles/${options.role}/current-user` + }, + json: true + }).then((response) => response.body); + } + updateUserAccess(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/game-localization-roles/games/${options.gameId}`, + method: "PATCH", + json: { + assigneeId: options.userId, + assigneeType: "user", + role: "translator", + revoke: options.revoke !== undefined ? options.revoke : false + } + }, + json: true + }).then((response) => response.body); + } +} +exports.TranslationRolesAPI = TranslationRolesAPI; diff --git a/dist/client/apis/TwoStepVerificationAPI.d.ts b/dist/client/apis/TwoStepVerificationAPI.d.ts new file mode 100644 index 000000000..c6b1c229c --- /dev/null +++ b/dist/client/apis/TwoStepVerificationAPI.d.ts @@ -0,0 +1,85 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type TwoStepVerificationGetMetaDataOptions = { + userId: number; + challengeId: string; + actionType: string; +}; +export declare type TwoStepVerificationGetMetaData = { + twoStepVerificationEnabled: boolean; + authenticatorEnabled: boolean; + authenticatorQrCodeSize: string; + emailCodeLength: number; + authenticatorCodeLength: number; +}; +export declare type TwoStepVerificationGetConfigurationOptions = TwoStepVerificationGetMetaDataOptions; +export declare type TwoStepVerificationGetConfiguration = { + primaryMediaType: "Email" | string; + methods: { + mediaType: "Email" | string; + enabled: boolean; + updated: string; + }[]; +}; +export declare type TwoStepVerificationAuthenticatorVerifyOptions = { + challengeId: string; + actionType: string; + code: string; +}; +export declare type TwoStepVerificationAuthenticatorVerify = { + verificationToken: string; +}; +export declare type TwoStepVerificationAuthenticatorDisableOptions = { + password: string; +}; +export declare type TwoStepVerificationAuthenticatorDisable = unknown; +export declare type TwoStepVerificationAuthenticatorEnableOptions = { + userId: number; +}; +export declare type TwoStepVerificationAuthenticatorEnable = { + setupToken: string; + qrCodeImageUrl: string; + manualEntryKey: string; +}; +export declare type TwoStepVerificationAuthenticatorVerifySetupOptions = { + setupToken: string; + code: string; +}; +export declare type TwoStepVerificationAuthenticatorVerifySetup = unknown; +export declare type TwoStepVerificationEmailSendCodeOptions = { + challengeId: string; + actionType: string; +}; +export declare type TwoStepVerificationEmailSendCode = { + challengeId: string; + actionType: string; +}; +export declare type TwoStepVerificationEmailVerifyOptions = { + challengeId: string; + actionType: string; + code: string; +}; +export declare type TwoStepVerificationEmailVerify = { + verificationToken: string; +}; +export declare type TwoStepVerificationEmailDisableOptions = { + password: string; +}; +export declare type TwoStepVerificationEmailDisable = unknown; +export declare type TwoStepVerificationEmailEnableOptions = { + userId: number; +}; +export declare type TwoStepVerificationEmailEnable = unknown; +export declare class TwoStepVerificationAPI extends BaseAPI { + constructor(client: Client); + getMetaData(options: TwoStepVerificationGetMetaDataOptions): Promise; + getConfiguration(options?: TwoStepVerificationGetConfigurationOptions): Promise; + verifyWithAuthenticator(options: TwoStepVerificationAuthenticatorVerifyOptions): Promise; + disableAuthenticator(options: TwoStepVerificationAuthenticatorDisableOptions): Promise; + enableAuthenticator(options: TwoStepVerificationAuthenticatorEnableOptions): Promise; + verifyAuthenticatorSetup(options: TwoStepVerificationAuthenticatorVerifySetupOptions): Promise; + sendEmailCode(options: TwoStepVerificationEmailSendCodeOptions): Promise; + verifyEmail(options: TwoStepVerificationEmailVerifyOptions): Promise; + disableEmail(options: TwoStepVerificationEmailDisableOptions): Promise; + enableEmail(options: TwoStepVerificationEmailEnableOptions): Promise; +} diff --git a/dist/client/apis/TwoStepVerificationAPI.js b/dist/client/apis/TwoStepVerificationAPI.js new file mode 100644 index 000000000..d32ea1c21 --- /dev/null +++ b/dist/client/apis/TwoStepVerificationAPI.js @@ -0,0 +1,120 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TwoStepVerificationAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class TwoStepVerificationAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://twostepverification.roblox.com/" + }); + } + getMetaData(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/metadata`, + qs: options + }, + json: true + }).then((response) => response.body); + } + getConfiguration(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/configuration`, + qs: options + }, + json: true + }).then((response) => response.body); + } + verifyWithAuthenticator(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/challenges/authenticator/verify`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + disableAuthenticator(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/configuration/authenticator/disable`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + enableAuthenticator(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/configuration/authenticator/enable`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + verifyAuthenticatorSetup(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/configuration/authenticator/disable`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + sendEmailCode(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/challenges/email/send-code`, + json: options + }, + json: true + }).then((response) => response.body); + } + verifyEmail(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/challenges/email/verify`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + disableEmail(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/configuration/email/disable`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + enableEmail(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${this.client.user.id}/configuration/email/enable`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } +} +exports.TwoStepVerificationAPI = TwoStepVerificationAPI; diff --git a/dist/client/apis/UsersAPI.d.ts b/dist/client/apis/UsersAPI.d.ts new file mode 100644 index 000000000..823d704d6 --- /dev/null +++ b/dist/client/apis/UsersAPI.d.ts @@ -0,0 +1,102 @@ +import { BaseAPI } from "./BaseAPI"; +import { Client } from "../Client"; +export declare type UsersValidateDisplayNameNewUserOptions = { + displayName: string; + birthdate: string; +}; +export declare type UsersValidateDisplayNameNewUser = unknown; +export declare type UsersValidateDisplayNameExistingUserOptions = { + userId: number; + displayName: string; +}; +export declare type UsersValidateDisplayNameExistingUser = unknown; +export declare type UsersSetSelfDisplayNameOptions = { + userId: number; + newDisplayName: string; +}; +export declare type UsersSetSelfDisplayName = unknown; +export declare type UsersGetUserByIdOptions = { + userId: number; +}; +export declare type UsersGetUserById = { + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; + displayName: string; + externalAppDisplayName: string; +}; +export declare type UsersGetSelfAuthenticatedUserInformation = { + id: number; + name: string; + displayName: string; +}; +export declare type UsersGetUsersByUsernamesOptions = { + usernames: string[]; + excludeBannedUsers?: boolean; +}; +export declare type UsersGetUsersByUsernames = { + data: { + requestedUsername: string; + id: number; + name: string; + displayName: string; + }[]; +}; +export declare type UsersGetUsersByUserIdsOptions = { + userIds: number[]; + excludeBannedUsers?: boolean; +}; +export declare type UsersGetUsersByUserIds = { + data: Omit[]; +}; +export declare type UsersGetUserStatusOptions = { + userId: number; +}; +export declare type UsersGetUserStatus = { + status: string; +}; +export declare type UsersUpdateSelfStatusOptions = { + userId: number; + status: string; +}; +export declare type UsersUpdateSelfStatus = { + status: string; +}; +export declare type UsersSearchUsersOptions = { + keyword: string; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type UsersSearchUsers = { + previousPageCursor: string; + nextPageCursor: string; + data: { + previousUsernames: string[]; + id: number; + name: string; + displayName: string; + }[]; +}; +export declare type UsersUserNameHistory = { + previousPageCursor: string; + nextPageCursor: string; + data: { + name: string; + }[]; +}; +export declare class UsersAPI extends BaseAPI { + constructor(client: Client); + validateDisplayNameNewUser(options: UsersValidateDisplayNameNewUserOptions): Promise; + validateDisplayNameExistingUser(options: UsersValidateDisplayNameExistingUserOptions): Promise; + setDisplayName(options: UsersSetSelfDisplayNameOptions): Promise; + getUserById(options: UsersGetUserByIdOptions): Promise; + getAuthenticatedUserInformation(): Promise; + getUsersByUsernames(options: UsersGetUsersByUsernamesOptions): Promise; + getUsersByIds(options: UsersGetUsersByUserIdsOptions): Promise; + getUserNameHistory(options: { + userId: number; + }): Promise; + searchUsers(options: UsersSearchUsersOptions): Promise; +} diff --git a/dist/client/apis/UsersAPI.js b/dist/client/apis/UsersAPI.js new file mode 100644 index 000000000..3ffe34e18 --- /dev/null +++ b/dist/client/apis/UsersAPI.js @@ -0,0 +1,105 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsersAPI = void 0; +const BaseAPI_1 = require("./BaseAPI"); +class UsersAPI extends BaseAPI_1.BaseAPI { + constructor(client) { + super({ + client, + baseUrl: "https://users.roblox.com/" + }); + } + validateDisplayNameNewUser(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/display-names/validate`, + qs: options + }, + json: true + }).then((response) => response.body); + } + validateDisplayNameExistingUser(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/display-names/validate`, + qs: options + }, + json: true + }).then((response) => response.body); + } + setDisplayName(options) { + return this.request({ + requiresAuth: true, + request: { + path: `v1/users/${options.userId}/display-names`, + method: "PATCH", + json: options + }, + json: true + }).then((response) => response.body); + } + getUserById(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}` + }, + json: true + }).then((response) => response.body); + } + getAuthenticatedUserInformation() { + return this.request({ + // This should actually be "true", but as it's needed in client.login, it's set to false + requiresAuth: false, + request: { + path: `v1/users/authenticated` + }, + json: true + }).then((response) => response.body); + } + getUsersByUsernames(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/usernames/users`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getUsersByIds(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users`, + method: "POST", + json: options + }, + json: true + }).then((response) => response.body); + } + getUserNameHistory(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/${options.userId}/username-history`, + method: "GET" + }, + json: true + }).then((response) => response.body); + } + searchUsers(options) { + return this.request({ + requiresAuth: false, + request: { + path: `v1/users/search`, + qs: options + }, + json: true + }).then((response) => response.body); + } +} +exports.UsersAPI = UsersAPI; diff --git a/dist/client/apis/index.d.ts b/dist/client/apis/index.d.ts new file mode 100644 index 000000000..fa11f9314 --- /dev/null +++ b/dist/client/apis/index.d.ts @@ -0,0 +1,79 @@ +import { Client } from "../Client"; +import { GeneralAPI } from "./GeneralAPI"; +import { AccountInformationAPI } from "./AccountInformationAPI"; +import { AccountSettingsAPI } from "./AccountSettingsAPI"; +import { AdConfigurationAPI } from "./AdConfigurationAPI"; +import { AssetDeliveryAPI } from "./AssetDeliveryAPI"; +import { AuthAPI } from "./AuthAPI"; +import { AvatarAPI } from "./AvatarAPI"; +import { BadgesAPI } from "./BadgesAPI"; +import { BillingAPI } from "./BillingAPI"; +import { CatalogAPI } from "./CatalogAPI"; +import { ChatAPI } from "./ChatAPI"; +import { ContactsAPI } from "./ContactsAPI"; +import { DevelopAPI } from "./DevelopAPI"; +import { EconomyAPI } from "./EconomyAPI"; +import { EconomyCreatorStatsAPI } from "./EconomyCreatorStatsAPI"; +import { EngagementPayoutsAPI } from "./EngagementPayoutsAPI"; +import { FollowingsAPI } from "./FollowingsAPI"; +import { FriendsAPI } from "./FriendsAPI"; +import { GamesAPI } from "./GamesAPI"; +import { GameInternationalizationAPI } from "./GameInternationalizationAPI"; +import { GroupsAPI } from "./GroupsAPI"; +import { InventoryAPI } from "./InventoryAPI"; +import { ItemConfigurationAPI } from "./ItemConfigurationAPI"; +import { LocaleAPI } from "./LocaleAPI"; +import { MetricsAPI } from "./MetricsAPI"; +import { NotificationsAPI } from "./NotificationsAPI"; +import { PremiumFeaturesAPI } from "./PremiumFeaturesAPI"; +import { PresenceAPI } from "./PresenceAPI"; +import { PrivateMessagesAPI } from "./PrivateMessagesAPI"; +import { PublishAPI } from "./PublishAPI"; +import { ThumbnailsAPI } from "./ThumbnailsAPI"; +import { TranslationRolesAPI } from "./TranslationRolesAPI"; +import { UsersAPI } from "./UsersAPI"; +import { OtherAPI } from "./OtherAPI"; +import { TwoStepVerificationAPI } from "./TwoStepVerificationAPI"; +import { DataAPI } from "./DataAPI"; +export declare type APIs = { + accountInformationAPI: AccountInformationAPI; + accountSettingsAPI: AccountSettingsAPI; + adConfigurationAPI: AdConfigurationAPI; + assetDeliveryAPI: AssetDeliveryAPI; + authAPI: AuthAPI; + avatarAPI: AvatarAPI; + badgesAPI: BadgesAPI; + billingAPI: BillingAPI; + catalogAPI: CatalogAPI; + chatAPI: ChatAPI; + contactsAPI: ContactsAPI; + dataAPI: DataAPI; + developAPI: DevelopAPI; + economyAPI: EconomyAPI; + economyCreatorStats: EconomyCreatorStatsAPI; + engagementPayouts: EngagementPayoutsAPI; + followingsAPI: FollowingsAPI; + friendsAPI: FriendsAPI; + gamesAPI: GamesAPI; + gameInternationalizationAPI: GameInternationalizationAPI; + groupsAPI: GroupsAPI; + inventoryAPI: InventoryAPI; + itemConfigurationAPI: ItemConfigurationAPI; + localeAPI: LocaleAPI; + metricsAPI: MetricsAPI; + notificationsAPI: NotificationsAPI; + otherAPI: OtherAPI; + premiumFeaturesAPI: PremiumFeaturesAPI; + presenceAPI: PresenceAPI; + privateMessagesAPI: PrivateMessagesAPI; + publishAPI: PublishAPI; + thumbnailsAPI: ThumbnailsAPI; + translationRolesAPI: TranslationRolesAPI; + usersAPI: UsersAPI; + generalApi: GeneralAPI; + twoStepVerification: TwoStepVerificationAPI; +}; +/** + * @hidden + */ +export declare function initAPIs(client: Client): APIs; diff --git a/dist/client/apis/index.js b/dist/client/apis/index.js new file mode 100644 index 000000000..08c0134ee --- /dev/null +++ b/dist/client/apis/index.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.initAPIs = void 0; +const GeneralAPI_1 = require("./GeneralAPI"); +const AccountInformationAPI_1 = require("./AccountInformationAPI"); +const AccountSettingsAPI_1 = require("./AccountSettingsAPI"); +const AdConfigurationAPI_1 = require("./AdConfigurationAPI"); +const AssetDeliveryAPI_1 = require("./AssetDeliveryAPI"); +const AuthAPI_1 = require("./AuthAPI"); +const AvatarAPI_1 = require("./AvatarAPI"); +const BadgesAPI_1 = require("./BadgesAPI"); +const BillingAPI_1 = require("./BillingAPI"); +const CatalogAPI_1 = require("./CatalogAPI"); +const ChatAPI_1 = require("./ChatAPI"); +const ContactsAPI_1 = require("./ContactsAPI"); +const DevelopAPI_1 = require("./DevelopAPI"); +const EconomyAPI_1 = require("./EconomyAPI"); +const EconomyCreatorStatsAPI_1 = require("./EconomyCreatorStatsAPI"); +const EngagementPayoutsAPI_1 = require("./EngagementPayoutsAPI"); +const FollowingsAPI_1 = require("./FollowingsAPI"); +const FriendsAPI_1 = require("./FriendsAPI"); +const GamesAPI_1 = require("./GamesAPI"); +const GameInternationalizationAPI_1 = require("./GameInternationalizationAPI"); +const GroupsAPI_1 = require("./GroupsAPI"); +const InventoryAPI_1 = require("./InventoryAPI"); +const ItemConfigurationAPI_1 = require("./ItemConfigurationAPI"); +const LocaleAPI_1 = require("./LocaleAPI"); +const MetricsAPI_1 = require("./MetricsAPI"); +const NotificationsAPI_1 = require("./NotificationsAPI"); +const PremiumFeaturesAPI_1 = require("./PremiumFeaturesAPI"); +const PresenceAPI_1 = require("./PresenceAPI"); +const PrivateMessagesAPI_1 = require("./PrivateMessagesAPI"); +const PublishAPI_1 = require("./PublishAPI"); +const ThumbnailsAPI_1 = require("./ThumbnailsAPI"); +const TranslationRolesAPI_1 = require("./TranslationRolesAPI"); +const UsersAPI_1 = require("./UsersAPI"); +const OtherAPI_1 = require("./OtherAPI"); +const TwoStepVerificationAPI_1 = require("./TwoStepVerificationAPI"); +const DataAPI_1 = require("./DataAPI"); +/** + * @hidden + */ +function initAPIs(client) { + return { + accountInformationAPI: new AccountInformationAPI_1.AccountInformationAPI(client), + accountSettingsAPI: new AccountSettingsAPI_1.AccountSettingsAPI(client), + adConfigurationAPI: new AdConfigurationAPI_1.AdConfigurationAPI(client), + assetDeliveryAPI: new AssetDeliveryAPI_1.AssetDeliveryAPI(client), + authAPI: new AuthAPI_1.AuthAPI(client), + avatarAPI: new AvatarAPI_1.AvatarAPI(client), + badgesAPI: new BadgesAPI_1.BadgesAPI(client), + billingAPI: new BillingAPI_1.BillingAPI(client), + catalogAPI: new CatalogAPI_1.CatalogAPI(client), + chatAPI: new ChatAPI_1.ChatAPI(client), + contactsAPI: new ContactsAPI_1.ContactsAPI(client), + dataAPI: new DataAPI_1.DataAPI(client), + developAPI: new DevelopAPI_1.DevelopAPI(client), + economyAPI: new EconomyAPI_1.EconomyAPI(client), + economyCreatorStats: new EconomyCreatorStatsAPI_1.EconomyCreatorStatsAPI(client), + engagementPayouts: new EngagementPayoutsAPI_1.EngagementPayoutsAPI(client), + followingsAPI: new FollowingsAPI_1.FollowingsAPI(client), + friendsAPI: new FriendsAPI_1.FriendsAPI(client), + gamesAPI: new GamesAPI_1.GamesAPI(client), + gameInternationalizationAPI: new GameInternationalizationAPI_1.GameInternationalizationAPI(client), + groupsAPI: new GroupsAPI_1.GroupsAPI(client), + inventoryAPI: new InventoryAPI_1.InventoryAPI(client), + itemConfigurationAPI: new ItemConfigurationAPI_1.ItemConfigurationAPI(client), + localeAPI: new LocaleAPI_1.LocaleAPI(client), + metricsAPI: new MetricsAPI_1.MetricsAPI(client), + generalApi: new GeneralAPI_1.GeneralAPI(client), + notificationsAPI: new NotificationsAPI_1.NotificationsAPI(client), + otherAPI: new OtherAPI_1.OtherAPI(client), + premiumFeaturesAPI: new PremiumFeaturesAPI_1.PremiumFeaturesAPI(client), + presenceAPI: new PresenceAPI_1.PresenceAPI(client), + privateMessagesAPI: new PrivateMessagesAPI_1.PrivateMessagesAPI(client), + publishAPI: new PublishAPI_1.PublishAPI(client), + thumbnailsAPI: new ThumbnailsAPI_1.ThumbnailsAPI(client), + translationRolesAPI: new TranslationRolesAPI_1.TranslationRolesAPI(client), + usersAPI: new UsersAPI_1.UsersAPI(client), + twoStepVerification: new TwoStepVerificationAPI_1.TwoStepVerificationAPI(client) + }; +} +exports.initAPIs = initAPIs; diff --git a/dist/client/index.d.ts b/dist/client/index.d.ts new file mode 100644 index 000000000..eb79981a6 --- /dev/null +++ b/dist/client/index.d.ts @@ -0,0 +1 @@ +export { Client } from "./Client"; diff --git a/dist/client/index.js b/dist/client/index.js new file mode 100644 index 000000000..55e5910ec --- /dev/null +++ b/dist/client/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Client = void 0; +var Client_1 = require("./Client"); +Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return Client_1.Client; } }); diff --git a/dist/client/lib/ChatManager/ChatManager.d.ts b/dist/client/lib/ChatManager/ChatManager.d.ts new file mode 100644 index 000000000..511b2c387 --- /dev/null +++ b/dist/client/lib/ChatManager/ChatManager.d.ts @@ -0,0 +1,27 @@ +import { Client } from "../../Client"; +import { ChatAddUsersToConversation, ChatGetChatSettings, ChatMarkConversationsSeen, ChatMarkConversationMessagesRead, ChatRemoveUserFromConversation, ChatRenameGroupConversation, ChatResetConversationUniverse, ChatSendGameLinkMessageOptions, ChatSendMessageOptions, ChatSetConversationUniverse, ChatStartCloudEditConversation, ChatStartGroupConversation, ChatStartOneToOneConversation, ChatUpdateUserTypingStatus } from "../../apis/ChatAPI"; +import { ChatConversation, ChatMessage, ChatMessageSent } from "../../../old_structures/Chat"; +export declare class ChatManager { + client: Client; + constructor(client: Client); + getSettings(): Promise; + getConversation(conversationId: number): Promise; + getConversationMessages(conversationId: number, amount?: number, startMessageId?: string): Promise; + getUnreadConversationsCount(): Promise; + getConversations(conversations: number[]): Promise; + addUsersToConversation(conversation: number, users: number[]): Promise; + markMessageRead(conversation: number, id: string): Promise; + markConversationsRead(conversations: number[]): Promise; + removeUserFromConversation(conversation: number, user: number): Promise; + renameGroupConversation(conversation: number, name: string): Promise; + getUnreadMessagesInConversations(conversations: number[], amount?: number): Promise; + getLatestMessagesInConversations(conversations: number[], amount?: number): Promise; + resetConversationUniverse(conversation: number): Promise; + sendGameLinkMessage(options: ChatSendGameLinkMessageOptions): Promise; + sendMessage(options: ChatSendMessageOptions): Promise; + setConversationUniverse(conversation: number, universe: number): Promise; + startCloudEditConversation(placeId: number): Promise; + startGroupConversation(title: string, users: number[]): Promise; + startOneToOneConversation(userId: number): Promise; + updateTypingStatus(conversation: number, isTyping?: boolean): Promise; +} diff --git a/dist/client/lib/ChatManager/ChatManager.js b/dist/client/lib/ChatManager/ChatManager.js new file mode 100644 index 000000000..4f91e192c --- /dev/null +++ b/dist/client/lib/ChatManager/ChatManager.js @@ -0,0 +1,125 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ChatManager = void 0; +const Chat_1 = require("../../../old_structures/Chat"); +class ChatManager { + constructor(client) { + this.client = client; + } + getSettings() { + return this.client.apis.chatAPI.getChatSettings(); + } + getConversation(conversationId) { + return this.getConversations([conversationId]).then((data) => data[0] || null); + } + getConversationMessages(conversationId, amount = 100, startMessageId) { + return this.client.apis.chatAPI + .getConversationMessages({ + conversationId, + pageSize: amount, + exclusiveStartMessageId: startMessageId + }) + .then((response) => response.map((chatData) => new Chat_1.ChatMessage(chatData, this.client))); + } + getUnreadConversationsCount() { + return this.client.apis.chatAPI + .getUnreadConversationCount() + .then((response) => response.count); + } + getConversations(conversations) { + return this.client.apis.chatAPI + .getConversations({ + conversationIds: conversations + }) + .then((response) => response.map((conversationData) => new Chat_1.ChatConversation(conversationData, this.client))); + } + addUsersToConversation(conversation, users) { + return this.client.apis.chatAPI.addUsersToConversation({ + conversationId: conversation, + participantUserIds: users + }); + } + markMessageRead(conversation, id) { + return this.client.apis.chatAPI.markConversationMessagesRead({ + conversationId: conversation, + endMessageId: id + }); + } + markConversationsRead(conversations) { + return this.client.apis.chatAPI.markConversationsSeen({ + conversationsToMarkSeen: conversations + }); + } + removeUserFromConversation(conversation, user) { + return this.client.apis.chatAPI.removeUserFromConversation({ + conversationId: conversation, + participantUserId: user + }); + } + renameGroupConversation(conversation, name) { + return this.client.apis.chatAPI.renameGroupConversation({ + conversationId: conversation, + newTitle: name + }); + } + getUnreadMessagesInConversations(conversations, amount = 100) { + return this.client.apis.chatAPI + .getUnreadMessagesInConversations({ + conversationIds: conversations, + pageSize: amount + }) + .then((response) => Array.prototype.concat.apply([], response.map((conversationData) => conversationData.chatMessages.map((chatData) => new Chat_1.ChatMessage(chatData, this.client))))); + } + getLatestMessagesInConversations(conversations, amount = 100) { + return this.client.apis.chatAPI + .getMultiLatestConversationMessages({ + conversationIds: conversations, + pageSize: amount + }) + .then((response) => Array.prototype.concat.apply([], response.map((conversationData) => conversationData.chatMessages.map((chatData) => new Chat_1.ChatMessage(chatData, this.client))))); + } + resetConversationUniverse(conversation) { + return this.client.apis.chatAPI.resetConversationUniverse({ + conversationId: conversation + }); + } + sendGameLinkMessage(options) { + return this.client.apis.chatAPI + .sendGameLinkMessage(options) + .then((response) => new Chat_1.ChatMessageSent(response, this.client)); + } + sendMessage(options) { + return this.client.apis.chatAPI + .sendMessage(options) + .then((response) => new Chat_1.ChatMessageSent(response, this.client)); + } + setConversationUniverse(conversation, universe) { + return this.client.apis.chatAPI.setConversationUniverse({ + conversationId: conversation, + universeId: universe + }); + } + startCloudEditConversation(placeId) { + return this.client.apis.chatAPI.startCloudEditConversation({ + placeId + }); + } + startGroupConversation(title, users) { + return this.client.apis.chatAPI.startGroupConversation({ + participantUserIds: users, + title + }); + } + startOneToOneConversation(userId) { + return this.client.apis.chatAPI.startOneToOneConversation({ + participantUserId: userId + }); + } + updateTypingStatus(conversation, isTyping = true) { + return this.client.apis.chatAPI.updateUserTypingStatus({ + conversationId: conversation, + isTyping + }); + } +} +exports.ChatManager = ChatManager; diff --git a/dist/client/lib/ChatManager/index.d.ts b/dist/client/lib/ChatManager/index.d.ts new file mode 100644 index 000000000..f39bc233e --- /dev/null +++ b/dist/client/lib/ChatManager/index.d.ts @@ -0,0 +1 @@ +export * from "./ChatManager"; diff --git a/dist/client/lib/ChatManager/index.js b/dist/client/lib/ChatManager/index.js new file mode 100644 index 000000000..ded55471d --- /dev/null +++ b/dist/client/lib/ChatManager/index.js @@ -0,0 +1,4 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +(0, tslib_1.__exportStar)(require("./ChatManager"), exports); diff --git a/dist/client/lib/ClientSocket/ClientSocket.d.ts b/dist/client/lib/ClientSocket/ClientSocket.d.ts new file mode 100644 index 000000000..fe4fb976a --- /dev/null +++ b/dist/client/lib/ClientSocket/ClientSocket.d.ts @@ -0,0 +1,61 @@ +/// +import { Client } from "../../Client"; +import { EventEmitter } from "events"; +import { PartialChatConversation } from "../../../old_structures/Chat"; +import { PartialUser } from "../../../old_structures/User"; +export declare interface Socket extends EventEmitter { + on(event: "chatMessageSent", listener: (data: { + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatUserTyping", listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatUserTypingStopped", listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatMessage", listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatMessageSent", listener: (data: { + user: PartialUser; + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatConversationAdded", listener: (data: { + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatConversationRemoved", listener: (data: { + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatMemberAdded", listener: (data: { + conversation: PartialChatConversation; + }) => void): this; + on(event: "chatMemberLeft", listener: (data: { + conversation: PartialChatConversation; + }) => void): this; + on(event: "friendLost", listener: (data: { + user: PartialUser; + }) => void): this; + on(event: "friendRequest", listener: (data: { + user: PartialUser; + }) => void): this; + on(event: "friendAdded", listener: (data: { + user: PartialUser; + }) => void): this; + on(event: "userPresenceChanged", listener: (data: { + user: PartialUser; + }) => void): this; +} +export declare class Socket extends EventEmitter { + client: Client; + socket: any; + connected: boolean; + constructor(client: Client); + connect(): Promise; + /** + * This is called after the connection of the socket has successfully been established + */ + init(): void; +} diff --git a/dist/client/lib/ClientSocket/ClientSocket.js b/dist/client/lib/ClientSocket/ClientSocket.js new file mode 100644 index 000000000..08494ab67 --- /dev/null +++ b/dist/client/lib/ClientSocket/ClientSocket.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Socket = void 0; +const tslib_1 = require("tslib"); +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +const SignalR = (0, tslib_1.__importStar)(require("signalr-client")); +const handlers_1 = (0, tslib_1.__importDefault)(require("./handlers")); +const events_1 = require("events"); +class Socket extends events_1.EventEmitter { + constructor(client) { + super(); + this.client = client; + this.socket = null; + this.connected = false; + } + connect() { + return new Promise((resolve, reject) => { + const connectSocket = (retries = 0) => { + var _a, _b, _c; + this.socket = new SignalR.client("wss://realtime.roblox.com/notifications", ["usernotificationhub"], 3, true); + this.socket.headers.Cookie = + this.client.rest.cookieJar.getCookieStringSync("https://roblox.com"); + const maxRetries = (_c = (_b = (_a = this.client.options.setup) === null || _a === void 0 ? void 0 : _a.websocket) === null || _b === void 0 ? void 0 : _b.maxRetries) !== null && _c !== void 0 ? _c : 3; + const attemptReconnect = () => connectSocket(++retries); + const onError = (error) => { + this.emit("error", error); + attemptReconnect(); + }; + if (retries >= maxRetries) { + this.socket.close(); + reject(new Error(`Connection failed, attempted to establish a connection ${retries} times`)); + } + this.socket.serviceHandlers.connectFailed = (error) => onError(error); + this.socket.serviceHandlers.onerror = (error) => onError(error); + this.socket.serviceHandlers.connected = () => { + this.emit("ready"); + this.init(); + resolve(); + }; + this.socket.serviceHandlers.reconnecting = () => { + this.emit("reconnecting"); + }; + // Start the attempt of connection + this.socket.start(); + }; + connectSocket(); + }); + } + /** + * This is called after the connection of the socket has successfully been established + */ + init() { + this.socket.on("UserNotificationHub", "notification", (name, message) => { + this.emit("event", { + name, + message + }); + const parsedMessage = !(message instanceof Object) + ? JSON.parse(message) + : message; + const messageType = parsedMessage.Type + ? parsedMessage.Type.toLowerCase() + : null; + const socketHandler = handlers_1.default.get(name.toLowerCase()); + if (socketHandler) { + return socketHandler(this, messageType, parsedMessage); + } + }); + } +} +exports.Socket = Socket; diff --git a/dist/client/lib/ClientSocket/handlers/chatNotifications.d.ts b/dist/client/lib/ClientSocket/handlers/chatNotifications.d.ts new file mode 100644 index 000000000..b1eadb2b2 --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/chatNotifications.d.ts @@ -0,0 +1,2 @@ +import * as ClientSocket from "../ClientSocket"; +export default function handleChatNotifications(socket: ClientSocket.Socket, messageType: string, message: any): void; diff --git a/dist/client/lib/ClientSocket/handlers/chatNotifications.js b/dist/client/lib/ClientSocket/handlers/chatNotifications.js new file mode 100644 index 000000000..b1d6498ec --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/chatNotifications.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const Chat_1 = require("../../../../old_structures/Chat"); +const User_1 = require("../../../../old_structures/User"); +function handleChatNotifications(socket, messageType, message) { + switch (messageType) { + case "participanttyping": + socket.emit(message.IsTyping ? "chatUserTyping" : "chatUserTypingStopped", { + user: new User_1.PartialUser({ + id: message.UserId + }, socket.client), + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + case "newmessage": + socket.emit("chatMessage", { + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + case "newmessagebyself": + socket.emit("chatMessageSent", { + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + case "newconversation": + socket.emit("chatConversationAdded", { + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + case "conversationremoved": + socket.emit("chatConversationRemoved", { + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + case "participantadded": + socket.emit("chatMemberAdded", { + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + case "participantlefet": + socket.emit("chatMemberLeft", { + conversation: new Chat_1.PartialChatConversation({ + id: message.ConversationId + }, socket.client) + }); + break; + default: + break; + } +} +exports.default = handleChatNotifications; diff --git a/dist/client/lib/ClientSocket/handlers/friendShipnotifications.d.ts b/dist/client/lib/ClientSocket/handlers/friendShipnotifications.d.ts new file mode 100644 index 000000000..593bdfd4e --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/friendShipnotifications.d.ts @@ -0,0 +1,2 @@ +import * as ClientSocket from "../ClientSocket"; +export default function handleFriendshipNotifications(socket: ClientSocket.Socket, messageType: string, message: any): void; diff --git a/dist/client/lib/ClientSocket/handlers/friendShipnotifications.js b/dist/client/lib/ClientSocket/handlers/friendShipnotifications.js new file mode 100644 index 000000000..2138f745d --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/friendShipnotifications.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const User_1 = require("../../../../old_structures/User"); +function handleFriendshipNotifications(socket, messageType, message) { + switch (messageType) { + case "friendshipdestroyed": + socket.emit("friendLost", { + user: new User_1.PartialUser({ + id: [message.UserId1, message.UserId2].filter((id) => id !== socket.client.user.id)[0] + }, socket.client) + }); + break; + case "friendshiprequested": + socket.emit("friendRequest", { + user: new User_1.PartialUser({ + id: message.UserId1 + }, socket.client) + }); + break; + case "friendshipcreated": + socket.emit("friendAdded", { + user: new User_1.PartialUser({ + id: message.UserId1 + }, socket.client) + }); + break; + default: + break; + } +} +exports.default = handleFriendshipNotifications; diff --git a/dist/client/lib/ClientSocket/handlers/index.d.ts b/dist/client/lib/ClientSocket/handlers/index.d.ts new file mode 100644 index 000000000..6a0d04ab6 --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/index.d.ts @@ -0,0 +1,3 @@ +import { Socket as ClientSocket } from "../ClientSocket"; +declare const handlersMap: Map void>; +export default handlersMap; diff --git a/dist/client/lib/ClientSocket/handlers/index.js b/dist/client/lib/ClientSocket/handlers/index.js new file mode 100644 index 000000000..708452e22 --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/index.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const chatNotifications_1 = (0, tslib_1.__importDefault)(require("./chatNotifications")); +const friendShipnotifications_1 = (0, tslib_1.__importDefault)(require("./friendShipnotifications")); +const messageNotifications_1 = (0, tslib_1.__importDefault)(require("./messageNotifications")); +const presenceBulkNotifications_1 = (0, tslib_1.__importDefault)(require("./presenceBulkNotifications")); +const handlersMap = new Map(); +handlersMap.set("chatnotifications", chatNotifications_1.default); +handlersMap.set("friendshipnotifications", friendShipnotifications_1.default); +handlersMap.set("messagenotifications", messageNotifications_1.default); +handlersMap.set("presencebulknotifications", presenceBulkNotifications_1.default); +exports.default = handlersMap; diff --git a/dist/client/lib/ClientSocket/handlers/messageNotifications.d.ts b/dist/client/lib/ClientSocket/handlers/messageNotifications.d.ts new file mode 100644 index 000000000..01109eada --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/messageNotifications.d.ts @@ -0,0 +1,2 @@ +import { Socket as ClientSocket } from "../ClientSocket"; +export default function handleChatNotifications(socket: ClientSocket, messageType: string, message: any): void; diff --git a/dist/client/lib/ClientSocket/handlers/messageNotifications.js b/dist/client/lib/ClientSocket/handlers/messageNotifications.js new file mode 100644 index 000000000..10c69c03b --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/messageNotifications.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function handleChatNotifications(socket, messageType, message) { + switch (messageType) { + case "created": + socket.emit("message", { + messageId: message.MessageId + }); + break; + case "markasread": + socket.emit("messageRead", { + messageId: message.MessageId + }); + break; + case "markasunread": + socket.emit("messageUnread", { + messageId: message.MessageId + }); + break; + case "archived": + socket.emit("messageArchived", { + messageId: message.MessageId + }); + break; + case "unarchived": + socket.emit("messageUnarchived", { + messageId: message.MessageId + }); + break; + default: + break; + } +} +exports.default = handleChatNotifications; diff --git a/dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.d.ts b/dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.d.ts new file mode 100644 index 000000000..b23fd5984 --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.d.ts @@ -0,0 +1,2 @@ +import { Socket as ClientSocket } from "../ClientSocket"; +export default function handlePresenceBulkNotifications(socket: ClientSocket, _messageType: string, message: any): void; diff --git a/dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.js b/dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.js new file mode 100644 index 000000000..d96ca86b9 --- /dev/null +++ b/dist/client/lib/ClientSocket/handlers/presenceBulkNotifications.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const User_1 = require("../../../../old_structures/User"); +function handlePresenceBulkNotifications(socket, _messageType, message) { + if (!Array.isArray(message)) { + throw new Error("Presence bulk notification message was not an array"); + } + message.forEach((presenceUpdated) => { + socket.emit("userPresenceChanged", new User_1.PartialUser({ + id: presenceUpdated.UserId + }, socket.client)); + }); +} +exports.default = handlePresenceBulkNotifications; diff --git a/dist/client/lib/ClientSocket/index.d.ts b/dist/client/lib/ClientSocket/index.d.ts new file mode 100644 index 000000000..8edceb2b7 --- /dev/null +++ b/dist/client/lib/ClientSocket/index.d.ts @@ -0,0 +1 @@ +export * from "./ClientSocket"; diff --git a/dist/client/lib/ClientSocket/index.js b/dist/client/lib/ClientSocket/index.js new file mode 100644 index 000000000..f3f0a4dda --- /dev/null +++ b/dist/client/lib/ClientSocket/index.js @@ -0,0 +1,4 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +(0, tslib_1.__exportStar)(require("./ClientSocket"), exports); diff --git a/dist/client/lib/DataStoreManager/DataStoreManager.d.ts b/dist/client/lib/DataStoreManager/DataStoreManager.d.ts new file mode 100644 index 000000000..e267addce --- /dev/null +++ b/dist/client/lib/DataStoreManager/DataStoreManager.d.ts @@ -0,0 +1,9 @@ +import { Client } from "../../Client"; +import { OrderedDataStore } from "./structures/OrderedDataStore"; +import { GlobalDataStore } from "./structures/GlobalDataStore"; +export declare class DataStoreManager { + client: Client; + constructor(client: Client); + getOrderedDataStore(placeId: number, name: string, scope?: string): OrderedDataStore; + getDataStore(placeId: number, name: string, scope?: string): GlobalDataStore; +} diff --git a/dist/client/lib/DataStoreManager/DataStoreManager.js b/dist/client/lib/DataStoreManager/DataStoreManager.js new file mode 100644 index 000000000..487d6750f --- /dev/null +++ b/dist/client/lib/DataStoreManager/DataStoreManager.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataStoreManager = void 0; +const OrderedDataStore_1 = require("./structures/OrderedDataStore"); +const GlobalDataStore_1 = require("./structures/GlobalDataStore"); +class DataStoreManager { + constructor(client) { + this.client = client; + } + getOrderedDataStore(placeId, name, scope) { + if (!this.client.isLoggedIn()) { + throw new Error(`You must be logged in to be able to use data stores!`); + } + return new OrderedDataStore_1.OrderedDataStore(this, placeId, name, scope, false); + } + getDataStore(placeId, name, scope) { + if (!this.client.isLoggedIn()) { + throw new Error(`You must be logged in to be able to use data stores!`); + } + return new GlobalDataStore_1.GlobalDataStore(this, placeId, name, scope, false); + } +} +exports.DataStoreManager = DataStoreManager; diff --git a/dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.d.ts b/dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.d.ts new file mode 100644 index 000000000..3adb4bc22 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.d.ts @@ -0,0 +1,15 @@ +import { DataStoreManager } from "../DataStoreManager"; +import { RESTRequestOptions, RESTResponseDataType } from "../../../../interfaces/RESTInterfaces"; +import { DataStoreRequestType } from "../util/constants"; +declare type DataStoreHttpRequestOptions = RESTRequestOptions & { + placeId: number; + requestType: DataStoreRequestType; + data: string; +}; +export declare class DataStoreHttpRequest { + initiator: DataStoreManager; + options: DataStoreHttpRequestOptions; + constructor(manager: DataStoreManager, options: DataStoreHttpRequestOptions); + send(): Promise; +} +export {}; diff --git a/dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.js b/dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.js new file mode 100644 index 000000000..ce2f1cf36 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/DataStoreHttpRequest.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataStoreHttpRequest = void 0; +class DataStoreHttpRequest { + constructor(manager, options) { + this.initiator = manager; + this.options = options; + // Adjusting the body + this.options.body = + this.options.data.length === 0 ? " " : this.options.data; + // Always POST + this.options.method = this.options.method || "POST"; + this.options.headers = this.options.headers || {}; + this.options.headers = Object.assign(Object.assign({}, this.options.headers), { "Cache-Control": "no-cache", "Content-Type": "application/x-www-form-urlencoded", "Roblox-Place-Id": this.options.placeId, Cookie: this.initiator.client.rest.getCookies("https://www.roblox.com/") }); + } + send() { + return this.initiator.client.rest.request(this.options); + } +} +exports.DataStoreHttpRequest = DataStoreHttpRequest; diff --git a/dist/client/lib/DataStoreManager/structures/GenericDataStore.d.ts b/dist/client/lib/DataStoreManager/structures/GenericDataStore.d.ts new file mode 100644 index 000000000..5ec6174b4 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/GenericDataStore.d.ts @@ -0,0 +1,76 @@ +import { DataStoreManager } from "../DataStoreManager"; +import { RESTResponseDataType } from "../../../../interfaces/RESTInterfaces"; +declare type DataStoreType = "OrderedDataStore" | "GlobalDataStore"; +export declare class GenericDataStore { + manager: DataStoreManager; + name: string; + scope: string; + legacy: boolean; + baseAPIUrl: string; + placeId: number; + dataStoreType: DataStoreType; + advanced: { + parseData?: (data: string) => DataType; + serializeData?: (data: DataType) => string; + }; + constructor(manager: DataStoreManager, dataStoreType: DataStoreType, placeId: number, name: string, scope: string | null, legacy?: boolean); + /** + * When data is retrieved from data stores, it will be returned unmodified + * Using your own data converter will allow you to return it if you handle your data in a special way, such as + * JSON parsing it etc. + * @param {(data: string) => DataType} parseDataFunction + * @param {(data: DataType) => string} serializeDataFunction + */ + setDataConverters(parseDataFunction: (data: string) => DataType, serializeDataFunction: (data: DataType) => string): void; + buildPostDataForKey(key: string, index?: number): string; + buildGetUrl(): string; + buildSetUrl(key: string, valueLength: number): string; + buildSetIfUrl(key: string, valueLength: number, expectedValueLength: number): string; + buildIncrementUrl(key: string, delta: number): string; + buildRemoveUrl(key: string): string; + parseRetrievedData(data: string): [boolean, Result | any]; + /** + * Retrieves the value associated with the key (if any), otherwise returns null. + * Equivalent of DataStoreService:GetDataStore("name"):GetAsync("key"); + * @param {string} key + * @returns {Promise} + */ + getAsync(key: string): Promise; + /** + * Sets a value in data stores to the given key. + * Equivalent of DataStoreService:GetDataStore("name"):SetAsync("key", "value") + * @param {string} key + * @param {DataType} value + * @returns {Promise} + */ + setAsync(key: string, value: DataType): Promise; + incrementAsync(key: string, delta?: number): Promise; + removeAsync(key: string): Promise; + createQueryString(addition: Record): string; + /** + * This will (possibly) use a custom provided converter function that turns string into DataType. + * @param {string} data + * @returns {DataType} + * @private + */ + parseIncomingData(data: string): DataType; + /** + * This will (possibly) use a custom provided converter function that turns DataType into string so it can be saved + * to data stores + * @param {DataType} data + * @returns {string} + * @private + */ + serializeOutgoingData(data: DataType): string; + safeEncodeValue(input: string): string; + /** + * Performs various checks before sending any requests to make sure the requests are valid before sent + * @param {{key?: string, value?: DataType}} options + * @private + */ + performPreflightChecks(options: { + key?: string; + value?: string; + }): void; +} +export {}; diff --git a/dist/client/lib/DataStoreManager/structures/GenericDataStore.js b/dist/client/lib/DataStoreManager/structures/GenericDataStore.js new file mode 100644 index 000000000..560af0581 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/GenericDataStore.js @@ -0,0 +1,249 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericDataStore = void 0; +const tslib_1 = require("tslib"); +const querystring = (0, tslib_1.__importStar)(require("querystring")); +const DataStoreHttpRequest_1 = require("./DataStoreHttpRequest"); +const constants_1 = require("../util/constants"); +const checks_1 = require("../util/checks"); +class GenericDataStore { + constructor(manager, dataStoreType, placeId, name, scope, legacy = false) { + this.manager = manager; + this.dataStoreType = dataStoreType; + this.placeId = placeId; + this.name = name; + this.scope = scope || "global"; + this.legacy = legacy; + this.baseAPIUrl = "https://gamepersistence.roblox.com/persistence/"; + this.advanced = {}; + // Making sure we started off properly by checking all the set values + this.performPreflightChecks({}); + } + /** + * When data is retrieved from data stores, it will be returned unmodified + * Using your own data converter will allow you to return it if you handle your data in a special way, such as + * JSON parsing it etc. + * @param {(data: string) => DataType} parseDataFunction + * @param {(data: DataType) => string} serializeDataFunction + */ + setDataConverters(parseDataFunction, serializeDataFunction) { + this.advanced.parseData = parseDataFunction; + this.advanced.serializeData = serializeDataFunction; + } + buildPostDataForKey(key, index = 0) { + const encodedQueryString = querystring.encode({ + [`qkeys[${index}].scope`]: this.scope + ? this.safeEncodeValue(this.scope) + : "", + [`qkeys[${index}].target`]: this.legacy ? "" : this.safeEncodeValue(key), + [`qkeys[${index}].key`]: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name) + }); + return `&${encodedQueryString}`; + } + buildGetUrl() { + const encodedQueryString = this.createQueryString({}); + return `${this.baseAPIUrl}getV2?${encodedQueryString}`; + } + buildSetUrl(key, valueLength) { + const encodedQueryString = this.createQueryString({ + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key), + valueLength + }); + return `${this.baseAPIUrl}set?${encodedQueryString}`; + } + buildSetIfUrl(key, valueLength, expectedValueLength) { + const encodedQueryString = this.createQueryString({ + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key), + valueLength, + expectedValueLength + }); + return `${this.baseAPIUrl}set?${encodedQueryString}`; + } + buildIncrementUrl(key, delta) { + const encodedQueryString = this.createQueryString({ + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key), + value: delta + }); + return `${this.baseAPIUrl}increment?${encodedQueryString}`; + } + buildRemoveUrl(key) { + const encodedQueryString = this.createQueryString({ + key: this.legacy + ? this.safeEncodeValue(key) + : this.safeEncodeValue(this.name), + target: this.legacy ? "" : this.safeEncodeValue(key) + }); + return `${this.baseAPIUrl}increment?${encodedQueryString}`; + } + parseRetrievedData(data) { + let result = ""; + if (data.length === 0) { + return [true, result]; + } + try { + result = JSON.parse(data); + } + catch (_a) { + return [false, result]; + } + return [true, result]; + } + /** + * Retrieves the value associated with the key (if any), otherwise returns null. + * Equivalent of DataStoreService:GetDataStore("name"):GetAsync("key"); + * @param {string} key + * @returns {Promise} + */ + getAsync(key) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + this.performPreflightChecks({ + key + }); + const createdRequest = new DataStoreHttpRequest_1.DataStoreHttpRequest(this.manager, { + url: this.buildGetUrl(), + placeId: this.placeId, + data: this.buildPostDataForKey(key), + requestType: constants_1.DataStoreRequestType.GET_ASYNC + }); + const response = yield createdRequest.send(); + const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData(response.body); + if (!parsedResponseSuccess || !parsedResponse) { + throw new Error(`Failed to parse response from data stores!`); + } + if (parsedResponse.data && parsedResponse.data.length > 0) { + // Sending the returned data for internal processing + return this.parseIncomingData(parsedResponse.data[0].Value); + } + else { + return null; + } + }); + } + /** + * Sets a value in data stores to the given key. + * Equivalent of DataStoreService:GetDataStore("name"):SetAsync("key", "value") + * @param {string} key + * @param {DataType} value + * @returns {Promise} + */ + setAsync(key, value) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + const serializedValue = this.serializeOutgoingData(value); + this.performPreflightChecks({ + key, + value: serializedValue + }); + const createdRequest = new DataStoreHttpRequest_1.DataStoreHttpRequest(this.manager, { + url: this.buildSetUrl(key, serializedValue.length), + placeId: this.placeId, + data: `value=${this.safeEncodeValue(serializedValue)}`, + requestType: constants_1.DataStoreRequestType.SET_ASYNC + }); + const response = yield createdRequest.send(); + const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData(response.body); + if (!parsedResponseSuccess || !parsedResponse) { + throw new Error(`Failed to parse response!`); + } + return this.parseIncomingData(parsedResponse.data); + }); + } + incrementAsync(key, delta = 1) { + this.performPreflightChecks({ + key + }); + const createdRequest = new DataStoreHttpRequest_1.DataStoreHttpRequest(this.manager, { + url: this.buildIncrementUrl(key, delta), + placeId: this.placeId, + data: "", + requestType: constants_1.DataStoreRequestType.INCREMENT_ASYNC + }); + return createdRequest.send(); + } + removeAsync(key) { + this.performPreflightChecks({ + key + }); + const createdRequest = new DataStoreHttpRequest_1.DataStoreHttpRequest(this.manager, { + url: this.buildRemoveUrl(key), + placeId: this.placeId, + data: "", + requestType: constants_1.DataStoreRequestType.SET_ASYNC + }); + return createdRequest.send(); + } + createQueryString(addition) { + return querystring.encode(Object.assign({ placeId: this.placeId, type: this.dataStoreType === "GlobalDataStore" ? "standard" : "sorted", scope: this.safeEncodeValue(this.scope) }, addition)); + } + /** + * This will (possibly) use a custom provided converter function that turns string into DataType. + * @param {string} data + * @returns {DataType} + * @private + */ + parseIncomingData(data) { + if (this.advanced.parseData) { + return this.advanced.parseData(data); + } + else { + return data; + } + } + /** + * This will (possibly) use a custom provided converter function that turns DataType into string so it can be saved + * to data stores + * @param {DataType} data + * @returns {string} + * @private + */ + serializeOutgoingData(data) { + let serializedStage1 = ""; + if (this.advanced.serializeData) { + serializedStage1 = this.advanced.serializeData(data); + } + else { + serializedStage1 = data; + } + let serializedFinal = ""; + try { + serializedFinal = JSON.stringify(serializedStage1); + } + catch (_a) { + serializedFinal = null; + } + if (!serializedFinal) { + throw new Error(`Failed to serialize the data using JSON.stringify`); + } + return serializedFinal; + } + safeEncodeValue(input) { + return encodeURIComponent(input); + } + /** + * Performs various checks before sending any requests to make sure the requests are valid before sent + * @param {{key?: string, value?: DataType}} options + * @private + */ + performPreflightChecks(options) { + (0, checks_1.checkScope)(this.scope); + (0, checks_1.checkName)(this.name); + (0, checks_1.checkPlaceId)(this.placeId); + if (options.key !== undefined) { + (0, checks_1.checkKey)(options.key); + } + if (options.value !== undefined) { + (0, checks_1.checkValue)(options.value); + } + } +} +exports.GenericDataStore = GenericDataStore; diff --git a/dist/client/lib/DataStoreManager/structures/GlobalDataStore.d.ts b/dist/client/lib/DataStoreManager/structures/GlobalDataStore.d.ts new file mode 100644 index 000000000..509402115 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/GlobalDataStore.d.ts @@ -0,0 +1,5 @@ +import { GenericDataStore } from "./GenericDataStore"; +import { DataStoreManager } from "../DataStoreManager"; +export declare class GlobalDataStore extends GenericDataStore { + constructor(manager: DataStoreManager, placeId: number, name: string, scope?: string, legacy?: boolean); +} diff --git a/dist/client/lib/DataStoreManager/structures/GlobalDataStore.js b/dist/client/lib/DataStoreManager/structures/GlobalDataStore.js new file mode 100644 index 000000000..59ac14164 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/GlobalDataStore.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GlobalDataStore = void 0; +const GenericDataStore_1 = require("./GenericDataStore"); +class GlobalDataStore extends GenericDataStore_1.GenericDataStore { + constructor(manager, placeId, name, scope, legacy) { + super(manager, "GlobalDataStore", placeId, name, scope || null, legacy || false); + } +} +exports.GlobalDataStore = GlobalDataStore; diff --git a/dist/client/lib/DataStoreManager/structures/OrderedDataStore.d.ts b/dist/client/lib/DataStoreManager/structures/OrderedDataStore.d.ts new file mode 100644 index 000000000..51c2e0b3e --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/OrderedDataStore.d.ts @@ -0,0 +1,24 @@ +import { GenericDataStore } from "./GenericDataStore"; +import { DataStoreManager } from "../DataStoreManager"; +import { OrderedDataStorePage } from "./OrderedDataStorePage"; +export declare type GetSortedUrlOptions = { + ascending?: boolean; + pageSize?: number; + minValue?: number; + maxValue?: number; + startKey?: string; +}; +export declare type OrderedDataStoreResultType = { + data: { + Entries: { + Target: string; + Value: number; + }[]; + ExclusiveStartKey: string | null; + }; +}; +export declare class OrderedDataStore extends GenericDataStore { + constructor(manager: DataStoreManager, placeId: number, name: string, scope?: string, legacy?: boolean); + getSortedAsync(options: GetSortedUrlOptions): Promise>; + private buildGetSortedUrl; +} diff --git a/dist/client/lib/DataStoreManager/structures/OrderedDataStore.js b/dist/client/lib/DataStoreManager/structures/OrderedDataStore.js new file mode 100644 index 000000000..f6f7400c7 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/OrderedDataStore.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrderedDataStore = void 0; +const tslib_1 = require("tslib"); +const GenericDataStore_1 = require("./GenericDataStore"); +const DataStoreHttpRequest_1 = require("./DataStoreHttpRequest"); +const constants_1 = require("../util/constants"); +const OrderedDataStorePage_1 = require("./OrderedDataStorePage"); +class OrderedDataStore extends GenericDataStore_1.GenericDataStore { + constructor(manager, placeId, name, scope, legacy) { + super(manager, "OrderedDataStore", placeId, name, scope || null, legacy || false); + } + getSortedAsync(options) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + this.performPreflightChecks({}); + const createdRequest = new DataStoreHttpRequest_1.DataStoreHttpRequest(this.manager, { + url: this.buildGetSortedUrl(options), + placeId: this.placeId, + data: "", + requestType: constants_1.DataStoreRequestType.GET_SORTED_ASYNC_PAGE + }); + const response = yield createdRequest.send(); + const [parsedResponseSuccess, parsedResponse] = this.parseRetrievedData(response.body); + if (!parsedResponseSuccess) { + throw new Error(`Failed to parse response!`); + } + return new OrderedDataStorePage_1.OrderedDataStorePage(this, { + options, + result: parsedResponse + }); + }); + } + buildGetSortedUrl(options) { + const encodedQueryString = this.createQueryString({ + key: this.safeEncodeValue(this.name), + pageSize: options.pageSize || + constants_1.DataStoreManagerConstants.DFInt.DataStoreMaxPageSize, + ascending: options.ascending ? "True" : "False", + inclusiveMinValue: options.minValue, + inclusiveMaxValue: options.maxValue, + exclusiveStartKey: options.startKey + }); + return `${this.baseAPIUrl}getSortedValues?${encodedQueryString}`; + } +} +exports.OrderedDataStore = OrderedDataStore; diff --git a/dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.d.ts b/dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.d.ts new file mode 100644 index 000000000..470aeb1cf --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.d.ts @@ -0,0 +1,15 @@ +import { OrderedDataStore, GetSortedUrlOptions, OrderedDataStoreResultType } from "./OrderedDataStore"; +export declare class OrderedDataStorePage { + orderedDataStore: OrderedDataStore; + options: GetSortedUrlOptions; + data: { + key: string; + value: number; + }[]; + startKey: string | null; + constructor(orderedDataStore: OrderedDataStore, data: { + options: GetSortedUrlOptions; + result: OrderedDataStoreResultType; + }); + fetchNextPage(): Promise>; +} diff --git a/dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.js b/dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.js new file mode 100644 index 000000000..439e9c656 --- /dev/null +++ b/dist/client/lib/DataStoreManager/structures/OrderedDataStorePage.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrderedDataStorePage = void 0; +class OrderedDataStorePage { + constructor(orderedDataStore, data) { + this.orderedDataStore = orderedDataStore; + this.options = data.options; + this.data = data.result.data.Entries.map((x) => ({ + key: x.Target, + value: x.Value + })); + this.startKey = data.result.data.ExclusiveStartKey; + } + fetchNextPage() { + if (!this.startKey) { + throw new Error(`There is no next page!`); + } + return this.orderedDataStore.getSortedAsync(Object.assign(Object.assign({}, this.options), { startKey: this.startKey })); + } +} +exports.OrderedDataStorePage = OrderedDataStorePage; diff --git a/dist/client/lib/DataStoreManager/util/checks.d.ts b/dist/client/lib/DataStoreManager/util/checks.d.ts new file mode 100644 index 000000000..373414136 --- /dev/null +++ b/dist/client/lib/DataStoreManager/util/checks.d.ts @@ -0,0 +1,5 @@ +export declare function checkKey(key: string): boolean; +export declare function checkPlaceId(placeId: number): boolean; +export declare function checkName(name: string): boolean; +export declare function checkScope(scope: string): boolean; +export declare function checkValue(value: string): boolean; diff --git a/dist/client/lib/DataStoreManager/util/checks.js b/dist/client/lib/DataStoreManager/util/checks.js new file mode 100644 index 000000000..ffefb89e5 --- /dev/null +++ b/dist/client/lib/DataStoreManager/util/checks.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.checkValue = exports.checkScope = exports.checkName = exports.checkPlaceId = exports.checkKey = void 0; +const constants_1 = require("./constants"); +function checkKey(key) { + if (key.length === 0 || + key.length > constants_1.DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit) { + throw new Error(`Key cannot be blank or be more than ${constants_1.DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!`); + } + return true; +} +exports.checkKey = checkKey; +function checkPlaceId(placeId) { + if (placeId < 1) { + throw new Error(`Place ID must be greater than 1`); + } + return true; +} +exports.checkPlaceId = checkPlaceId; +function checkName(name) { + if (name.length === 0 || + name.length > constants_1.DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit) { + throw new Error(`DataStore name cannot be blank or be more than ${constants_1.DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!`); + } + return true; +} +exports.checkName = checkName; +function checkScope(scope) { + if (scope.length === 0 || + scope.length > constants_1.DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit) { + throw new Error(`DataStore scope cannot be blank or be more than ${constants_1.DataStoreManagerConstants.DFInt.DataStoreKeyLengthLimit} characters!`); + } + return true; +} +exports.checkScope = checkScope; +function checkValue(value) { + if (value.length === 0 || + value.length > constants_1.DataStoreManagerConstants.DFInt.DataStoreMaxValueSize) { + throw new Error(`DataStore values cannot be blank or be more than ${constants_1.DataStoreManagerConstants.DFInt.DataStoreMaxValueSize} characters!`); + } + return true; +} +exports.checkValue = checkValue; diff --git a/dist/client/lib/DataStoreManager/util/constants.d.ts b/dist/client/lib/DataStoreManager/util/constants.d.ts new file mode 100644 index 000000000..90ff33786 --- /dev/null +++ b/dist/client/lib/DataStoreManager/util/constants.d.ts @@ -0,0 +1,19 @@ +export declare enum DataStoreRequestType { + GET_ASYNC = 5, + UPDATE_ASYNC = 6, + SET_ASYNC = 7, + INCREMENT_ASYNC = 8, + GET_SORTED_ASYNC_PAGE = 9 +} +export declare const DataStoreManagerConstants: { + DFFlag: { + UseNewDataStoreRequestSetTimestampBehaviour: boolean; + GetGlobalDataStorePcallFix: boolean; + UseUnstableDevGetAsyncUrl: boolean; + }; + DFInt: { + DataStoreMaxValueSize: number; + DataStoreMaxPageSize: number; + DataStoreKeyLengthLimit: number; + }; +}; diff --git a/dist/client/lib/DataStoreManager/util/constants.js b/dist/client/lib/DataStoreManager/util/constants.js new file mode 100644 index 000000000..833c99aad --- /dev/null +++ b/dist/client/lib/DataStoreManager/util/constants.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataStoreManagerConstants = exports.DataStoreRequestType = void 0; +var DataStoreRequestType; +(function (DataStoreRequestType) { + DataStoreRequestType[DataStoreRequestType["GET_ASYNC"] = 5] = "GET_ASYNC"; + DataStoreRequestType[DataStoreRequestType["UPDATE_ASYNC"] = 6] = "UPDATE_ASYNC"; + DataStoreRequestType[DataStoreRequestType["SET_ASYNC"] = 7] = "SET_ASYNC"; + DataStoreRequestType[DataStoreRequestType["INCREMENT_ASYNC"] = 8] = "INCREMENT_ASYNC"; + DataStoreRequestType[DataStoreRequestType["GET_SORTED_ASYNC_PAGE"] = 9] = "GET_SORTED_ASYNC_PAGE"; +})(DataStoreRequestType = exports.DataStoreRequestType || (exports.DataStoreRequestType = {})); +exports.DataStoreManagerConstants = { + DFFlag: { + UseNewDataStoreRequestSetTimestampBehaviour: false, + GetGlobalDataStorePcallFix: false, + UseUnstableDevGetAsyncUrl: false + }, + DFInt: { + DataStoreMaxValueSize: 64 * 1024, + DataStoreMaxPageSize: 100, + DataStoreKeyLengthLimit: 50 + } +}; diff --git a/dist/controllers/index.d.ts b/dist/controllers/index.d.ts new file mode 100644 index 000000000..a8736510e --- /dev/null +++ b/dist/controllers/index.d.ts @@ -0,0 +1,5 @@ +import { RESTController } from "./rest"; +declare const controllers: { + rest: typeof RESTController; +}; +export default controllers; diff --git a/dist/controllers/index.js b/dist/controllers/index.js new file mode 100644 index 000000000..f0d3fd046 --- /dev/null +++ b/dist/controllers/index.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const rest_1 = require("./rest"); +const controllers = { + rest: rest_1.RESTController +}; +exports.default = controllers; diff --git a/dist/controllers/rest/RESTController.d.ts b/dist/controllers/rest/RESTController.d.ts new file mode 100644 index 000000000..1ae101e92 --- /dev/null +++ b/dist/controllers/rest/RESTController.d.ts @@ -0,0 +1,110 @@ +import { Client } from "../../client/Client"; +import { Cookie, CookieJar } from "tough-cookie"; +import { RESTControllerOptions, RESTCreateCookieOptions, RESTRequester, RESTRequestHandler, RESTRequestOptions, RESTResponseDataType, RESTResponseHandler } from "../../interfaces/RESTInterfaces"; +export declare class RESTController { + client: Client; + options: RESTControllerOptions; + requester: RESTRequester; + cookieJar: CookieJar; + responseHandlers: RESTResponseHandler[]; + requestHandlers: RESTRequestHandler[]; + constructor(client: Client, options?: RESTControllerOptions); + /** + * Sends a request + * @param {RequestOptions} options The options + * @returns {Promise} + */ + request(options: RESTRequestOptions): Promise; + /** + * Fetches a new XCSRF token + */ + fetchXCSRFToken(): Promise; + /** + * Sets the XCSRF token + * @param {string} token The xcsrf token to use in future requets + */ + setXCSRFToken(token: string): void; + /** + * Gets the existing XCSRF token if it's not older than set refresh interval, + * otherwise, fetch a new one + */ + getXCSRFToken(): Promise; + /** + * Creates a new cookie and returns it, no side effects + * @param {RESTCreateCookieOptions} cookieOptions The options to use + * @returns {Cookie} + */ + createCookie(cookieOptions: RESTCreateCookieOptions): Cookie; + /** + * Adds a cookie to the cookie jar + * @param {Cookie} cookie The cookie to add + * @param {?string} domain The domain to add it for + * @param {Object} setCookieOptions Options for setting the cookie + * @returns {Cookie} + */ + addCookie(cookie: Cookie, domain?: string, setCookieOptions?: any): Cookie; + /** + * Gets the cookies for a given domain stored in the jar + * @param {string} domain The domain to retrieve the cookies for + * @returns {Cookie[]} + */ + getCookies(domain: string): Cookie[]; + /** + * Adds a response handler + * @param {Function} handler The response handler + */ + addResponseHandler(handler: RESTResponseHandler): void; + /** + * Adds a request handler + * @param {Function} handler The request handler + */ + addRequestHandler(handler: RESTRequestHandler): void; + /** + * Sets the proxy for the requests + * @param {string} proxyURL The proxy URL + */ + setProxy(proxyURL: string): void; + /** + * Gets the proxy used + * @returns {string | undefined} + */ + getProxy(): string | undefined; + /** + * Sets the user agents for future requests + * @param {string} userAgent The user agent to use + */ + setUserAgent(userAgent: string): void; + /** + * Gets the user agent + * @returns {string | undefined} + */ + getUserAgent(): string | undefined; + /** + * Sets the XCSRF token refresh interval + * @param {number} xcsrfRefreshInterval The time in ms to use + */ + setXCSRFTokenRefreshInterval(xcsrfRefreshInterval: number): void; + /** + * Gets the XCSRF token refresh interval + * @returns {number | undefined} + */ + getXCSRFTokenRefreshInterval(): number | undefined; + /** + * Sets the amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + * @param {number} xcsrfRefreshMaxRetries Number of retries + */ + setXCSRFTokenRefreshMaxRetries(xcsrfRefreshMaxRetries: number): void; + /** + * Gets the amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + * @returns {number | undefined} + */ + getXCSRFTokenRefreshMaxRetries(): number | undefined; + /** + * Sets the options for the RESTController + * @param {RESTControllerOptions} options The options to use + * @returns {RESTControllerOptions} + */ + setOptions(options?: RESTControllerOptions): RESTControllerOptions; +} diff --git a/dist/controllers/rest/RESTController.js b/dist/controllers/rest/RESTController.js new file mode 100644 index 000000000..c18e21fb8 --- /dev/null +++ b/dist/controllers/rest/RESTController.js @@ -0,0 +1,191 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RESTController = void 0; +const tslib_1 = require("tslib"); +const tough_cookie_1 = require("tough-cookie"); +const RESTInterfaces_1 = require("../../interfaces/RESTInterfaces"); +const updateXCSRFToken_1 = require("./lib/updateXCSRFToken"); +const request_1 = require("./request"); +const handlers_1 = require("./response/handlers"); +const getRequester_1 = require("./lib/getRequester"); +const utilFunctions_1 = require("../../util/utilFunctions"); +class RESTController { + constructor(client, options) { + /** + * The client + */ + this.client = client; + /** + * The options for this RESTController + */ + this.options = this.setOptions(options || this.client.options.rest); + /** + * The cookie jar + */ + this.cookieJar = new tough_cookie_1.CookieJar(); + /** + * Functions to go through to validate / modify the response + */ + this.responseHandlers = [...handlers_1.responseHandlers]; + /** + * Functions to go through to modify the request + */ + this.requestHandlers = []; + /** + * The function that's being used to perform the requests, can be modified + */ + this.requester = (0, getRequester_1.getRequester)(this, this.options.requester || undefined); + } + /** + * Sends a request + * @param {RequestOptions} options The options + * @returns {Promise} + */ + request(options) { + const request = new request_1.RESTRequest(this, options); + return request.send(); + } + /** + * Fetches a new XCSRF token + */ + fetchXCSRFToken() { + return (0, updateXCSRFToken_1.updateXCSRFToken)(this).then((xcsrfToken) => { + this.setXCSRFToken(xcsrfToken); + return xcsrfToken; + }); + } + /** + * Sets the XCSRF token + * @param {string} token The xcsrf token to use in future requets + */ + setXCSRFToken(token) { + this.options.xcsrf = token; + this.options.xcsrfSet = Date.now(); + } + /** + * Gets the existing XCSRF token if it's not older than set refresh interval, + * otherwise, fetch a new one + */ + getXCSRFToken() { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + if (!this.options.xcsrf || + Date.now() - (this.options.xcsrfSet || 0) >= + (this.options.xcsrfRefreshInterval || + RESTInterfaces_1.DefaultRESTControllerOptions.xcsrfRefreshInterval)) { + // Refresh token + yield this.fetchXCSRFToken().then((token) => { + this.setXCSRFToken(token); + }); + } + return this.options.xcsrf; + }); + } + /** + * Creates a new cookie and returns it, no side effects + * @param {RESTCreateCookieOptions} cookieOptions The options to use + * @returns {Cookie} + */ + createCookie(cookieOptions) { + return new tough_cookie_1.Cookie(Object.assign(Object.assign({}, RESTInterfaces_1.DefaultCreateCookieOptions), cookieOptions)); + } + /** + * Adds a cookie to the cookie jar + * @param {Cookie} cookie The cookie to add + * @param {?string} domain The domain to add it for + * @param {Object} setCookieOptions Options for setting the cookie + * @returns {Cookie} + */ + addCookie(cookie, domain, setCookieOptions) { + return this.cookieJar.setCookieSync(cookie, domain || "https://roblox.com", setCookieOptions || {}); + } + /** + * Gets the cookies for a given domain stored in the jar + * @param {string} domain The domain to retrieve the cookies for + * @returns {Cookie[]} + */ + getCookies(domain) { + return this.cookieJar.getCookiesSync(domain); + } + /** + * Adds a response handler + * @param {Function} handler The response handler + */ + addResponseHandler(handler) { + this.responseHandlers.push(handler); + } + /** + * Adds a request handler + * @param {Function} handler The request handler + */ + addRequestHandler(handler) { + this.requestHandlers.push(handler); + } + /** + * Sets the proxy for the requests + * @param {string} proxyURL The proxy URL + */ + setProxy(proxyURL) { + this.options.proxy = proxyURL; + } + /** + * Gets the proxy used + * @returns {string | undefined} + */ + getProxy() { + return this.options.proxy; + } + /** + * Sets the user agents for future requests + * @param {string} userAgent The user agent to use + */ + setUserAgent(userAgent) { + this.options.userAgent = userAgent; + } + /** + * Gets the user agent + * @returns {string | undefined} + */ + getUserAgent() { + return this.options.userAgent; + } + /** + * Sets the XCSRF token refresh interval + * @param {number} xcsrfRefreshInterval The time in ms to use + */ + setXCSRFTokenRefreshInterval(xcsrfRefreshInterval) { + this.options.xcsrfRefreshInterval = xcsrfRefreshInterval; + } + /** + * Gets the XCSRF token refresh interval + * @returns {number | undefined} + */ + getXCSRFTokenRefreshInterval() { + return this.options.xcsrfRefreshInterval; + } + /** + * Sets the amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + * @param {number} xcsrfRefreshMaxRetries Number of retries + */ + setXCSRFTokenRefreshMaxRetries(xcsrfRefreshMaxRetries) { + this.options.xcsrfRefreshMaxRetries = xcsrfRefreshMaxRetries; + } + /** + * Gets the amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + * @returns {number | undefined} + */ + getXCSRFTokenRefreshMaxRetries() { + return this.options.xcsrfRefreshMaxRetries; + } + /** + * Sets the options for the RESTController + * @param {RESTControllerOptions} options The options to use + * @returns {RESTControllerOptions} + */ + setOptions(options) { + this.options = (0, utilFunctions_1.utilMergeDeep)(RESTInterfaces_1.DefaultRESTControllerOptions, options || {}); + return this.options; + } +} +exports.RESTController = RESTController; diff --git a/dist/controllers/rest/index.d.ts b/dist/controllers/rest/index.d.ts new file mode 100644 index 000000000..67f3f39a4 --- /dev/null +++ b/dist/controllers/rest/index.d.ts @@ -0,0 +1 @@ +export { RESTController } from "./RESTController"; diff --git a/dist/controllers/rest/index.js b/dist/controllers/rest/index.js new file mode 100644 index 000000000..3863c9b65 --- /dev/null +++ b/dist/controllers/rest/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RESTController = void 0; +var RESTController_1 = require("./RESTController"); +Object.defineProperty(exports, "RESTController", { enumerable: true, get: function () { return RESTController_1.RESTController; } }); diff --git a/dist/controllers/rest/lib/getRequester.d.ts b/dist/controllers/rest/lib/getRequester.d.ts new file mode 100644 index 000000000..dc0223a06 --- /dev/null +++ b/dist/controllers/rest/lib/getRequester.d.ts @@ -0,0 +1,2 @@ +import { RESTController } from "../RESTController"; +export declare function getRequester(controller: RESTController, customRequester?: RESTController["requester"]): import("../../../interfaces/RESTInterfaces").RESTRequester; diff --git a/dist/controllers/rest/lib/getRequester.js b/dist/controllers/rest/lib/getRequester.js new file mode 100644 index 000000000..ad8fdb768 --- /dev/null +++ b/dist/controllers/rest/lib/getRequester.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getRequester = void 0; +const tslib_1 = require("tslib"); +const got_1 = (0, tslib_1.__importDefault)(require("got")); +function getRequester(controller, customRequester) { + if (!controller.requester && + !controller.client.options.rest.requester && + customRequester === undefined) { + let requester; + try { + requester = got_1.default; + } + catch (e) { + throw new Error(`Failed to retrieve module "got" and no custom requester provided!`); + } + controller.requester = requester; + } + else { + controller.requester = customRequester; + } + return controller.requester; +} +exports.getRequester = getRequester; diff --git a/dist/controllers/rest/lib/updateXCSRFToken.d.ts b/dist/controllers/rest/lib/updateXCSRFToken.d.ts new file mode 100644 index 000000000..829a6ea32 --- /dev/null +++ b/dist/controllers/rest/lib/updateXCSRFToken.d.ts @@ -0,0 +1,2 @@ +import { RESTController } from "../RESTController"; +export declare function updateXCSRFToken(restController: RESTController): Promise; diff --git a/dist/controllers/rest/lib/updateXCSRFToken.js b/dist/controllers/rest/lib/updateXCSRFToken.js new file mode 100644 index 000000000..f2c83bd6a --- /dev/null +++ b/dist/controllers/rest/lib/updateXCSRFToken.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.updateXCSRFToken = void 0; +function updateXCSRFToken(restController) { + return restController + .request({ + url: "https://auth.roblox.com/v2/login", + method: "POST", + xcsrf: false, + checks: { + xcsrf: false + }, + responseOptions: { + allowedStatusCodes: [403] + } + }) + .then((response) => { + const foundXcsrfToken = response.headers["x-csrf-token"]; + if (!foundXcsrfToken) { + throw new Error(`x-csrf-token was not returned by Roblox. Unable to fetch the token!`); + } + else { + return foundXcsrfToken; + } + }); +} +exports.updateXCSRFToken = updateXCSRFToken; diff --git a/dist/controllers/rest/request/RESTRequest.d.ts b/dist/controllers/rest/request/RESTRequest.d.ts new file mode 100644 index 000000000..007db2c05 --- /dev/null +++ b/dist/controllers/rest/request/RESTRequest.d.ts @@ -0,0 +1,16 @@ +import { RESTRequestOptions, RESTResponseDataType } from "../../../interfaces/RESTInterfaces"; +import { RESTController } from "../RESTController"; +export declare class RESTRequest { + controller: RESTController; + /** + * The options that will be used for sending the request + */ + requestOptions: RESTRequestOptions; + /** + * The amount of times this request has been executed + */ + attempts: number; + constructor(controller: RESTController, options: RESTRequestOptions); + setOptions(options: RESTRequestOptions): RESTRequestOptions; + send(options?: RESTRequestOptions): Promise; +} diff --git a/dist/controllers/rest/request/RESTRequest.js b/dist/controllers/rest/request/RESTRequest.js new file mode 100644 index 000000000..d96ac63d9 --- /dev/null +++ b/dist/controllers/rest/request/RESTRequest.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RESTRequest = void 0; +const tslib_1 = require("tslib"); +const RESTInterfaces_1 = require("../../../interfaces/RESTInterfaces"); +const prepare_1 = require("./prepare"); +const response_1 = require("../response"); +const utilFunctions_1 = require("../../../util/utilFunctions"); +class RESTRequest { + constructor(controller, options) { + this.controller = controller; + this.requestOptions = options; + this.attempts = 0; + } + setOptions(options) { + // As lodash overwrites all entries that are provided with each other, it also mutates the default + // This way, it creates a clone of the default each time, so there's "new" default data each time + this.requestOptions = (0, utilFunctions_1.utilMergeDeep)(JSON.parse(JSON.stringify(RESTInterfaces_1.DefaultRESTRequestOptions)), options || {}); + return this.requestOptions; + } + send(options) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + yield (0, prepare_1.prepare)(this, options || this.requestOptions); + yield Promise.all(this.controller.requestHandlers.map((handler) => handler(this))); + const responseData = yield this.controller.requester(this.requestOptions); + this.attempts++; + const response = new response_1.RESTResponse(this.controller, this, responseData); + return response.process(); + }); + } +} +exports.RESTRequest = RESTRequest; diff --git a/dist/controllers/rest/request/index.d.ts b/dist/controllers/rest/request/index.d.ts new file mode 100644 index 000000000..c83b23eaf --- /dev/null +++ b/dist/controllers/rest/request/index.d.ts @@ -0,0 +1 @@ +export { RESTRequest } from "./RESTRequest"; diff --git a/dist/controllers/rest/request/index.js b/dist/controllers/rest/request/index.js new file mode 100644 index 000000000..52930c9c1 --- /dev/null +++ b/dist/controllers/rest/request/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RESTRequest = void 0; +var RESTRequest_1 = require("./RESTRequest"); +Object.defineProperty(exports, "RESTRequest", { enumerable: true, get: function () { return RESTRequest_1.RESTRequest; } }); diff --git a/dist/controllers/rest/request/prepare.d.ts b/dist/controllers/rest/request/prepare.d.ts new file mode 100644 index 000000000..d10b43647 --- /dev/null +++ b/dist/controllers/rest/request/prepare.d.ts @@ -0,0 +1,3 @@ +import { RESTRequestOptions } from "../../../interfaces/RESTInterfaces"; +import { RESTRequest } from "./"; +export declare function prepare(request: RESTRequest, options: RESTRequestOptions): Promise; diff --git a/dist/controllers/rest/request/prepare.js b/dist/controllers/rest/request/prepare.js new file mode 100644 index 000000000..c35339fee --- /dev/null +++ b/dist/controllers/rest/request/prepare.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.prepare = void 0; +const tslib_1 = require("tslib"); +const querystring_1 = (0, tslib_1.__importDefault)(require("querystring")); +function prepare(request, options) { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + request.setOptions(options); + if (!request.requestOptions.url) { + throw new Error("No url was provided when executing rest.request.prepare"); + } + if (!request.requestOptions.headers) { + request.requestOptions.headers = {}; + } + if (request.requestOptions.followAllRedirects !== false) { + request.requestOptions.followAllRedirects = true; + } + if (!request.requestOptions.method) { + request.requestOptions.method = "GET"; + } + if (request.requestOptions.qs) { + if (!request.requestOptions.url.includes("?")) { + request.requestOptions.url += `?${querystring_1.default.stringify(request.requestOptions.qs)}`; + } + else { + request.requestOptions.url += `&${querystring_1.default.stringify(request.requestOptions.qs)}`; + } + } + if ((request.requestOptions.xcsrf !== false && + request.requestOptions.method.toLowerCase() !== "get") || + request.requestOptions.xcsrf === true) { + request.requestOptions.headers = Object.assign(Object.assign({}, request.requestOptions.headers), { "X-CSRF-TOKEN": yield request.controller.getXCSRFToken() }); + if (!request.requestOptions.responseOptions) { + request.requestOptions.responseOptions = {}; + } + if (!request.requestOptions.responseOptions.disallowedStatusMessages) { + request.requestOptions.responseOptions.disallowedStatusMessages = []; + } + request.requestOptions.responseOptions.disallowedStatusMessages.push("Token Validation Failed"); + } + if (request.requestOptions.json) { + request.requestOptions.body = + typeof request.requestOptions.json === "string" + ? request.requestOptions.json + : JSON.stringify(request.requestOptions.json); + request.requestOptions.headers["content-type"] = "application/json"; + delete request.requestOptions.json; + } + if (!request.requestOptions.excludeCookies) { + request.requestOptions.headers.Cookie = + request.controller.cookieJar.getCookieStringSync(request.requestOptions.url); + } + // -- Utilities + // Making sure the library does not throw errors if the request fails for some reason + // We want to handle any issues ourselves + request.requestOptions.throwHttpErrors = false; + }); +} +exports.prepare = prepare; diff --git a/dist/controllers/rest/response/RESTResponse.d.ts b/dist/controllers/rest/response/RESTResponse.d.ts new file mode 100644 index 000000000..0d1f1f047 --- /dev/null +++ b/dist/controllers/rest/response/RESTResponse.d.ts @@ -0,0 +1,10 @@ +import { RESTController } from "../RESTController"; +import { RESTRequest } from "../request"; +import { RESTResponseDataType } from "../../../interfaces/RESTInterfaces"; +export declare class RESTResponse { + controller: RESTController; + request: RESTRequest; + responseData: RESTResponseDataType; + constructor(controller: RESTController, request: RESTRequest, responseData: RESTResponseDataType); + process(): Promise; +} diff --git a/dist/controllers/rest/response/RESTResponse.js b/dist/controllers/rest/response/RESTResponse.js new file mode 100644 index 000000000..9a5732f34 --- /dev/null +++ b/dist/controllers/rest/response/RESTResponse.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RESTResponse = void 0; +const tslib_1 = require("tslib"); +const errors_1 = require("../../../util/errors/errors"); +class RESTResponse { + // Public options: RESTResponseOptions; + constructor(controller, request, responseData) { + this.controller = controller; + this.request = request; + this.responseData = responseData; + } + // eslint-disable-next-line require-await + process() { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + const allProcessed = this.controller.responseHandlers.map((handler) => handler(this)); + if (allProcessed.every((processed) => processed === true)) { + return this.responseData; + } + else { + const error = allProcessed.find((err) => err instanceof errors_1.BloxyHttpError && + err.name === "BloxyHttpInvalidStatusMessageError" && + err.statusMessage.includes("Token Validation Failed")); + if (error) { + // 1 attempt = 0 retries + if (this.request.attempts - 1 === + this.controller.getXCSRFTokenRefreshMaxRetries()) { + throw error; + } + else { + this.controller.options.xcsrf = undefined; + return this.request.send(); + } + } + throw allProcessed.find((err) => err instanceof Error); + } + }); + } +} +exports.RESTResponse = RESTResponse; diff --git a/dist/controllers/rest/response/handlers/index.d.ts b/dist/controllers/rest/response/handlers/index.d.ts new file mode 100644 index 000000000..c101b4109 --- /dev/null +++ b/dist/controllers/rest/response/handlers/index.d.ts @@ -0,0 +1,2 @@ +import { validStatusCode } from "./validStatusCode"; +export declare const responseHandlers: (typeof validStatusCode)[]; diff --git a/dist/controllers/rest/response/handlers/index.js b/dist/controllers/rest/response/handlers/index.js new file mode 100644 index 000000000..a7ed5958f --- /dev/null +++ b/dist/controllers/rest/response/handlers/index.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.responseHandlers = void 0; +const validBody_1 = require("./validBody"); +const validStatusMessage_1 = require("./validStatusMessage"); +const validStatusCode_1 = require("./validStatusCode"); +const updateHeaders_1 = require("./updateHeaders"); +exports.responseHandlers = [ + updateHeaders_1.updateHeaders, + validStatusCode_1.validStatusCode, + validStatusMessage_1.validStatusMessage, + validBody_1.validBody +]; diff --git a/dist/controllers/rest/response/handlers/updateHeaders.d.ts b/dist/controllers/rest/response/handlers/updateHeaders.d.ts new file mode 100644 index 000000000..81ce62c8e --- /dev/null +++ b/dist/controllers/rest/response/handlers/updateHeaders.d.ts @@ -0,0 +1,2 @@ +import { RESTResponse } from "../RESTResponse"; +export declare function updateHeaders(response: RESTResponse): boolean; diff --git a/dist/controllers/rest/response/handlers/updateHeaders.js b/dist/controllers/rest/response/handlers/updateHeaders.js new file mode 100644 index 000000000..87395a4ab --- /dev/null +++ b/dist/controllers/rest/response/handlers/updateHeaders.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.updateHeaders = void 0; +const tough_cookie_1 = require("tough-cookie"); +function updateHeaders(response) { + if (response.responseData.headers["set-cookie"]) { + const setCookieHeader = response.responseData.headers["set-cookie"]; + if (Array.isArray(setCookieHeader)) { + setCookieHeader.forEach((toSetCookie) => { + const parsedCookie = tough_cookie_1.Cookie.parse(toSetCookie); + if (parsedCookie) { + response.controller.addCookie(parsedCookie); + } + }); + } + else { + const parsedCookie = tough_cookie_1.Cookie.parse(setCookieHeader); + if (parsedCookie) { + response.controller.addCookie(parsedCookie); + } + } + } + return true; +} +exports.updateHeaders = updateHeaders; diff --git a/dist/controllers/rest/response/handlers/validBody.d.ts b/dist/controllers/rest/response/handlers/validBody.d.ts new file mode 100644 index 000000000..822b5e3af --- /dev/null +++ b/dist/controllers/rest/response/handlers/validBody.d.ts @@ -0,0 +1 @@ +export declare function validBody(): boolean; diff --git a/dist/controllers/rest/response/handlers/validBody.js b/dist/controllers/rest/response/handlers/validBody.js new file mode 100644 index 000000000..5dfd47645 --- /dev/null +++ b/dist/controllers/rest/response/handlers/validBody.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validBody = void 0; +function validBody() { + return true; +} +exports.validBody = validBody; diff --git a/dist/controllers/rest/response/handlers/validStatusCode.d.ts b/dist/controllers/rest/response/handlers/validStatusCode.d.ts new file mode 100644 index 000000000..e740014c4 --- /dev/null +++ b/dist/controllers/rest/response/handlers/validStatusCode.d.ts @@ -0,0 +1,2 @@ +import { RESTResponse } from "../RESTResponse"; +export declare function validStatusCode(response: RESTResponse): boolean | Error; diff --git a/dist/controllers/rest/response/handlers/validStatusCode.js b/dist/controllers/rest/response/handlers/validStatusCode.js new file mode 100644 index 000000000..81e6d1827 --- /dev/null +++ b/dist/controllers/rest/response/handlers/validStatusCode.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validStatusCode = void 0; +const errors_1 = require("../../../../util/errors/errors"); +function validStatusCode(response) { + var _a; + const { request, responseData } = response; + let isValid = true; + const responseOptions = request.requestOptions.responseOptions || {}; + if (request.requestOptions.responseOptions && + ((_a = request.requestOptions.checks) === null || _a === void 0 ? void 0 : _a.statusCode)) { + const allowedStatusCodes = responseOptions.allowedStatusCodes || []; + const disallowedStatusCodes = responseOptions.disallowedStatusCodes || []; + const isAllowed = allowedStatusCodes.some((statusCode) => responseData.statusCode === statusCode); + const isDisallowed = disallowedStatusCodes.some((statusCode) => responseData.statusCode === statusCode); + if (allowedStatusCodes.length > 0) { + // Only these are allowed + if (!isAllowed) { + isValid = false; + } + } + else if (allowedStatusCodes.length === 0 && + disallowedStatusCodes.length > 0) { + // Only these are disallowed + if (isDisallowed) { + isValid = false; + } + } + else if (allowedStatusCodes.length === 0 && + disallowedStatusCodes.length === 0) { + // All status are allowed + } + } + return isValid + ? true + : new errors_1.BloxyHttpError({ + statusMessage: responseData.statusMessage, + statusCode: responseData.statusCode, + message: `Invalid status code in response. Body: ${responseData.body instanceof Object + ? JSON.stringify(responseData.body) + : responseData.body}`, + name: "BloxyHttpInvalidStatusCodeError", + possibleReasons: [] + }); +} +exports.validStatusCode = validStatusCode; diff --git a/dist/controllers/rest/response/handlers/validStatusMessage.d.ts b/dist/controllers/rest/response/handlers/validStatusMessage.d.ts new file mode 100644 index 000000000..1231c04f7 --- /dev/null +++ b/dist/controllers/rest/response/handlers/validStatusMessage.d.ts @@ -0,0 +1,2 @@ +import { RESTResponse } from "../RESTResponse"; +export declare function validStatusMessage(response: RESTResponse): boolean | Error; diff --git a/dist/controllers/rest/response/handlers/validStatusMessage.js b/dist/controllers/rest/response/handlers/validStatusMessage.js new file mode 100644 index 000000000..c7b208fc4 --- /dev/null +++ b/dist/controllers/rest/response/handlers/validStatusMessage.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validStatusMessage = void 0; +const errors_1 = require("../../../../util/errors/errors"); +function validStatusMessage(response) { + var _a; + const { request, responseData } = response; + const responseOptions = request.requestOptions.responseOptions || {}; + let isValid = true; + if (request.requestOptions.responseOptions && + ((_a = request.requestOptions.checks) === null || _a === void 0 ? void 0 : _a.statusMessage)) { + const allowedStatusMessages = responseOptions.allowedStatusMessages || []; + const disallowedStatusMessages = responseOptions.disallowedStatusMessages || []; + const isAllowed = allowedStatusMessages.some((statusMessage) => responseData.statusMessage.toLowerCase().includes(statusMessage)); + const isDisallowed = disallowedStatusMessages.some((statusMessage) => responseData.statusMessage.toLowerCase().includes(statusMessage)); + if (allowedStatusMessages.length > 0) { + // Only these are allowed + if (!isAllowed) { + isValid = false; + } + } + else if (allowedStatusMessages.length === 0 && + disallowedStatusMessages.length > 0) { + // Only these are disallowed + if (isDisallowed) { + isValid = false; + } + } + else if (allowedStatusMessages.length === 0 && + disallowedStatusMessages.length === 0) { + // All status are allowed + } + } + return isValid + ? true + : new errors_1.BloxyHttpError({ + statusCode: responseData.statusCode, + statusMessage: responseData.statusMessage, + message: `Invalid status message detected in response.`, + name: "BloxyHttpInvalidStatusMessageError", + possibleReasons: [] + }); +} +exports.validStatusMessage = validStatusMessage; diff --git a/dist/controllers/rest/response/index.d.ts b/dist/controllers/rest/response/index.d.ts new file mode 100644 index 000000000..fa4300af3 --- /dev/null +++ b/dist/controllers/rest/response/index.d.ts @@ -0,0 +1 @@ +export { RESTResponse } from "./RESTResponse"; diff --git a/dist/controllers/rest/response/index.js b/dist/controllers/rest/response/index.js new file mode 100644 index 000000000..106b1df0c --- /dev/null +++ b/dist/controllers/rest/response/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RESTResponse = void 0; +var RESTResponse_1 = require("./RESTResponse"); +Object.defineProperty(exports, "RESTResponse", { enumerable: true, get: function () { return RESTResponse_1.RESTResponse; } }); diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 000000000..d2b60d129 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,40 @@ +export { Client } from "./client"; +export * from "./types/GenericTypes"; +export * from "./types/GenericOptionTypes"; +export * from "./client/apis/AccountInformationAPI"; +export * from "./client/apis/AccountSettingsAPI"; +export * from "./client/apis/AdConfigurationAPI"; +export * from "./client/apis/AssetDeliveryAPI"; +export * from "./client/apis/AuthAPI"; +export * from "./client/apis/AvatarAPI"; +export * from "./client/apis/BadgesAPI"; +export * from "./client/apis/BaseAPI"; +export * from "./client/apis/BillingAPI"; +export * from "./client/apis/CatalogAPI"; +export * from "./client/apis/ChatAPI"; +export * from "./client/apis/ContactsAPI"; +export * from "./client/apis/DataAPI"; +export * from "./client/apis/DevelopAPI"; +export * from "./client/apis/EconomyAPI"; +export * from "./client/apis/EconomyCreatorStatsAPI"; +export * from "./client/apis/EngagementPayoutsAPI"; +export * from "./client/apis/FollowingsAPI"; +export * from "./client/apis/FriendsAPI"; +export * from "./client/apis/GameInternationalizationAPI"; +export * from "./client/apis/GamesAPI"; +export * from "./client/apis/GeneralAPI"; +export * from "./client/apis/GroupsAPI"; +export * from "./client/apis/InventoryAPI"; +export * from "./client/apis/ItemConfigurationAPI"; +export * from "./client/apis/LocaleAPI"; +export * from "./client/apis/MetricsAPI"; +export * from "./client/apis/NotificationsAPI"; +export * from "./client/apis/OtherAPI"; +export * from "./client/apis/PremiumFeaturesAPI"; +export * from "./client/apis/PresenceAPI"; +export * from "./client/apis/PrivateMessagesAPI"; +export * from "./client/apis/PublishAPI"; +export * from "./client/apis/ThumbnailsAPI"; +export * from "./client/apis/TranslationRolesAPI"; +export * from "./client/apis/TwoStepVerificationAPI"; +export * from "./client/apis/UsersAPI"; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 000000000..dd4e66f12 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Client = void 0; +const tslib_1 = require("tslib"); +var client_1 = require("./client"); +Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_1.Client; } }); +// Generic Types +(0, tslib_1.__exportStar)(require("./types/GenericTypes"), exports); +(0, tslib_1.__exportStar)(require("./types/GenericOptionTypes"), exports); +// APIs +(0, tslib_1.__exportStar)(require("./client/apis/AccountInformationAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/AccountSettingsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/AdConfigurationAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/AssetDeliveryAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/AuthAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/AvatarAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/BadgesAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/BaseAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/BillingAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/CatalogAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/ChatAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/ContactsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/DataAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/DevelopAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/EconomyAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/EconomyCreatorStatsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/EngagementPayoutsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/FollowingsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/FriendsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/GameInternationalizationAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/GamesAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/GeneralAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/GroupsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/InventoryAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/ItemConfigurationAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/LocaleAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/MetricsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/NotificationsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/OtherAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/PremiumFeaturesAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/PresenceAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/PrivateMessagesAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/PublishAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/ThumbnailsAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/TranslationRolesAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/TwoStepVerificationAPI"), exports); +(0, tslib_1.__exportStar)(require("./client/apis/UsersAPI"), exports); diff --git a/dist/interfaces/APIInterfaces.d.ts b/dist/interfaces/APIInterfaces.d.ts new file mode 100644 index 000000000..1fa20cc3b --- /dev/null +++ b/dist/interfaces/APIInterfaces.d.ts @@ -0,0 +1,5 @@ +import { Client } from "../index"; +export declare type BaseAPIOptions = { + baseUrl: string; + client: Client; +}; diff --git a/dist/interfaces/APIInterfaces.js b/dist/interfaces/APIInterfaces.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/interfaces/APIInterfaces.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/interfaces/GeneralInterfaces.d.ts b/dist/interfaces/GeneralInterfaces.d.ts new file mode 100644 index 000000000..56e6095fc --- /dev/null +++ b/dist/interfaces/GeneralInterfaces.d.ts @@ -0,0 +1,19 @@ +import { ClientUser } from "../old_structures/ClientUser"; +export declare type AnyIdentifier = string | number; +export declare type UserIdentifier = ClientUser | AnyIdentifier; +export declare enum EnumUserPresence { + "Offline" = 0, + "Online" = 1, + "In Game" = 2, + "In Studio" = 3 +} +export interface UserPresence { + UserPresenceType: "InGame" | "InStudio" | "Online" | "Offline"; + UserLocationType: "Game"; + lastLocation?: string; + placeId?: number; + rootPlaceId?: number; + gameInstanceId?: string; + universeId?: number; + lastOnline?: string; +} diff --git a/dist/interfaces/GeneralInterfaces.js b/dist/interfaces/GeneralInterfaces.js new file mode 100644 index 000000000..dbb5a6ffa --- /dev/null +++ b/dist/interfaces/GeneralInterfaces.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EnumUserPresence = void 0; +var EnumUserPresence; +(function (EnumUserPresence) { + EnumUserPresence[EnumUserPresence["Offline"] = 0] = "Offline"; + EnumUserPresence[EnumUserPresence["Online"] = 1] = "Online"; + EnumUserPresence[EnumUserPresence["In Game"] = 2] = "In Game"; + EnumUserPresence[EnumUserPresence["In Studio"] = 3] = "In Studio"; +})(EnumUserPresence = exports.EnumUserPresence || (exports.EnumUserPresence = {})); diff --git a/dist/interfaces/RESTInterfaces.d.ts b/dist/interfaces/RESTInterfaces.d.ts new file mode 100644 index 000000000..0f1ff90b4 --- /dev/null +++ b/dist/interfaces/RESTInterfaces.d.ts @@ -0,0 +1,167 @@ +import { RESTRequest } from "../controllers/rest/request"; +import { RESTResponse } from "../controllers/rest/response"; +export declare type RESTRequester = (requestOptions: RESTRequestOptions) => Promise; +export declare type RESTRequestHandler = (request: RESTRequest) => boolean | Error; +export declare type RESTResponseHandler = (response: RESTResponse) => boolean | Error; +export declare type RESTControllerOptions = { + requester?: (requestOptions: RESTRequestOptions) => Promise; + /** + * If specified, the user agent that will be used for the requests + */ + userAgent?: string; + /** + * If specified, the url which the request will be proxied through + */ + proxy?: string; + /** + * The current XCSRF token + */ + xcsrf?: string; + /** + * The time in ms when the xcsrf was last set + */ + xcsrfSet?: number; + /** + * Refresh interval in ms for XCSRF token updating + */ + xcsrfRefreshInterval?: number; + /** + * The amount of retries to be made to refresh XCSRF + * tokens on Token Validation errors + */ + xcsrfRefreshMaxRetries?: number; +}; +export declare type RESTCreateCookieOptions = { + key: string; + value: string; + domain: string; + hostOnly: boolean; + httpOnly: boolean; +}; +export declare type RESTRequestOptions = { + /** + * The URL to send the request to + */ + url: string; + /** + * The request method to use + */ + method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | string; + /** + * The proxy to use + */ + proxy?: string; + /** + * If the request should follow all redirects + */ + followAllRedirects?: boolean; + /** + * Roblox's "old" verification system with general verification tokens + */ + verification?: string; + /** + * An "overriding" user agent for the request + */ + userAgent?: string; + /** + * Add some custom headers that will override / merge with the "base" headers + */ + headers?: { + [key: string]: unknown; + }; + /** + * The JSON body + */ + json?: unknown[] | { + [key: string]: unknown; + } | string | any; + body?: unknown; + /** + * The form body + */ + form?: { + [key: string]: unknown; + }; + /** + * The form data body + */ + formData?: { + [key: string]: unknown; + }; + /** + * Any query params? + */ + qs?: { + [key: string]: unknown; + }; + /** + * Sets the state of any checks + */ + checks?: RESTResponseOptions["checks"]; + /** + * If you want to use a "custom" xcsrf token + */ + xcsrf?: string | boolean; + /** + * The optional response options + */ + responseOptions?: RESTResponseOptions; + /** + * If it should throw http errors if the statuscode is != 200 + */ + throwHttpErrors?: boolean; + /** + * If it should exclude the cookies from being included in the requests + */ + excludeCookies?: boolean; +}; +export declare type RESTResponseOptions = { + allowedStatusCodes?: number[]; + disallowedStatusCodes?: number[]; + allowedStatusMessages?: string[]; + disallowedStatusMessages?: string[]; + onlyJSON?: boolean; + checks?: { + xcsrf?: boolean; + statusMessage?: boolean; + statusCode?: boolean; + body?: boolean; + captcha?: boolean; + }; +}; +export declare type RESTResponseDataType = { + body: any; + statusMessage: string; + statusCode: number; + headers: Record; +}; +export declare const DefaultRESTResponseOptions: { + allowedStatusCodes: number[]; +}; +export declare const DefaultRESTRequestOptions: { + checks: { + xcsrf: boolean; + statusMessage: boolean; + statusCode: boolean; + body: boolean; + captcha: boolean; + }; + headers: {}; + method: string; + responseOptions: { + allowedStatusCodes: number[]; + }; +}; +export declare const DefaultCreateCookieOptions: { + domain: string; + hostOnly: boolean; + httpOnly: boolean; +}; +export declare const DefaultRESTControllerOptions: { + userAgent: string; + proxy: undefined; + xcsrf: undefined; + xcsrfSet: undefined; + xcsrfRefreshInterval: number; + xcsrfRefreshMaxRetries: number; +}; diff --git a/dist/interfaces/RESTInterfaces.js b/dist/interfaces/RESTInterfaces.js new file mode 100644 index 000000000..077d9defb --- /dev/null +++ b/dist/interfaces/RESTInterfaces.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DefaultRESTControllerOptions = exports.DefaultCreateCookieOptions = exports.DefaultRESTRequestOptions = exports.DefaultRESTResponseOptions = void 0; +exports.DefaultRESTResponseOptions = { + allowedStatusCodes: [200] +}; +exports.DefaultRESTRequestOptions = { + checks: { + xcsrf: true, + statusMessage: true, + statusCode: true, + body: true, + captcha: true + }, + headers: {}, + method: "GET", + responseOptions: exports.DefaultRESTResponseOptions +}; +exports.DefaultCreateCookieOptions = { + domain: ".roblox.com", + hostOnly: false, + httpOnly: false +}; +exports.DefaultRESTControllerOptions = { + userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", + proxy: undefined, + xcsrf: undefined, + xcsrfSet: undefined, + xcsrfRefreshInterval: 5 * 60 * 1000, + xcsrfRefreshMaxRetries: 4 +}; diff --git a/dist/old_structures/Asset.d.ts b/dist/old_structures/Asset.d.ts new file mode 100644 index 000000000..dc251898b --- /dev/null +++ b/dist/old_structures/Asset.d.ts @@ -0,0 +1,209 @@ +import { Client } from "../client"; +import { CreatorType } from "../util/constants"; +import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; +import { PartialUser, PartialUserOptions } from "./User"; +import { CatalogProductDetails } from "../client/apis/CatalogAPI"; +import { PartialGroup, PartialGroupOptions } from "./Group"; +export interface Structures { + PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; + PartialGameUniverse: new (data: PartialGameUniverseOptions, client: Client) => PartialGameUniverse; + PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; +} +export interface AssetVersionOptions { + Id: number; + AssetId: number; + VersionNumber: number; + ParentAssetVersionId: number; + CreatorType: unknown; + CreatingUniverseId: number | null; + Created: string; + Updated: string; +} +export declare class AssetVersion { + client: Client; + id: number; + assetId: number; + versionNumber: number; + parentAssetVersionId: number | null; + creatorType: CreatorType; + createdForUniverse: PartialGameUniverse | null; + creator: PartialUser; + created: Date; + updated: Date; + constructor(data: any, client: Client); +} +export interface BundleOptions { + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; + id: number; + name: string; + type: string; + }[]; + creator: { + id: number; + name: string; + type: string; + }; + product: CatalogProductDetails; +} +export declare class Bundle { + client: Client; + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; + id: number; + name: string; + type: string; + }[]; + creatorType: CreatorType; + creator: PartialUser | PartialGroup; + product: { + id: number; + type: string; + publicDomain: boolean; + forSale: boolean; + price: number; + premiumPricing: { + discount: number; + price: number; + }; + }; + constructor(data: BundleOptions, client: Client); +} +export interface CollectibleAssetOptions { + userAssetId: number; + serialNumber: number | null; + assetId: number; + name: string; + recentAveragePrice: number | null; + originalPrice: number | null; + assetStock: number | null; + buildersClubMembershipType: number; +} +export declare class CollectibleAsset { + client: Client; + assetId: number; + userAssetId: number; + name: string; + recentAveragePrice: number | null; + originalPrice: number | null; + assetStock: number | null; + buildersClubMembershipType: number; + constructor(data: CollectibleAssetOptions, client: Client); +} +export declare type CursorPageOptions = { + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; +declare type CursorPageResponse = { + data: unknown; + previousPageCursor: string | null; + nextPageCursor: string | null; +}; +export declare class CursorPage { + client: Client; + options: CursorPageOptions; + cursors: { + current: string | null; + next: string | null; + previous: string | null; + }; + data: T[]; + method: any; + constructor(client: Client, options: CursorPageOptions, response: CursorPageResponse, method: any); + getNext(newOptions?: CursorPageOptions): Promise>; + getPrevious(newOptions?: CursorPageOptions): Promise>; +} +export interface ProductOptions { + TargetId: number; + ProductType: string; + AssetId: number; + ProductId: number; + Name: string; + Description: string; + AssetTypeId: number; + Creator: { + Id: number; + Name: string; + }; + IconImageAssetId: number; + Created: string; + Updated: string; + PriceInRobux: number; + PriceInTickets: null; + Sales: number; + IsNew: boolean; + IsForSale: boolean; + IsPublicDomain: boolean; + IsLimited: boolean; + IsLimitedUnique: boolean; + Remaining: number | null; + MinimumMembershipLevel: number; +} +export declare class Product { + client: Client; + id: number; + type: string; + assetId: number; + productId: number; + name: string; + description: string; + assetTypeId: number; + creator: PartialUser; + iconImageAssetId: number; + created: Date; + updated: Date; + price: number; + sales: number; + isNew: boolean; + forSale: boolean; + publicDomain: boolean; + limited: boolean; + limitedUnique: boolean; + remaining: number | null; + minimumMembershipLevel: number; + constructor(data: ProductOptions, client: Client); +} +export interface TradeOptions { + id: number; + offers: { + user: { + id: number; + name: string; + displayName: string; + }; + userAssets: CollectibleAssetOptions[]; + robux: number; + }[]; + user: { + id: number; + name: string; + displayName: string; + }; + created: string; + isActive: boolean; + status: "Completed" | string; +} +export declare class Trade { + client: Client; + id: number; + offers: { + user: PartialUser; + assets: CollectibleAsset[]; + robux: number; + }[]; + sender: PartialUser; + created: Date; + active: boolean; + status: string; + constructor(data: TradeOptions, client: Client); +} +export {}; diff --git a/dist/old_structures/Asset.js b/dist/old_structures/Asset.js new file mode 100644 index 000000000..074550237 --- /dev/null +++ b/dist/old_structures/Asset.js @@ -0,0 +1,167 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Trade = exports.Product = exports.CursorPage = exports.CollectibleAsset = exports.Bundle = exports.AssetVersion = void 0; +const constants_1 = require("../util/constants"); +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup +}); +class AssetVersion { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.Id; + this.assetId = data.AssetId; + this.versionNumber = data.VersionNumber; + this.parentAssetVersionId = data.ParentAssetVersionId; + this.creatorType = data.CreatorType; + this.creator = new structures.PartialUser({ + id: data.CreatorTargetId + }, this.client); + this.createdForUniverse = data.CreatingUniverseId + ? new structures.PartialGameUniverse({ + id: data.CreatingUniverseId + }, client) + : null; + this.created = new Date(data.Created); + this.updated = new Date(data.Updated); + } +} +exports.AssetVersion = AssetVersion; +class Bundle { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name; + this.description = data.description; + this.bundleType = data.bundleType; + this.items = data.items.map((itemData) => ({ + owned: itemData.owned, + id: itemData.id, + name: itemData.name, + type: itemData.type + })); + this.creatorType = + data.creator.type.toLowerCase() === "group" + ? constants_1.CreatorType.GROUP + : constants_1.CreatorType.USER; + this.creator = + this.creatorType === constants_1.CreatorType.USER + ? new structures.PartialUser({ + id: data.creator.id, + name: data.creator.name + }, client) + : new structures.PartialGroup({ + id: data.creator.id, + name: data.creator.name + }, client); + this.product = { + id: data.product.id, + type: data.product.type, + publicDomain: data.product.isPublicDomain, + forSale: data.product.isForSale, + price: data.product.priceInRobux, + premiumPricing: { + discount: data.product.premiumPricing.premiumDiscountPercentage, + price: data.product.premiumPricing.premiumPriceInRobux + } + }; + } +} +exports.Bundle = Bundle; +class CollectibleAsset { + constructor(data, client) { + this.client = client; + this.assetId = data.assetId; + this.userAssetId = data.userAssetId; + this.name = data.name; + this.recentAveragePrice = data.recentAveragePrice; + this.originalPrice = data.originalPrice; + this.assetStock = data.assetStock; + this.buildersClubMembershipType = data.buildersClubMembershipType; + } +} +exports.CollectibleAsset = CollectibleAsset; +class CursorPage { + constructor(client, options, response, method) { + this.client = client; + this.options = options; + this.cursors = { + current: options.cursor || null, + next: response.nextPageCursor || null, + previous: response.previousPageCursor || null + }; + this.data = response.data; + this.method = method; + } + getNext(newOptions) { + if (!this.cursors.next) { + throw new Error("Attempted to iterate to next page, but no cursor was presented for the next page"); + } + const options = Object.assign(Object.assign(Object.assign({}, this.options), { cursor: this.cursors.next }), newOptions); + return this.method(options); + } + getPrevious(newOptions) { + if (!this.cursors.previous) { + throw new Error("Attempted to iterate to previous page, but no cursor was presented for the previous page"); + } + const options = Object.assign(Object.assign(Object.assign({}, this.options), { cursor: this.cursors.previous }), newOptions); + return this.method(options); + } +} +exports.CursorPage = CursorPage; +class Product { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.TargetId; + this.type = data.ProductType; + this.assetId = data.AssetId; + this.productId = data.ProductId; + this.name = data.Name; + this.description = data.Description; + this.assetTypeId = data.AssetTypeId; + this.creator = new structures.PartialUser({ + id: data.Creator.Id, + name: data.Creator.Name + }, client); + this.iconImageAssetId = data.IconImageAssetId; + this.created = new Date(data.Created); + this.updated = new Date(data.Updated); + this.price = data.PriceInRobux; + this.sales = data.Sales; + this.isNew = data.IsNew; + this.forSale = data.IsForSale; + this.publicDomain = data.IsPublicDomain; + this.limited = data.IsLimited; + this.limitedUnique = data.IsLimitedUnique; + this.remaining = data.Remaining || null; + this.minimumMembershipLevel = data.MinimumMembershipLevel; + } +} +exports.Product = Product; +class Trade { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.sender = new structures.PartialUser({ + id: data.user.id, + name: data.user.name + }, client); + this.created = new Date(data.created); + this.active = data.isActive; + this.status = data.status; + this.offers = data.offers.map((offerData) => ({ + robux: offerData.robux, + user: new structures.PartialUser({ + id: offerData.user.id, + name: offerData.user.name + }, client), + assets: offerData.userAssets.map((assetData) => new CollectibleAsset(assetData, client)) + })); + } +} +exports.Trade = Trade; diff --git a/dist/old_structures/Chat.d.ts b/dist/old_structures/Chat.d.ts new file mode 100644 index 000000000..e6a471dbf --- /dev/null +++ b/dist/old_structures/Chat.d.ts @@ -0,0 +1,118 @@ +import { Client } from "../client"; +import { PartialUser } from "./User"; +import { PartialGameUniverse } from "./Game"; +import { ChatSendGameLinkMessageOptions, ChatSendMessageOptions } from "../client/apis/ChatAPI"; +export interface ChatConversationOptions { + id: number; + title: string; + initiator: { + type: "User" | string; + targetId: number; + name: string | null; + displayName: string | null; + }; + hasUnreadMessages: boolean; + participants: { + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + conversationType: "OneToOneConversation" | string; + conversationTitle: { + titleForViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: string; + conversationUniverse: number | null; +} +export declare class ChatConversation { + client: Client; + id: number; + title: string; + initiator: PartialUser; + hasUnreadMessages: boolean; + members: PartialUser[]; + type: string; + conversationTitle: { + forViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: Date; + universe: PartialGameUniverse | null; + constructor(data: ChatConversationOptions, client: Client); + getMessages(amount?: number, startId?: string): Promise; + addUsers(users: number[]): Promise; + removeUser(userId: number): Promise; + markMessageRead(id: string): Promise; + markRead(): Promise; + rename(name: string): Promise; + getUnreadMessages(amount?: number): Promise; + getLatestMessages(amount?: number): Promise; + resetUniverse(): Promise; + sendGameLinkMessage(options: ChatSendGameLinkMessageOptions): Promise; + sendMessage(options: ChatSendMessageOptions): Promise; +} +export interface PartialChatConversationOptions { + id: number; + title?: string; +} +export declare class PartialChatConversation { + client: Client; + id: number; + title: string | null; + constructor(data: PartialChatConversationOptions, client: Client); +} +export interface ChatMessageOptions { + id: string; + senderType: string; + sent: string; + read: boolean; + messageType: "PlainText" | string; + decorators: string[]; + senderTargetId: number; + content: string; + link?: { + type: "Game"; + game: { + universeId: number; + }; + }; + eventBased?: { + type: "SetConversationUniverse"; + setConversationUniverse: { + actorUserId: number; + universeId: number; + }; + }; +} +export declare class ChatMessage { + client: Client; + id: string; + sender: PartialUser; + sentAt: Date; + type: "PlainText" | string; + decorators: string[]; + content: string; + constructor(data: ChatMessageOptions, client: Client); +} +export interface ChatMessageSentOptions { + content: string; + filteredForReceivers: boolean; + messageId: string; + sent: string; + messageType: "PlainText" | string; + resultType: "Success" | string; + statusMessage: string; +} +export declare class ChatMessageSent { + client: Client; + content: string; + filtered: boolean; + id: string; + sentAt: Date; + type: "PlainText" | string; + result: "Success" | string; + status: string; + constructor(data: ChatMessageSentOptions, client: Client); +} diff --git a/dist/old_structures/Chat.js b/dist/old_structures/Chat.js new file mode 100644 index 000000000..c59b762ce --- /dev/null +++ b/dist/old_structures/Chat.js @@ -0,0 +1,117 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ChatMessageSent = exports.ChatMessage = exports.PartialChatConversation = exports.ChatConversation = void 0; +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup +}); +class ChatConversation { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.title = data.title; + this.initiator = new structures.PartialUser({ + id: data.initiator.targetId, + name: data.initiator.name || undefined + }, client); + this.hasUnreadMessages = data.hasUnreadMessages; + this.members = data.participants.map((participantData) => new structures.PartialUser({ + id: participantData.targetId, + name: participantData.name + }, client)); + this.type = data.conversationType; + this.lastUpdated = new Date(data.lastUpdated); + this.universe = data.conversationUniverse + ? new structures.PartialGameUniverse({ + id: data.conversationUniverse + }, client) + : null; + this.conversationTitle = { + forViewer: data.conversationTitle.titleForViewer, + isDefaultTitle: data.conversationTitle.isDefaultTitle + }; + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getMessages(amount = 100, startId) { + return this.client.chat.getConversationMessages(this.id, amount, startId); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + addUsers(users) { + return this.client.chat.addUsersToConversation(this.id, users); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + removeUser(userId) { + return this.client.chat.removeUserFromConversation(this.id, userId); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + markMessageRead(id) { + return this.client.chat.markMessageRead(this.id, id); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + markRead() { + return this.client.chat.markConversationsRead([this.id]); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + rename(name) { + return this.client.chat.renameGroupConversation(this.id, name); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getUnreadMessages(amount = 100) { + return this.client.chat.getUnreadMessagesInConversations([this.id], amount); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getLatestMessages(amount = 100) { + return this.client.chat.getLatestMessagesInConversations([this.id], amount); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + resetUniverse() { + return this.client.chat.resetConversationUniverse(this.id); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendGameLinkMessage(options) { + return this.client.chat.sendGameLinkMessage(options); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendMessage(options) { + return this.client.chat.sendMessage(options); + } +} +exports.ChatConversation = ChatConversation; +class PartialChatConversation { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.title = data.title || null; + } +} +exports.PartialChatConversation = PartialChatConversation; +class ChatMessage { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.sender = new structures.PartialUser({ + id: data.senderTargetId + }, client); + this.sentAt = new Date(data.sent); + this.type = data.messageType; + this.decorators = data.decorators; + this.content = data.content; + } +} +exports.ChatMessage = ChatMessage; +class ChatMessageSent { + constructor(data, client) { + this.client = client; + this.id = data.messageId; + this.content = data.content; + this.filtered = data.filteredForReceivers; + this.sentAt = new Date(data.sent); + this.result = data.resultType; + this.status = data.statusMessage; + this.type = data.messageType; + } +} +exports.ChatMessageSent = ChatMessageSent; diff --git a/dist/old_structures/ClientUser.d.ts b/dist/old_structures/ClientUser.d.ts new file mode 100644 index 000000000..d9d60c0e9 --- /dev/null +++ b/dist/old_structures/ClientUser.d.ts @@ -0,0 +1,10 @@ +import { Client } from "../client"; +import { PartialUser } from "./User"; +export interface ClientUserOptions { + id: number; + name: string; +} +export declare class ClientUser extends PartialUser { + client: Client; + constructor(data: ClientUserOptions, client: Client); +} diff --git a/dist/old_structures/ClientUser.js b/dist/old_structures/ClientUser.js new file mode 100644 index 000000000..a131115a9 --- /dev/null +++ b/dist/old_structures/ClientUser.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ClientUser = void 0; +const User_1 = require("./User"); +class ClientUser extends User_1.PartialUser { + constructor(data, client) { + super(data, client); + this.client = client; + } +} +exports.ClientUser = ClientUser; diff --git a/dist/old_structures/Game.d.ts b/dist/old_structures/Game.d.ts new file mode 100644 index 000000000..6bb1c22d7 --- /dev/null +++ b/dist/old_structures/Game.d.ts @@ -0,0 +1,268 @@ +import { Client } from "../client"; +import { CreatorType, GameGenre, MorphAvatarType } from "../util/constants"; +import { PartialGroup } from "./Group"; +import { PartialUser } from "./User"; +import { DevelopGetPlaceStatisticsByTypeOptions } from "../client/apis/DevelopAPI"; +import { GamesGetGameServersByTypeOptions } from "../client/apis/GamesAPI"; +export interface GameBadgeBaseOptions { + id: number; + name?: string; +} +export declare class GameBadgeBase { + client: Client; + id: number; + name: string | null; + constructor(data: GameBadgeBaseOptions, client: Client); +} +export interface GameBadgeOptions { + id: number; + name: string; + description: string; + displayName: string; + displayDescription: string; + enabled: boolean; + iconImageId: number; + displayIconImageId: number; + created: string; + updated: string; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: { + id: number; + name: string; + rootPlaceId: number; + }; +} +export declare class GameBadge { + client: Client; + id: number; + name: string; + description: string; + displayedDescription: string; + displayedName: string; + enabled: boolean; + iconId: number; + displayedIconId: number; + created: Date; + updated: Date; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: PartialGameUniverse; + constructor(data: GameBadgeOptions, client: Client); +} +export declare type PartialGameBadgeOptions = GameBadgeBaseOptions; +export declare class PartialGameBadge extends GameBadgeBase { + constructor(data: PartialGameBadgeOptions, client: Client); +} +export interface GamePassOptions { + id: number; + name: string; + displayName: string; + productId: number; + price: number; +} +export declare class GamePass { + client: Client; + id: number; + name: string; + displayName: string; + productId: number; + price: number; + constructor(data: GamePassOptions, client: Client); +} +export interface BasePlaceOptions { + id: number; + name?: string; +} +export declare class BasePlace { + client: Client; + id: number; + name: string | null; + constructor(options: BasePlaceOptions, client: Client); + getCompatibilities(): Promise; + updatePlaceConfiguration(options: { + name: string; + description: string; + }): Promise; + getStatistics(options: Omit): Promise; + awardBadge(userId: number, badgeId: number): Promise; + getGameServers(options: Omit): Promise; +} +export interface PlaceOptions { + placeId: number; + name: string; + url: string; + description: string; + builder: string; + builderId: number; + isPlayable: boolean; + reasonProhibited: string; + universeId: number; + universeRootPlaceId: number; + price: number; + imageToken: string; +} +export declare class Place extends BasePlace { + description: string; + url: string; + creatorName: string; + creatorId: number; + playable: boolean; + prohibitedReason: string; + prohibited: boolean; + universe: PartialGameUniverse; + price: number; + imageToken: string; + constructor(data: PlaceOptions, client: Client); +} +interface PartialPlaceOptions { + id: number; + name?: string | null; +} +export declare class PartialPlace extends BasePlace { + constructor(data: PartialPlaceOptions, client: Client); +} +export interface PartialGameUniverseOptions { + id: number; + name?: string; + rootPlace?: { + id: number; + name?: string | null; + }; +} +export declare class PartialGameUniverse { + client: Client; + id: number; + name: string | null; + rootPlace: PartialPlace | null; + constructor(data: PartialGameUniverseOptions, client: Client); +} +export interface GameUniverseOptions { + id: number; + rootPlaceId: number; + name: string; + description: string; + creatorType: string; + creator: { + id: number; + name: string; + }; + price: number; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: string; + updated: string; + studioAccessToApisAllowed: boolean; + createVipServersAllowed: boolean; + universeAvatarType: string; + genre: string; +} +export declare class GameUniverse { + client: Client; + id: number; + rootPlace: PartialPlace | null; + name: string; + description: string; + creatorType: CreatorType; + creator: PartialGroup | PartialUser; + price: number | null; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: Date; + updated: Date; + studioAccessToAPIsEnabled: boolean; + createVIPServersEnabled: boolean; + avatarType: MorphAvatarType; + genre: GameGenre; + constructor(data: GameUniverseOptions, client: Client); +} +export interface PartialVIPServerOptions { + id: number; +} +export declare class PartialVIPServer { + client: Client; + id: number; + constructor(data: PartialVIPServerOptions, client: Client); +} +export interface VIPServerOptions { + id: number; + name: string; + game: { + id: number; + name: string; + rootPlace: { + id: number; + name: string; + }; + }; + joinCode: string; + active: boolean; + subscription: { + active: boolean; + expired: boolean; + expirationDate: string; + price: number; + }; + permissions: { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: { + id: number; + name: string; + displayName: string; + }[]; + }; +} +export declare class VIPServer { + client: Client; + id: number; + name: string; + game: PartialGameUniverse; + code: string; + active: boolean; + subscription: { + active: boolean; + expired: boolean; + expirationDate: Date; + price: number; + }; + permissions: { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: PartialUser[]; + }; + constructor(data: VIPServerOptions, client: Client); +} +export interface GameMediaDataOptions { + assetTypeId: number; + assetType: "Video" | "Image" | string; + imageId: number | null; + videoHash: string | null; + videoTitle: string | null; + approved: boolean; +} +export declare class GameMediaData { + client: Client; + assetTypeId: number; + assetType: "Video" | "Image" | string; + imageId: number | null; + videoHash: string | null; + videoTitle: string | null; + approved: boolean; + constructor(data: GameMediaDataOptions, client: Client); +} +export {}; diff --git a/dist/old_structures/Game.js b/dist/old_structures/Game.js new file mode 100644 index 000000000..c0196e162 --- /dev/null +++ b/dist/old_structures/Game.js @@ -0,0 +1,238 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GameMediaData = exports.VIPServer = exports.PartialVIPServer = exports.GameUniverse = exports.PartialGameUniverse = exports.PartialPlace = exports.Place = exports.BasePlace = exports.GamePass = exports.PartialGameBadge = exports.GameBadge = exports.GameBadgeBase = void 0; +const constants_1 = require("../util/constants"); +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup, + PartialPlace: require("./Game").PartialPlace +}); +class GameBadgeBase { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + } +} +exports.GameBadgeBase = GameBadgeBase; +class GameBadge { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name; + this.description = data.description; + this.displayedName = data.displayName; + this.displayedDescription = data.displayDescription; + this.enabled = data.enabled; + this.iconId = data.iconImageId; + this.displayedIconId = data.displayIconImageId; + this.created = new Date(data.created); + this.updated = new Date(data.updated); + this.statistics = { + pastDayAwardedCount: data.statistics.pastDayAwardedCount, + awardedCount: data.statistics.awardedCount, + winRatePercentage: data.statistics.winRatePercentage + }; + this.awardingUniverse = new structures.PartialGameUniverse({ + id: data.awardingUniverse.id, + rootPlace: { + id: data.awardingUniverse.rootPlaceId + }, + name: data.awardingUniverse.name + }, client); + } +} +exports.GameBadge = GameBadge; +class PartialGameBadge extends GameBadgeBase { + // Shut up eslint, it's not useless + // eslint-disable-next-line no-useless-constructor + constructor(data, client) { + super(data, client); + } +} +exports.PartialGameBadge = PartialGameBadge; +class GamePass { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name; + this.displayName = data.displayName; + this.productId = data.productId; + this.price = data.price; + } +} +exports.GamePass = GamePass; +class BasePlace { + constructor(options, client) { + this.client = client; + this.id = options.id; + this.name = options.name || null; + } + getCompatibilities() { + return this.client.apis.developAPI.getPlaceCompatibilities({ + placeId: this.id + }); + } + updatePlaceConfiguration(options) { + return this.client.apis.developAPI.updatePlaceConfiguration(Object.assign({ placeId: this.id }, options)); + } + getStatistics(options) { + return this.client.apis.developAPI.getPlaceStatistics(Object.assign({ placeId: this.id }, options)); + } + awardBadge(userId, badgeId) { + return this.client.apis.generalApi.awardBadge({ + placeId: this.id, + badgeId, + userId + }); + } + getGameServers(options) { + return this.client.apis.gamesAPI.getGameServersByType(Object.assign({ placeId: this.id }, options)); + } +} +exports.BasePlace = BasePlace; +class Place extends BasePlace { + constructor(data, client) { + const structures = retrieveStructures(); + super({ + id: data.placeId, + name: data.name + }, client); + this.description = data.description; + this.url = data.url; + this.creatorName = data.builder; + this.creatorId = data.builderId; + this.playable = data.isPlayable; + this.prohibitedReason = data.reasonProhibited; + this.prohibited = this.prohibitedReason.toLowerCase() !== "none"; + this.universe = new structures.PartialGameUniverse({ + id: data.universeId, + rootPlace: { + id: data.universeRootPlaceId + } + }, client); + this.price = data.price; + this.imageToken = data.imageToken; + } +} +exports.Place = Place; +class PartialPlace extends BasePlace { + constructor(data, client) { + super({ + id: data.id, + name: data.name || undefined + }, client); + } +} +exports.PartialPlace = PartialPlace; +class PartialGameUniverse { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name || null; + this.rootPlace = data.rootPlace + ? new structures.PartialPlace({ + id: data.rootPlace.id, + name: data.rootPlace.name || null + }, client) + : null; + } +} +exports.PartialGameUniverse = PartialGameUniverse; +class GameUniverse { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.rootPlace = data.rootPlaceId + ? new structures.PartialPlace({ + id: data.rootPlaceId + }, client) + : null; + this.name = data.name; + this.description = data.description; + this.creatorType = + data.creatorType.toLowerCase() === "group" + ? constants_1.CreatorType.GROUP + : constants_1.CreatorType.USER; + this.creator = + this.creatorType === constants_1.CreatorType.GROUP + ? new structures.PartialGroup({ + id: data.creator.id, + name: data.creator.name + }, client) + : new structures.PartialUser({ + id: data.creator.id, + name: data.creator.name + }, client); + this.price = data.price; + this.allowedGearGenres = data.allowedGearGenres; + this.allowedGearCategories = data.allowedGearCategories; + this.playing = data.playing; + this.visits = data.visits; + this.maxPlayers = data.maxPlayers; + this.created = new Date(data.created); + this.updated = new Date(data.updated); + this.studioAccessToAPIsEnabled = data.studioAccessToApisAllowed; + this.createVIPServersEnabled = data.createVipServersAllowed; + this.avatarType = + data.universeAvatarType.toLowerCase() === "morphtor6" + ? constants_1.MorphAvatarType.R6 + : constants_1.MorphAvatarType.R15; + this.genre = data.genre; + } +} +exports.GameUniverse = GameUniverse; +class PartialVIPServer { + constructor(data, client) { + this.client = client; + this.id = data.id; + } +} +exports.PartialVIPServer = PartialVIPServer; +class VIPServer { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name; + this.game = new structures.PartialGameUniverse({ + id: data.game.id, + name: data.game.name, + rootPlace: { + id: data.game.rootPlace.id, + name: data.game.rootPlace.name + } + }, client); + this.active = data.active; + this.code = data.joinCode; + this.subscription = { + active: data.subscription.active, + expired: data.subscription.expired, + expirationDate: new Date(data.subscription.expirationDate), + price: data.subscription.price + }; + this.permissions = { + clanAllowed: data.permissions.clanAllowed, + enemyClanId: data.permissions.enemyClanId, + friendsAllowed: data.permissions.friendsAllowed, + users: data.permissions.users.map((userData) => new structures.PartialUser(userData, client)) + }; + } +} +exports.VIPServer = VIPServer; +class GameMediaData { + constructor(data, client) { + this.client = client; + this.assetTypeId = data.assetTypeId; + this.assetType = data.assetType; + this.imageId = data.imageId; + this.videoHash = data.videoHash; + this.videoTitle = data.videoTitle; + this.approved = data.approved; + } +} +exports.GameMediaData = GameMediaData; diff --git a/dist/old_structures/Group.d.ts b/dist/old_structures/Group.d.ts new file mode 100644 index 000000000..9545d2058 --- /dev/null +++ b/dist/old_structures/Group.d.ts @@ -0,0 +1,272 @@ +import { Client } from "../client"; +import { DevelopGetGroupUniversesOptions } from "../client/apis/DevelopAPI"; +import { CursorPage } from "./Asset"; +import { PartialGameUniverse } from "./Game"; +import { EconomyGetGroupRevenueSummaryInTimeFrame, EconomyGetGroupRevenueSummaryInTimeFrameOptions, EconomyGetGroupTransactions, EconomyGetGroupTransactionsOptions } from "../client/apis/EconomyAPI"; +import { GroupsAcceptJoinRequest, GroupsAcceptJoinRequests, GroupsAcceptJoinRequestsOptions, GroupsAcceptRelationshipRequest, GroupsAcceptRelationshipRequests, GroupsAcceptRelationshipRequestsOptions, GroupsChangeOwner, GroupsClaimGroup, GroupsCreateRelationship, GroupsCreateRelationshipOptions, GroupsCreateRole, GroupsCreateRoleOptions, GroupsCreateWallPost, GroupsCreateWallPostOptions, GroupsDeclineJoinRequest, GroupsDeclineJoinRequests, GroupsDeclineRelationshipRequest, GroupsDeclineRelationshipRequests, GroupsDeclineRelationshipRequestsOptions, GroupsDeleteRelationship, GroupsDeleteRelationshipOptions, GroupsDeleteRole, GroupsDeleteSocialLink, GroupsDeleteWallPost, GroupsGetAllRolesPermissions, GroupsGetGroupPayouts, GroupsGetGroupRelationships, GroupsGetGroupRelationshipsOptions, GroupsGetGroupSettings, GroupsGetGuestPermissions, GroupsGetJoinRequest, GroupsGetJoinRequestsOptions, GroupsGetMembersOptions, GroupsGetMembersWithRoleOptions, GroupsGetRelationshipRequests, GroupsGetRelationshipRequestsOptions, GroupsGetRolePermissions, GroupsGetSelfGroupMembership, GroupsGetSocialLinks, GroupsGetWallPostsOptions, GroupsJoinGroup, GroupsJoinGroupOptions, GroupsKickMember, GroupsPayoutMembers, GroupsPayoutMembersOptions, GroupsPostSocialLink, GroupsPostSocialLinkOptions, GroupsRemovePrimaryGroup, GroupsSetPrimaryGroup, GroupsUpdateGroupDescription, GroupsUpdateGroupIcon, GroupsUpdateGroupSettings, GroupsUpdateGroupSettingsOptions, GroupsUpdateGroupStatus, GroupsUpdateMember, GroupsUpdateRecurringPayouts, GroupsUpdateRecurringPayoutsOptions, GroupsUpdateRole, GroupsUpdateRoleOptions, GroupsUpdateRolePermissions, GroupsUpdateRolePermissionsOptions, GroupsUpdateSocialLink, GroupsUpdateSocialLinkOptions } from "../client/apis/GroupsAPI"; +import { PartialUser, PartialUserOptions, UserBase } from "./User"; +declare type GroupRelationships = Omit & { + groupId: number; + relationshipType: T; + totalGroupCount: number; + groups: Group[]; + nextRowIndex: number; +}; +export interface GroupBaseOptions { + id: number; + name?: string; +} +export declare class GroupBase { + client: Client; + id: number; + name: string | null; + constructor(data: GroupBaseOptions, client: Client); + getUniverses(options?: Omit): Promise>; + /** + * Returns whether the authenticated user can manage the group or not + * @returns {Promise} + */ + canSelfManage(): Promise; + /** + * Gets the currently available funds in the group + * @returns {Promise} + */ + getFunds(): Promise; + getRevenueSummaryInTimeFrame(timeFrame: EconomyGetGroupRevenueSummaryInTimeFrameOptions["timeFrame"]): Promise; + getTransactions(options: Omit): Promise; + getAllies(maxItems?: number, startItem?: number): Promise>; + getEnemies(maxItems?: number, startItem?: number): Promise>; + getGroup(): Promise; + getMember(userId: number): Promise; + getIsMember(userId: number): Promise; + getSettings(): Promise; + updateSettings(options: Omit): Promise; + updateDescription(description: string): Promise; + updateShout(shout: string): Promise; + updateIcon(file: unknown): Promise; + declineJoinRequests(userIds: number[]): Promise; + getJoinRequests(options: Omit): Promise>; + acceptJoinRequests(options: Omit): Promise; + declineJoinRequest(userId: number): Promise; + getJoinRequest(userId: number): Promise; + acceptJoinRequest(userId: number): Promise; + getSelfMembership(): Promise; + getRoles(): Promise; + getMembersWithRole(options: Omit): Promise>; + getMembers(options: Omit): Promise>; + join(options: Omit): Promise; + getIsPendingJoin(): Promise; + changeOwner(userId: number): Promise; + claim(): Promise; + kickMember(userId: number): Promise; + updateMember(userId: number, roleId: number): Promise; + getPayouts(): Promise; + payoutMembers(options: Omit): Promise; + updateRecurringPayouts(options: Omit): Promise; + getRelationships(options: Omit): Promise; + declineRelationshipRequests(options: Omit): Promise; + getRelationshipRequests(options: Omit): Promise; + acceptRelationshipRequests(options: Omit): Promise; + deleteRelationship(options: Omit): Promise; + createRelationship(options: Omit): Promise; + acceptRelationshipRequest(type: "enemies" | "allies", withGroup: number): Promise; + declineRelationshipRequest(type: "enemies" | "allies", withGroup: number): Promise; + getRolePermissions(roleId: number): Promise; + updateRolePermissions(roleId: number, permissions: Omit): Promise; + getGuestPermissions(): Promise; + getAllRolesPermissions(): Promise; + getSocialLinks(): Promise; + createSocialLink(options: Omit): Promise; + deleteSocialLink(id: number): Promise; + updateSocialLink(options: Omit): Promise; + getWallPosts(options: Omit): Promise>; + createWallPost(options: Omit): Promise; + deleteWallPost(id: number): Promise; + getIsUserPrimaryGroup(userId: number): Promise; + removeAsPrimary(): Promise; + setAsPrimary(): Promise; + createRole(options: Omit): Promise; + deleteRole(roleId: number): Promise; + updateRole(roleId: number, options: Omit): Promise; +} +export interface PartialGroupOptions { + id: number; + name?: string; +} +export declare class PartialGroup extends GroupBase { + constructor(data: PartialGroupOptions, client: Client); +} +export interface GroupMemberOptions { + group: PartialGroupOptions; + name?: string | null; + /** + * The user id + */ + id: number; + role?: { + id: number; + name: string; + rank: number; + }; +} +export declare class GroupMember extends UserBase { + group: PartialGroup; + role: GroupRole | null; + constructor(data: GroupMemberOptions, client: Client); +} +export interface GroupOptions { + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + } | null; + shout: { + body: string; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + created: string; + updated: string; + } | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; +} +export declare class Group extends GroupBase { + description: string; + name: string; + owner: GroupMember | null; + shout: GroupShout | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; + constructor(data: GroupOptions, client: Client); +} +export interface GroupJoinRequestOptions { + id?: number; + user: PartialUserOptions; + group: PartialGroupOptions; + created: string; +} +export declare class GroupJoinRequest { + client: Client; + id: number | null; + user: PartialUser; + group: PartialGroup; + created: Date; + constructor(data: GroupJoinRequestOptions, client: Client); +} +export interface GroupRoleOptions { + id?: number; + name?: string; + rank?: number; + group: { + id: number; + name?: string; + }; +} +export declare class GroupRole { + client: Client; + id: number | null; + name: string | null; + rank: number | null; + group: PartialGroup; + constructor(data: GroupRoleOptions, client: Client); +} +export interface GroupRolePermissionsOptions { + groupId: number; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + permissions: { + groupPostsPermissions: { + viewWall: boolean; + postToWall: boolean; + deleteFromWall: boolean; + viewStatus: boolean; + postToStatus: boolean; + }; + groupMembershipPermissions: { + changeRank: boolean; + inviteMembers: boolean; + removeMembers: boolean; + }; + groupManagementPermissions: { + manageRelationships: boolean; + manageClan: boolean; + viewAuditLogs: boolean; + }; + groupEconomyPermissions: { + spendGroupFunds: boolean; + advertiseGroup: boolean; + createItems: boolean; + manageItems: boolean; + addGroupPlaces: boolean; + manageGroupGames: boolean; + viewGroupPayouts: boolean; + }; + }; +} +export declare class GroupRolePermissions { + client: Client; + group: PartialGroup; + role: GroupRole; + permissions: GroupRolePermissionsOptions["permissions"]; + constructor(data: GroupRolePermissionsOptions, client: Client); +} +export interface GroupShoutOptions { + content: string; + creator: { + id: number; + username: string; + }; + group: { + id: number; + name?: string; + }; +} +export declare class GroupShout { + client: Client; + content: string; + creator: PartialUser; + group: PartialGroup; + constructor(data: GroupShoutOptions, client: Client); +} +export interface GroupWallPostOptions { + id: number; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + group: { + id: number; + name?: string; + }; + body: string; + created: string; + updated: string; +} +export declare class GroupWallPost { + client: Client; + id: number; + creator: GroupMember; + content: string; + created: Date; + constructor(data: GroupWallPostOptions, client: Client); +} +export {}; diff --git a/dist/old_structures/Group.js b/dist/old_structures/Group.js new file mode 100644 index 000000000..8e61a3e13 --- /dev/null +++ b/dist/old_structures/Group.js @@ -0,0 +1,495 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GroupWallPost = exports.GroupShout = exports.GroupRolePermissions = exports.GroupRole = exports.GroupJoinRequest = exports.Group = exports.GroupMember = exports.PartialGroup = exports.GroupBase = void 0; +const User_1 = require("./User"); +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse +}); +class GroupBase { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + } + getUniverses(options) { + return this.client.apis.developAPI + .getGroupUniverses(Object.assign(Object.assign({}, options), { groupId: this.id })) + .then((response) => { + const CursorPageClass = require("./Asset").CursorPage; + const structures = retrieveStructures(); + return new CursorPageClass(this.client, options || {}, Object.assign(Object.assign({}, response), { data: response.data.map((universeData) => new structures.PartialGameUniverse({ + id: universeData.id, + name: universeData.name, + rootPlace: universeData.rootPlaceId + ? { + id: universeData.rootPlaceId + } + : undefined + }, this.client)) }), this.getUniverses); + }); + } + /** + * Returns whether the authenticated user can manage the group or not + * @returns {Promise} + */ + canSelfManage() { + return this.client.apis.developAPI + .getSelfManageableGroups() + .then((response) => !!response.data.find((data) => data.id === this.id)); + } + /** + * Gets the currently available funds in the group + * @returns {Promise} + */ + getFunds() { + return this.client.apis.economyAPI + .getGroupCurrency({ + groupId: this.id + }) + .then((response) => response.robux); + } + getRevenueSummaryInTimeFrame(timeFrame) { + return this.client.apis.economyAPI.getGroupRevenueByTime({ + groupId: this.id, + timeFrame + }); + } + getTransactions(options) { + return this.client.apis.economyAPI.getGroupTransactions(Object.assign({ groupId: this.id }, options)); + } + getAllies(maxItems = 100, startItem) { + return this.client.apis.groupsAPI + .getGroupRelationships({ + relationshipType: "allies", + groupId: this.id, + maxRows: maxItems, + startRowIndex: startItem + }) + .then((response) => (Object.assign(Object.assign({}, response), { relationshipType: "allies", groups: response.relatedGroups.map((groupData) => new Group(groupData, this.client)) }))); + } + getEnemies(maxItems = 100, startItem) { + return this.client.apis.groupsAPI + .getGroupRelationships({ + relationshipType: "enemies", + groupId: this.id, + maxRows: maxItems, + startRowIndex: startItem + }) + .then((response) => (Object.assign(Object.assign({}, response), { relationshipType: "enemies", groups: response.relatedGroups.map((groupData) => new Group(groupData, this.client)) }))); + } + getGroup() { + return this.client.getGroup(this.id); + } + getMember(userId) { + return this.client.apis.groupsAPI + .getUserGroups({ + userId + }) + .then((response) => { + const foundGroup = response.data.find((groupData) => groupData.group.id === this.id); + if (foundGroup) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define + return new GroupMember({ + id: userId, + role: foundGroup.role, + group: foundGroup.group + }, this.client); + } + else { + return null; + } + }); + } + getIsMember(userId) { + console.warn(`group.getIsMember() is deprecated and may be removed in the future. Please switch to group.getMember`); + return this.getMember(userId); + } + getSettings() { + return this.client.apis.groupsAPI.getGroupSettings({ + groupId: this.id + }); + } + updateSettings(options) { + return this.client.apis.groupsAPI.updateGroupSettings(Object.assign({ groupId: this.id }, options)); + } + updateDescription(description) { + return this.client.apis.groupsAPI.updateGroupDescription({ + description, + groupId: this.id + }); + } + updateShout(shout) { + return this.client.apis.groupsAPI.updateGroupStatus({ + groupId: this.id, + message: shout + }); + } + updateIcon(file) { + return this.client.apis.groupsAPI.updateGroupIcon({ + files: file, + groupId: this.id + }); + } + declineJoinRequests(userIds) { + return this.client.apis.groupsAPI.declineJoinRequests({ + groupId: this.id, + userIds + }); + } + getJoinRequests(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getJoinRequests(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getJoinRequests)); + } + acceptJoinRequests(options) { + return this.client.apis.groupsAPI.acceptJoinRequests(Object.assign({ groupId: this.id }, options)); + } + declineJoinRequest(userId) { + return this.client.apis.groupsAPI.declineJoinRequest({ + groupId: this.id, + userId + }); + } + getJoinRequest(userId) { + return this.client.apis.groupsAPI.getJoinRequest({ + groupId: this.id, + userId + }); + } + acceptJoinRequest(userId) { + return this.client.apis.groupsAPI.acceptJoinRequest({ + groupId: this.id, + userId + }); + } + getSelfMembership() { + return this.client.apis.groupsAPI.getSelfGroupMembership({ + groupId: this.id + }); + } + getRoles() { + return this.client.apis.groupsAPI + .getGroupRoles({ + groupId: this.id + }) + .then((response) => response.roles.map((roleData) => new GroupRole(Object.assign({ group: { + id: this.id, + name: this.name || undefined + } }, roleData), this.client))); + } + getMembersWithRole(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getMembersWithRole(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getMembersWithRole)); + } + getMembers(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getMembers(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getMembers)); + } + join(options) { + return this.client.apis.groupsAPI.joinGroup(Object.assign(Object.assign({ groupId: this.id }, options), { captchaProvider: options.captchaProvider || "PROVIDER_ARKOSELABS" })); + } + getIsPendingJoin() { + return this.client.apis.groupsAPI + .getSelfPendingGroupJoins() + .then((response) => (response.data.find((groupData) => groupData.id === this.id) && + true) || + false); + } + changeOwner(userId) { + return this.client.apis.groupsAPI.changeGroupOwner({ + groupId: this.id, + userId + }); + } + claim() { + return this.client.apis.groupsAPI.claimGroup({ + groupId: this.id + }); + } + kickMember(userId) { + return this.client.apis.groupsAPI.kickMember({ + groupId: this.id, + userId + }); + } + updateMember(userId, roleId) { + return this.client.apis.groupsAPI.updateMember({ + groupId: this.id, + roleId, + userId + }); + } + getPayouts() { + return this.client.apis.groupsAPI.getGroupPayouts({ + groupId: this.id + }); + } + payoutMembers(options) { + return this.client.apis.groupsAPI.payoutMembers(Object.assign({ groupId: this.id }, options)); + } + updateRecurringPayouts(options) { + return this.client.apis.groupsAPI.updateRecurringPayouts(Object.assign({ groupId: this.id }, options)); + } + getRelationships(options) { + return this.client.apis.groupsAPI.getGroupRelationships(Object.assign({ groupId: this.id }, options)); + } + declineRelationshipRequests(options) { + return this.client.apis.groupsAPI.declineRelationshipRequests(Object.assign({ groupId: this.id }, options)); + } + getRelationshipRequests(options) { + return this.client.apis.groupsAPI.getRelationshipRequests(Object.assign({ groupId: this.id }, options)); + } + acceptRelationshipRequests(options) { + return this.client.apis.groupsAPI.acceptRelationshipRequests(Object.assign({ groupId: this.id }, options)); + } + deleteRelationship(options) { + return this.client.apis.groupsAPI.deleteRelationship(Object.assign({ groupId: this.id }, options)); + } + createRelationship(options) { + return this.client.apis.groupsAPI.createRelationship(Object.assign({ groupId: this.id }, options)); + } + acceptRelationshipRequest(type, withGroup) { + return this.client.apis.groupsAPI.acceptRelationshipRequest({ + groupId: this.id, + relationshipType: type || "allies", + withGroup + }); + } + declineRelationshipRequest(type, withGroup) { + return this.client.apis.groupsAPI.declineRelationshipRequest({ + groupId: this.id, + relationshipType: type || "allies", + withGroup + }); + } + getRolePermissions(roleId) { + return this.client.apis.groupsAPI.getRolePermissions({ + groupId: this.id, + roleId + }); + } + updateRolePermissions(roleId, permissions) { + return this.client.apis.groupsAPI.updateRolePermissions(Object.assign({ groupId: this.id, roleId }, permissions)); + } + getGuestPermissions() { + return this.client.apis.groupsAPI.getGuestPermissions({ + groupId: this.id + }); + } + getAllRolesPermissions() { + return this.client.apis.groupsAPI.getAllRolesPermissions({ + groupId: this.id + }); + } + getSocialLinks() { + return this.client.apis.groupsAPI.getSocialLinks({ + groupId: this.id + }); + } + createSocialLink(options) { + return this.client.apis.groupsAPI.createSocialLink(Object.assign({ groupId: this.id }, options)); + } + deleteSocialLink(id) { + return this.client.apis.groupsAPI.deleteSocialLink({ + groupId: this.id, + id + }); + } + updateSocialLink(options) { + return this.client.apis.groupsAPI.updateSocialLink(Object.assign({ groupId: this.id }, options)); + } + getWallPosts(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getWallPosts(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getWallPosts)); + } + createWallPost(options) { + return this.client.apis.groupsAPI.createWallPost(Object.assign({ groupId: this.id }, options)); + } + deleteWallPost(id) { + return this.client.apis.groupsAPI.deleteWallPost({ + groupId: this.id, + id + }); + } + getIsUserPrimaryGroup(userId) { + return (this.client.apis.groupsAPI + .getUserPrimaryGroup({ + userId + }) + // eslint-disable-next-line @typescript-eslint/no-use-before-define + .then((response) => response && response.group && response.role + ? new GroupMember({ + group: response.group, + role: { + id: response.role.id, + name: response.role.name, + rank: response.role.rank + }, + id: userId + }, this.client) + : null)); + } + removeAsPrimary() { + return this.client.apis.groupsAPI.removePrimaryGroup(); + } + setAsPrimary() { + return this.client.apis.groupsAPI.setPrimaryGroup({ + groupId: this.id + }); + } + createRole(options) { + return this.client.apis.groupsAPI.createRole(Object.assign({ groupId: this.id }, options)); + } + deleteRole(roleId) { + return this.client.apis.groupsAPI.deleteRole({ + groupId: this.id, + roleId + }); + } + updateRole(roleId, options) { + return this.client.apis.groupsAPI.updateRole(Object.assign({ groupId: this.id, roleId }, options)); + } +} +exports.GroupBase = GroupBase; +class PartialGroup extends GroupBase { + // Shut up eslint, this is not useless either + // eslint-disable-next-line no-useless-constructor + constructor(data, client) { + super(data, client); + } +} +exports.PartialGroup = PartialGroup; +class GroupMember extends User_1.UserBase { + constructor(data, client) { + super({ + name: data.name, + id: data.id + }, client); + this.group = new PartialGroup(data.group, client); + // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.role = data.role + ? new GroupRole({ + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + name: this.name || undefined, + id: this.id + } + }, client) + : null; + } +} +exports.GroupMember = GroupMember; +class Group extends GroupBase { + constructor(data, client) { + super(data, client); + this.description = data.description; + this.name = data.name; + this.owner = data.owner + ? new GroupMember({ + id: data.owner.userId, + name: data.owner.username, + group: this + }, client) + : null; + this.shout = data.shout + ? new GroupShout({ + content: data.shout.body, + creator: { + id: data.shout.poster.userId, + username: data.shout.poster.username + }, + group: { + id: this.id, + name: this.name || undefined + } + }, client) + : null; + this.memberCount = data.memberCount; + this.isBuildersClubOnly = data.isBuildersClubOnly; + this.publicEntryAllowed = data.publicEntryAllowed; + this.isLocked = data.isLocked; + } +} +exports.Group = Group; +class GroupJoinRequest { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id || null; + this.user = new structures.PartialUser(data.user, client); + this.group = new PartialGroup(data.group, client); + this.created = new Date(data.created); + } +} +exports.GroupJoinRequest = GroupJoinRequest; +class GroupRole { + constructor(data, client) { + this.client = client; + this.id = data.id || null; + this.name = data.name || null; + this.rank = data.rank || null; + this.group = new PartialGroup({ + id: data.group.id, + name: data.group.name + }, client); + } +} +exports.GroupRole = GroupRole; +class GroupRolePermissions { + constructor(data, client) { + this.client = client; + this.group = new PartialGroup({ + id: data.groupId + }, client); + this.role = new GroupRole({ + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + id: this.group.id + } + }, client); + this.permissions = data.permissions; + } +} +exports.GroupRolePermissions = GroupRolePermissions; +class GroupShout { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.content = data.content; + this.creator = new structures.PartialUser(data.creator, client); + this.group = new PartialGroup({ + id: data.group.id, + name: data.group.name + }, client); + } +} +exports.GroupShout = GroupShout; +class GroupWallPost { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.content = data.body; + this.creator = new GroupMember({ + group: { + id: data.group.id, + name: data.group.name + }, + id: data.poster.userId, + name: data.poster.username + }, client); + this.created = new Date(data.created); + } +} +exports.GroupWallPost = GroupWallPost; diff --git a/dist/old_structures/User.d.ts b/dist/old_structures/User.d.ts new file mode 100644 index 000000000..3711a8f81 --- /dev/null +++ b/dist/old_structures/User.d.ts @@ -0,0 +1,118 @@ +import { Client } from "../client"; +import { EnumUserPresence } from "../interfaces/GeneralInterfaces"; +export interface UserBaseOptions { + id: number; + name?: string | null; + displayName?: string; + membership?: boolean; +} +export declare class UserBase { + client: Client; + id: number; + name: string | null; + displayName: string | null; + membership: unknown; + constructor(data: UserBaseOptions, client: Client); +} +export interface FriendRequestOptions { + description: string; + created: string; + isBanned: boolean; + id: number; + name: string; +} +export declare class FriendRequest { + client: Client; + user: PartialUser; + isBanned: boolean; + created: Date; + description: string; + constructor(data: FriendRequestOptions, client: Client); +} +export interface PartialUserOptions { + id: number; + name?: string; + displayName?: string; +} +export declare class PartialUser extends UserBase { + constructor(data: PartialUserOptions, client: Client); +} +export interface UserOptions { + id: number; + name: string; + displayName: string; + friendsCount: number; + presenceType: EnumUserPresence; + lastLocation: string | null; + userStatus: string | null; + userStatusDate: string | null; + userPlaceId: number | null; + followersCount: number; + followingsCount: number; + isVieweeBlocked: boolean; + isViewerBlocked: boolean; + areFriends: boolean; + canFollow: boolean; + canMessage: boolean; + canFriend: boolean; + canTrade: boolean; + incomingFriendRequest: boolean; + sentFriendRequest: boolean; + canSeeFavorites: boolean; + messagesDisabled: boolean; + canSeeInventory: boolean; + headShotImage: { + final: boolean; + url: string; + retryUrl: string | null; + userId: number; + endpointType: "Avatar" | string; + }; + previousUsernames: string; +} +export declare class User extends PartialUser { + friendsCount: number; + presenceType: EnumUserPresence; + lastLocation: string | null; + status: string | null; + statusDate: Date | null; + placeId: number | null; + followersCount: number; + followingCount: number; + /** + * If the authenticated user has blocked the user + */ + isBlocked: boolean; + /** + * If the user has blocked the authenticated user + */ + hasBlocked: boolean; + /** + * If the authenticated user and the target user are friends + */ + areFriends: boolean; + canFollow: boolean; + canMessage: boolean; + canFriend: boolean; + /** + * If the authenticated user has sent a friend request to this user + */ + sentFriendRequest: boolean; + /** + * If the target user has sent a friend request to the authenticated user + */ + incomingFriendRequest: boolean; + messagesDisabled: boolean; + canSeeFavorites: boolean; + canTrade: boolean; + canSeeInventory: boolean; + previousNames: string[]; + headshotImage: { + final: boolean; + url: string | null; + retryUrl: string | null; + userId: number; + endpointType: "Avatar" | string; + }; + constructor(data: UserOptions, client: Client); +} diff --git a/dist/old_structures/User.js b/dist/old_structures/User.js new file mode 100644 index 000000000..297c18608 --- /dev/null +++ b/dist/old_structures/User.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.User = exports.PartialUser = exports.FriendRequest = exports.UserBase = void 0; +class UserBase { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + this.displayName = data.displayName || null; + this.membership = data.membership || null; + } +} +exports.UserBase = UserBase; +class FriendRequest { + constructor(data, client) { + this.client = client; + this.user = new PartialUser({ + id: data.id, + name: data.name + }, client); + this.created = new Date(data.created); + this.description = data.description; + this.isBanned = data.isBanned; + } +} +exports.FriendRequest = FriendRequest; +class PartialUser extends UserBase { + // Eslint, I'm getting tired of you complaining about useless constructors. + // You are useless + // eslint-disable-next-line no-useless-constructor + constructor(data, client) { + super(data, client); + } +} +exports.PartialUser = PartialUser; +class User extends PartialUser { + constructor(data, client) { + super(data, client); + this.friendsCount = data.friendsCount; + this.presenceType = data.presenceType; + this.lastLocation = data.lastLocation || null; + this.status = data.userStatus || null; + const matchedStatusTimestamp = data.userStatusDate + ? data.userStatusDate.match(/\((.*)\)/) + : null; + this.statusDate = matchedStatusTimestamp + ? new Date(parseInt(matchedStatusTimestamp[1])) + : null; + this.placeId = data.userPlaceId; + this.followersCount = data.followersCount; + this.followingCount = data.followingsCount; + this.isBlocked = data.isVieweeBlocked; + this.hasBlocked = data.isViewerBlocked; + this.areFriends = data.areFriends; + this.canFollow = data.canFollow; + this.canMessage = data.canMessage; + this.canFriend = data.canFriend; + this.sentFriendRequest = data.sentFriendRequest; + this.incomingFriendRequest = data.incomingFriendRequest; + this.messagesDisabled = data.messagesDisabled; + this.canSeeFavorites = data.canSeeFavorites; + this.canTrade = data.canTrade; + this.canSeeInventory = data.canSeeInventory; + this.previousNames = data.previousUsernames.split("\r\n"); + this.headshotImage = { + final: data.headShotImage.final, + url: data.headShotImage.url, + retryUrl: data.headShotImage.retryUrl, + userId: data.headShotImage.userId, + endpointType: data.headShotImage.endpointType + }; + } +} +exports.User = User; diff --git a/dist/old_structures/index.d.ts b/dist/old_structures/index.d.ts new file mode 100644 index 000000000..9f31e7296 --- /dev/null +++ b/dist/old_structures/index.d.ts @@ -0,0 +1,6 @@ +export * from "./Asset"; +export * from "./Chat"; +export * from "./ClientUser"; +export * from "./Game"; +export * from "./Group"; +export * from "./User"; diff --git a/dist/old_structures/index.js b/dist/old_structures/index.js new file mode 100644 index 000000000..693bf3bad --- /dev/null +++ b/dist/old_structures/index.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +(0, tslib_1.__exportStar)(require("./Asset"), exports); +(0, tslib_1.__exportStar)(require("./Chat"), exports); +(0, tslib_1.__exportStar)(require("./ClientUser"), exports); +(0, tslib_1.__exportStar)(require("./Game"), exports); +(0, tslib_1.__exportStar)(require("./Group"), exports); +(0, tslib_1.__exportStar)(require("./User"), exports); diff --git a/dist/structures/Asset.d.ts b/dist/structures/Asset.d.ts new file mode 100644 index 000000000..dc251898b --- /dev/null +++ b/dist/structures/Asset.d.ts @@ -0,0 +1,209 @@ +import { Client } from "../client"; +import { CreatorType } from "../util/constants"; +import { PartialGameUniverse, PartialGameUniverseOptions } from "./Game"; +import { PartialUser, PartialUserOptions } from "./User"; +import { CatalogProductDetails } from "../client/apis/CatalogAPI"; +import { PartialGroup, PartialGroupOptions } from "./Group"; +export interface Structures { + PartialUser: new (data: PartialUserOptions, client: Client) => PartialUser; + PartialGameUniverse: new (data: PartialGameUniverseOptions, client: Client) => PartialGameUniverse; + PartialGroup: new (data: PartialGroupOptions, client: Client) => PartialGroup; +} +export interface AssetVersionOptions { + Id: number; + AssetId: number; + VersionNumber: number; + ParentAssetVersionId: number; + CreatorType: unknown; + CreatingUniverseId: number | null; + Created: string; + Updated: string; +} +export declare class AssetVersion { + client: Client; + id: number; + assetId: number; + versionNumber: number; + parentAssetVersionId: number | null; + creatorType: CreatorType; + createdForUniverse: PartialGameUniverse | null; + creator: PartialUser; + created: Date; + updated: Date; + constructor(data: any, client: Client); +} +export interface BundleOptions { + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; + id: number; + name: string; + type: string; + }[]; + creator: { + id: number; + name: string; + type: string; + }; + product: CatalogProductDetails; +} +export declare class Bundle { + client: Client; + id: number; + name: string; + description: string; + bundleType: string; + items: { + owned: boolean; + id: number; + name: string; + type: string; + }[]; + creatorType: CreatorType; + creator: PartialUser | PartialGroup; + product: { + id: number; + type: string; + publicDomain: boolean; + forSale: boolean; + price: number; + premiumPricing: { + discount: number; + price: number; + }; + }; + constructor(data: BundleOptions, client: Client); +} +export interface CollectibleAssetOptions { + userAssetId: number; + serialNumber: number | null; + assetId: number; + name: string; + recentAveragePrice: number | null; + originalPrice: number | null; + assetStock: number | null; + buildersClubMembershipType: number; +} +export declare class CollectibleAsset { + client: Client; + assetId: number; + userAssetId: number; + name: string; + recentAveragePrice: number | null; + originalPrice: number | null; + assetStock: number | null; + buildersClubMembershipType: number; + constructor(data: CollectibleAssetOptions, client: Client); +} +export declare type CursorPageOptions = { + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; +}; +declare type CursorPageResponse = { + data: unknown; + previousPageCursor: string | null; + nextPageCursor: string | null; +}; +export declare class CursorPage { + client: Client; + options: CursorPageOptions; + cursors: { + current: string | null; + next: string | null; + previous: string | null; + }; + data: T[]; + method: any; + constructor(client: Client, options: CursorPageOptions, response: CursorPageResponse, method: any); + getNext(newOptions?: CursorPageOptions): Promise>; + getPrevious(newOptions?: CursorPageOptions): Promise>; +} +export interface ProductOptions { + TargetId: number; + ProductType: string; + AssetId: number; + ProductId: number; + Name: string; + Description: string; + AssetTypeId: number; + Creator: { + Id: number; + Name: string; + }; + IconImageAssetId: number; + Created: string; + Updated: string; + PriceInRobux: number; + PriceInTickets: null; + Sales: number; + IsNew: boolean; + IsForSale: boolean; + IsPublicDomain: boolean; + IsLimited: boolean; + IsLimitedUnique: boolean; + Remaining: number | null; + MinimumMembershipLevel: number; +} +export declare class Product { + client: Client; + id: number; + type: string; + assetId: number; + productId: number; + name: string; + description: string; + assetTypeId: number; + creator: PartialUser; + iconImageAssetId: number; + created: Date; + updated: Date; + price: number; + sales: number; + isNew: boolean; + forSale: boolean; + publicDomain: boolean; + limited: boolean; + limitedUnique: boolean; + remaining: number | null; + minimumMembershipLevel: number; + constructor(data: ProductOptions, client: Client); +} +export interface TradeOptions { + id: number; + offers: { + user: { + id: number; + name: string; + displayName: string; + }; + userAssets: CollectibleAssetOptions[]; + robux: number; + }[]; + user: { + id: number; + name: string; + displayName: string; + }; + created: string; + isActive: boolean; + status: "Completed" | string; +} +export declare class Trade { + client: Client; + id: number; + offers: { + user: PartialUser; + assets: CollectibleAsset[]; + robux: number; + }[]; + sender: PartialUser; + created: Date; + active: boolean; + status: string; + constructor(data: TradeOptions, client: Client); +} +export {}; diff --git a/dist/structures/Asset.js b/dist/structures/Asset.js new file mode 100644 index 000000000..074550237 --- /dev/null +++ b/dist/structures/Asset.js @@ -0,0 +1,167 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Trade = exports.Product = exports.CursorPage = exports.CollectibleAsset = exports.Bundle = exports.AssetVersion = void 0; +const constants_1 = require("../util/constants"); +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup +}); +class AssetVersion { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.Id; + this.assetId = data.AssetId; + this.versionNumber = data.VersionNumber; + this.parentAssetVersionId = data.ParentAssetVersionId; + this.creatorType = data.CreatorType; + this.creator = new structures.PartialUser({ + id: data.CreatorTargetId + }, this.client); + this.createdForUniverse = data.CreatingUniverseId + ? new structures.PartialGameUniverse({ + id: data.CreatingUniverseId + }, client) + : null; + this.created = new Date(data.Created); + this.updated = new Date(data.Updated); + } +} +exports.AssetVersion = AssetVersion; +class Bundle { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name; + this.description = data.description; + this.bundleType = data.bundleType; + this.items = data.items.map((itemData) => ({ + owned: itemData.owned, + id: itemData.id, + name: itemData.name, + type: itemData.type + })); + this.creatorType = + data.creator.type.toLowerCase() === "group" + ? constants_1.CreatorType.GROUP + : constants_1.CreatorType.USER; + this.creator = + this.creatorType === constants_1.CreatorType.USER + ? new structures.PartialUser({ + id: data.creator.id, + name: data.creator.name + }, client) + : new structures.PartialGroup({ + id: data.creator.id, + name: data.creator.name + }, client); + this.product = { + id: data.product.id, + type: data.product.type, + publicDomain: data.product.isPublicDomain, + forSale: data.product.isForSale, + price: data.product.priceInRobux, + premiumPricing: { + discount: data.product.premiumPricing.premiumDiscountPercentage, + price: data.product.premiumPricing.premiumPriceInRobux + } + }; + } +} +exports.Bundle = Bundle; +class CollectibleAsset { + constructor(data, client) { + this.client = client; + this.assetId = data.assetId; + this.userAssetId = data.userAssetId; + this.name = data.name; + this.recentAveragePrice = data.recentAveragePrice; + this.originalPrice = data.originalPrice; + this.assetStock = data.assetStock; + this.buildersClubMembershipType = data.buildersClubMembershipType; + } +} +exports.CollectibleAsset = CollectibleAsset; +class CursorPage { + constructor(client, options, response, method) { + this.client = client; + this.options = options; + this.cursors = { + current: options.cursor || null, + next: response.nextPageCursor || null, + previous: response.previousPageCursor || null + }; + this.data = response.data; + this.method = method; + } + getNext(newOptions) { + if (!this.cursors.next) { + throw new Error("Attempted to iterate to next page, but no cursor was presented for the next page"); + } + const options = Object.assign(Object.assign(Object.assign({}, this.options), { cursor: this.cursors.next }), newOptions); + return this.method(options); + } + getPrevious(newOptions) { + if (!this.cursors.previous) { + throw new Error("Attempted to iterate to previous page, but no cursor was presented for the previous page"); + } + const options = Object.assign(Object.assign(Object.assign({}, this.options), { cursor: this.cursors.previous }), newOptions); + return this.method(options); + } +} +exports.CursorPage = CursorPage; +class Product { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.TargetId; + this.type = data.ProductType; + this.assetId = data.AssetId; + this.productId = data.ProductId; + this.name = data.Name; + this.description = data.Description; + this.assetTypeId = data.AssetTypeId; + this.creator = new structures.PartialUser({ + id: data.Creator.Id, + name: data.Creator.Name + }, client); + this.iconImageAssetId = data.IconImageAssetId; + this.created = new Date(data.Created); + this.updated = new Date(data.Updated); + this.price = data.PriceInRobux; + this.sales = data.Sales; + this.isNew = data.IsNew; + this.forSale = data.IsForSale; + this.publicDomain = data.IsPublicDomain; + this.limited = data.IsLimited; + this.limitedUnique = data.IsLimitedUnique; + this.remaining = data.Remaining || null; + this.minimumMembershipLevel = data.MinimumMembershipLevel; + } +} +exports.Product = Product; +class Trade { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.sender = new structures.PartialUser({ + id: data.user.id, + name: data.user.name + }, client); + this.created = new Date(data.created); + this.active = data.isActive; + this.status = data.status; + this.offers = data.offers.map((offerData) => ({ + robux: offerData.robux, + user: new structures.PartialUser({ + id: offerData.user.id, + name: offerData.user.name + }, client), + assets: offerData.userAssets.map((assetData) => new CollectibleAsset(assetData, client)) + })); + } +} +exports.Trade = Trade; diff --git a/dist/structures/BaseUser.d.ts b/dist/structures/BaseUser.d.ts new file mode 100644 index 000000000..dcd1c2aab --- /dev/null +++ b/dist/structures/BaseUser.d.ts @@ -0,0 +1,109 @@ +import { AccountInformationPromotionChannels, AccountInformationRobloxBadges, Client, EconomyGetSelfCurrency, FriendsGetUserFollowers, FriendsGetUserFriends, ItemType, PageSortLimit, PageSortOrder, PresenceGetUsersPresence, UsersUserNameHistory } from ".."; +import { CursorPage } from "./CursorPage"; +export declare type BaseUserOwnedBadge = { + badgeId: number; + awardedDate: Date; + awardedDateString: string; +}; +export declare type BaseUserGroupRole = { + groupId: number; + roleId: number; + rank: number; + roleName: string; +}; +/** + * Represents a Roblox user ID and gives direct access to various user-related APIs. + */ +export declare class BaseUser { + #private; + /** + * @param {Client} client The Bloxy Client + * @param {number} userId The user ID + */ + constructor(client: Client, userId: number); + get client(): Client; + get userId(): number; + /** + * Return the username history of the user. + */ + getUsernameHistory(): Promise; + /** + * Returns the users current presence. + */ + getPresence(): Promise; + /** + * Returns the user's friends. + * @param limit The number of friends to return + * @param cursor The cursor to continue at + */ + getFriends(limit?: PageSortLimit, cursor?: string): Promise; + /** + * Returns the user's robux amount. The BaseUser must be the currently authenticated user, or else this function throws an error. + */ + getCurrency(): Promise; + /** + * Returns if the user has Roblox Premium or not. + */ + hasPremium(): Promise; + /** + * Returns if the user owns the specified item. + * @param {ItemType} itemType The type of item to check + * @param {number} itemId The ID of the item to check + */ + ownsItem(itemType: ItemType, itemId: number): Promise; + /** + * Returns if the user owns the specific asset. + * @param assetId The ID of the asset to check + */ + ownsAsset(assetId: number): Promise; + /** + * Returns if the user owns the specific gamepass. + * @param gamepassId The ID of the gamepass to check + */ + ownsGamepass(gamepassId: number): Promise; + /** + * Returns the date the specified badges got awarded to the user. + * @param badgeIds The badge IDs to check + */ + getBadgeAwardedDates(badgeIds: number[]): Promise; + /** + * Returns the role of the groups the user is in. + */ + getGroupRoles(): Promise; + /** + * Returns the roblox badges the user has. + */ + getRobloxBadges(): Promise; + /** + * Returns the user's promotion channels + */ + getPromotionChannels(): Promise; + /** + * Returns the user's friend count + */ + getFriendCount(): Promise; + /** + * Returns the user's follower count + */ + getFollowerCount(): Promise; + /** + * Returns the user's following count + */ + getFollowingCount(): Promise; + /** + * Returns the user's followers + * @param limit The number of followers to return + * @param sortOrder The sort order of the followers + * @param cursor The cursor to continue at + */ + getFollowers(limit?: PageSortLimit, sortOrder?: PageSortOrder, cursor?: string): Promise>; + /** + * Returns the user's followings + * @param limit The number of followings to return + * @param sortOrder The sort order of the followings + * @param cursor The cursor to continue at + */ + getFollowings(limit?: PageSortLimit, sortOrder?: PageSortOrder, cursor?: string): Promise; +} diff --git a/dist/structures/BaseUser.js b/dist/structures/BaseUser.js new file mode 100644 index 000000000..917165037 --- /dev/null +++ b/dist/structures/BaseUser.js @@ -0,0 +1,212 @@ +"use strict"; +var _BaseUser_client, _BaseUser_userId; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseUser = void 0; +const tslib_1 = require("tslib"); +const CursorPage_1 = require("./CursorPage"); +/** + * Represents a Roblox user ID and gives direct access to various user-related APIs. + */ +class BaseUser { + /** + * @param {Client} client The Bloxy Client + * @param {number} userId The user ID + */ + constructor(client, userId) { + _BaseUser_client.set(this, void 0); + _BaseUser_userId.set(this, void 0); + (0, tslib_1.__classPrivateFieldSet)(this, _BaseUser_client, client, "f"); + (0, tslib_1.__classPrivateFieldSet)(this, _BaseUser_userId, userId, "f"); + } + get client() { + return (0, tslib_1.__classPrivateFieldGet)(this, _BaseUser_client, "f"); + } + get userId() { + return (0, tslib_1.__classPrivateFieldGet)(this, _BaseUser_userId, "f"); + } + /** + * Return the username history of the user. + */ + getUsernameHistory() { + return this.client.apis.usersAPI.getUserNameHistory({ + userId: this.userId + }); + } + /** + * Returns the users current presence. + */ + getPresence() { + return this.client.apis.presenceAPI + .getUsersPresences({ + userIds: [this.userId] + }) + .then((presence) => presence.userPresences[0]); + } + /** + * Returns the user's friends. + * @param limit The number of friends to return + * @param cursor The cursor to continue at + */ + getFriends(limit = 10, cursor) { + return this.client.apis.friendsAPI.getUserFriends({ + userId: this.userId, + limit, + cursor + }); + } + /** + * Returns the user's robux amount. The BaseUser must be the currently authenticated user, or else this function throws an error. + */ + getCurrency() { + var _a; + if (((_a = this.client.user) === null || _a === void 0 ? void 0 : _a.id) !== this.userId) { + throw new Error("This function can only be called with the currently authenticated user"); + } + return this.client.apis.economyAPI.getSelfCurrency({ userId: this.userId }); + } + /** + * Returns if the user has Roblox Premium or not. + */ + hasPremium() { + return this.client.apis.premiumFeaturesAPI.validateUserMembership({ + userId: this.userId + }); + } + /** + * Returns if the user owns the specified item. + * @param {ItemType} itemType The type of item to check + * @param {number} itemId The ID of the item to check + */ + ownsItem(itemType, itemId) { + return this.client.apis.inventoryAPI + .getUserItemsByTypeAndTargetId({ + userId: this.userId, + itemType, + itemTargetId: itemId + }) + .then((response) => response.data.length > 0); + } + /** + * Returns if the user owns the specific asset. + * @param assetId The ID of the asset to check + */ + ownsAsset(assetId) { + return this.ownsItem("Asset", assetId); + } + /** + * Returns if the user owns the specific gamepass. + * @param gamepassId The ID of the gamepass to check + */ + ownsGamepass(gamepassId) { + return this.ownsItem("GamePass", gamepassId); + } + /** + * Returns the date the specified badges got awarded to the user. + * @param badgeIds The badge IDs to check + */ + getBadgeAwardedDates(badgeIds) { + return this.client.apis.badgesAPI + .getUserBadgesAwardedDates({ + userId: this.userId, + badgeIds + }) + .then((response) => response.data.map((badge) => ({ + badgeId: badge.badgeId, + awardedDate: new Date(badge.awardedDate), + awardedDateString: badge.awardedDate + }))); + } + /** + * Returns the role of the groups the user is in. + */ + getGroupRoles() { + return this.client.apis.groupsAPI + .getUserGroups({ + userId: this.userId + }) + .then((response) => response.data.map((groupMembership) => ({ + groupId: groupMembership.group.id, + roleId: groupMembership.role.id, + rank: groupMembership.role.rank, + roleName: groupMembership.role.name + }))); + } + /** + * Returns the roblox badges the user has. + */ + getRobloxBadges() { + return this.client.apis.accountInformationAPI.getRobloxBadges({ + userId: this.userId + }); + } + /** + * Returns the user's promotion channels + */ + getPromotionChannels() { + return this.client.apis.accountInformationAPI.getUserPromotionChannels({ + userId: this.userId + }); + } + /** + * Returns the user's friend count + */ + getFriendCount() { + return this.client.apis.friendsAPI + .getUserFriendsCount({ + userId: this.userId + }) + .then((response) => response.count); + } + /** + * Returns the user's follower count + */ + getFollowerCount() { + return this.client.apis.friendsAPI + .getUserFollowersCount({ + userId: this.userId + }) + .then((response) => response.count); + } + /** + * Returns the user's following count + */ + getFollowingCount() { + return this.client.apis.friendsAPI + .getUserFollowingCount({ + userId: this.userId + }) + .then((response) => response.count); + } + /** + * Returns the user's followers + * @param limit The number of followers to return + * @param sortOrder The sort order of the followers + * @param cursor The cursor to continue at + */ + getFollowers(limit = 10, sortOrder = "Asc", cursor) { + return this.client.apis.friendsAPI + .getUserFollowers({ + userId: this.userId, + limit, + sortOrder, + cursor + }) + .then((response) => new CursorPage_1.CursorPage({ limit, sortOrder, cursor }, { userId: this.userId }, response, (0, CursorPage_1.contextCall)(this.client.apis.friendsAPI, this.client.apis.friendsAPI.getUserFollowers))); + } + /** + * Returns the user's followings + * @param limit The number of followings to return + * @param sortOrder The sort order of the followings + * @param cursor The cursor to continue at + */ + getFollowings(limit = 10, sortOrder = "Asc", cursor) { + return this.client.apis.friendsAPI.getUserFollowing({ + userId: this.userId, + limit, + sortOrder, + cursor + }); + } +} +exports.BaseUser = BaseUser; +_BaseUser_client = new WeakMap(), _BaseUser_userId = new WeakMap(); diff --git a/dist/structures/Chat.d.ts b/dist/structures/Chat.d.ts new file mode 100644 index 000000000..e6a471dbf --- /dev/null +++ b/dist/structures/Chat.d.ts @@ -0,0 +1,118 @@ +import { Client } from "../client"; +import { PartialUser } from "./User"; +import { PartialGameUniverse } from "./Game"; +import { ChatSendGameLinkMessageOptions, ChatSendMessageOptions } from "../client/apis/ChatAPI"; +export interface ChatConversationOptions { + id: number; + title: string; + initiator: { + type: "User" | string; + targetId: number; + name: string | null; + displayName: string | null; + }; + hasUnreadMessages: boolean; + participants: { + type: "User" | string; + targetId: number; + name: string; + displayName: string; + }[]; + conversationType: "OneToOneConversation" | string; + conversationTitle: { + titleForViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: string; + conversationUniverse: number | null; +} +export declare class ChatConversation { + client: Client; + id: number; + title: string; + initiator: PartialUser; + hasUnreadMessages: boolean; + members: PartialUser[]; + type: string; + conversationTitle: { + forViewer: string; + isDefaultTitle: boolean; + }; + lastUpdated: Date; + universe: PartialGameUniverse | null; + constructor(data: ChatConversationOptions, client: Client); + getMessages(amount?: number, startId?: string): Promise; + addUsers(users: number[]): Promise; + removeUser(userId: number): Promise; + markMessageRead(id: string): Promise; + markRead(): Promise; + rename(name: string): Promise; + getUnreadMessages(amount?: number): Promise; + getLatestMessages(amount?: number): Promise; + resetUniverse(): Promise; + sendGameLinkMessage(options: ChatSendGameLinkMessageOptions): Promise; + sendMessage(options: ChatSendMessageOptions): Promise; +} +export interface PartialChatConversationOptions { + id: number; + title?: string; +} +export declare class PartialChatConversation { + client: Client; + id: number; + title: string | null; + constructor(data: PartialChatConversationOptions, client: Client); +} +export interface ChatMessageOptions { + id: string; + senderType: string; + sent: string; + read: boolean; + messageType: "PlainText" | string; + decorators: string[]; + senderTargetId: number; + content: string; + link?: { + type: "Game"; + game: { + universeId: number; + }; + }; + eventBased?: { + type: "SetConversationUniverse"; + setConversationUniverse: { + actorUserId: number; + universeId: number; + }; + }; +} +export declare class ChatMessage { + client: Client; + id: string; + sender: PartialUser; + sentAt: Date; + type: "PlainText" | string; + decorators: string[]; + content: string; + constructor(data: ChatMessageOptions, client: Client); +} +export interface ChatMessageSentOptions { + content: string; + filteredForReceivers: boolean; + messageId: string; + sent: string; + messageType: "PlainText" | string; + resultType: "Success" | string; + statusMessage: string; +} +export declare class ChatMessageSent { + client: Client; + content: string; + filtered: boolean; + id: string; + sentAt: Date; + type: "PlainText" | string; + result: "Success" | string; + status: string; + constructor(data: ChatMessageSentOptions, client: Client); +} diff --git a/dist/structures/Chat.js b/dist/structures/Chat.js new file mode 100644 index 000000000..c59b762ce --- /dev/null +++ b/dist/structures/Chat.js @@ -0,0 +1,117 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ChatMessageSent = exports.ChatMessage = exports.PartialChatConversation = exports.ChatConversation = void 0; +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup +}); +class ChatConversation { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.title = data.title; + this.initiator = new structures.PartialUser({ + id: data.initiator.targetId, + name: data.initiator.name || undefined + }, client); + this.hasUnreadMessages = data.hasUnreadMessages; + this.members = data.participants.map((participantData) => new structures.PartialUser({ + id: participantData.targetId, + name: participantData.name + }, client)); + this.type = data.conversationType; + this.lastUpdated = new Date(data.lastUpdated); + this.universe = data.conversationUniverse + ? new structures.PartialGameUniverse({ + id: data.conversationUniverse + }, client) + : null; + this.conversationTitle = { + forViewer: data.conversationTitle.titleForViewer, + isDefaultTitle: data.conversationTitle.isDefaultTitle + }; + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getMessages(amount = 100, startId) { + return this.client.chat.getConversationMessages(this.id, amount, startId); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + addUsers(users) { + return this.client.chat.addUsersToConversation(this.id, users); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + removeUser(userId) { + return this.client.chat.removeUserFromConversation(this.id, userId); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + markMessageRead(id) { + return this.client.chat.markMessageRead(this.id, id); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + markRead() { + return this.client.chat.markConversationsRead([this.id]); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + rename(name) { + return this.client.chat.renameGroupConversation(this.id, name); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getUnreadMessages(amount = 100) { + return this.client.chat.getUnreadMessagesInConversations([this.id], amount); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + getLatestMessages(amount = 100) { + return this.client.chat.getLatestMessagesInConversations([this.id], amount); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + resetUniverse() { + return this.client.chat.resetConversationUniverse(this.id); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendGameLinkMessage(options) { + return this.client.chat.sendGameLinkMessage(options); + } + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + sendMessage(options) { + return this.client.chat.sendMessage(options); + } +} +exports.ChatConversation = ChatConversation; +class PartialChatConversation { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.title = data.title || null; + } +} +exports.PartialChatConversation = PartialChatConversation; +class ChatMessage { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.sender = new structures.PartialUser({ + id: data.senderTargetId + }, client); + this.sentAt = new Date(data.sent); + this.type = data.messageType; + this.decorators = data.decorators; + this.content = data.content; + } +} +exports.ChatMessage = ChatMessage; +class ChatMessageSent { + constructor(data, client) { + this.client = client; + this.id = data.messageId; + this.content = data.content; + this.filtered = data.filteredForReceivers; + this.sentAt = new Date(data.sent); + this.result = data.resultType; + this.status = data.statusMessage; + this.type = data.messageType; + } +} +exports.ChatMessageSent = ChatMessageSent; diff --git a/dist/structures/ClientUser.d.ts b/dist/structures/ClientUser.d.ts new file mode 100644 index 000000000..d9d60c0e9 --- /dev/null +++ b/dist/structures/ClientUser.d.ts @@ -0,0 +1,10 @@ +import { Client } from "../client"; +import { PartialUser } from "./User"; +export interface ClientUserOptions { + id: number; + name: string; +} +export declare class ClientUser extends PartialUser { + client: Client; + constructor(data: ClientUserOptions, client: Client); +} diff --git a/dist/structures/ClientUser.js b/dist/structures/ClientUser.js new file mode 100644 index 000000000..a131115a9 --- /dev/null +++ b/dist/structures/ClientUser.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ClientUser = void 0; +const User_1 = require("./User"); +class ClientUser extends User_1.PartialUser { + constructor(data, client) { + super(data, client); + this.client = client; + } +} +exports.ClientUser = ClientUser; diff --git a/dist/structures/CursorPage.d.ts b/dist/structures/CursorPage.d.ts new file mode 100644 index 000000000..4ea151bcf --- /dev/null +++ b/dist/structures/CursorPage.d.ts @@ -0,0 +1,29 @@ +export declare type CursorPageOptions = { + readonly limit?: 10 | 25 | 50 | 100; + cursor?: string; + readonly sortOrder?: "Asc" | "Desc"; +}; +declare type CursorPageResponse = { + data: T[]; + previousPageCursor: string | null; + nextPageCursor: string | null; +}; +declare type CursorPageState = { + previous: string | null; + current: string | null; + next: string | null; +}; +declare type CursorPageMethod = (options: CursorPageOptions & C) => Promise>; +export declare class CursorPage { + options: CursorPageOptions; + cursors: CursorPageState; + data: T[][]; + readonly method: CursorPageMethod; + readonly methodOptions: C; + private currentPage; + constructor(options: CursorPageOptions, methodOptions: C, response: CursorPageResponse, method: CursorPageMethod); + getNextPage(): Promise; + getPreviousPage(): Promise; +} +export declare function contextCall(context: any, method: CursorPageMethod): CursorPageMethod; +export {}; diff --git a/dist/structures/CursorPage.js b/dist/structures/CursorPage.js new file mode 100644 index 000000000..aea2e1b65 --- /dev/null +++ b/dist/structures/CursorPage.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.contextCall = exports.CursorPage = void 0; +const tslib_1 = require("tslib"); +class CursorPage { + constructor(options, methodOptions, response, method) { + this.data = []; + this.currentPage = 0; + this.options = options; + this.cursors = { + previous: response.previousPageCursor, + current: response.nextPageCursor, + next: response.nextPageCursor + }; + this.data[0] = response.data; + this.methodOptions = methodOptions; + this.method = method; + } + getNextPage() { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + if (!this.cursors.next) { + throw new Error("Attempted to iterate to next page, but no cursor was presented for the next page"); + } + this.currentPage++; + if (this.data[this.currentPage]) + return this.data[this.currentPage]; + this.options.cursor = this.cursors.next; + const result = yield this.method(Object.assign(Object.assign({}, this.options), this.methodOptions)); + this.cursors = { + previous: result.previousPageCursor, + current: this.cursors.next, + next: result.nextPageCursor + }; + this.data[this.currentPage] = result.data; + return result.data; + }); + } + getPreviousPage() { + return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { + if (!this.cursors.previous) { + throw new Error("Attempted to iterate to previous page, but no cursor was presented for the next page"); + } + this.currentPage--; + if (this.data[this.currentPage]) + return this.data[this.currentPage]; + this.options.cursor = this.cursors.previous; + const result = yield this.method(Object.assign(Object.assign({}, this.options), this.methodOptions)); + this.cursors = { + previous: result.previousPageCursor, + current: this.cursors.next, + next: result.nextPageCursor + }; + this.data[this.currentPage] = result.data; + return result.data; + }); + } +} +exports.CursorPage = CursorPage; +function contextCall(context, method) { + return (options) => method.call(context, options); +} +exports.contextCall = contextCall; diff --git a/dist/structures/Game.d.ts b/dist/structures/Game.d.ts new file mode 100644 index 000000000..6bb1c22d7 --- /dev/null +++ b/dist/structures/Game.d.ts @@ -0,0 +1,268 @@ +import { Client } from "../client"; +import { CreatorType, GameGenre, MorphAvatarType } from "../util/constants"; +import { PartialGroup } from "./Group"; +import { PartialUser } from "./User"; +import { DevelopGetPlaceStatisticsByTypeOptions } from "../client/apis/DevelopAPI"; +import { GamesGetGameServersByTypeOptions } from "../client/apis/GamesAPI"; +export interface GameBadgeBaseOptions { + id: number; + name?: string; +} +export declare class GameBadgeBase { + client: Client; + id: number; + name: string | null; + constructor(data: GameBadgeBaseOptions, client: Client); +} +export interface GameBadgeOptions { + id: number; + name: string; + description: string; + displayName: string; + displayDescription: string; + enabled: boolean; + iconImageId: number; + displayIconImageId: number; + created: string; + updated: string; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: { + id: number; + name: string; + rootPlaceId: number; + }; +} +export declare class GameBadge { + client: Client; + id: number; + name: string; + description: string; + displayedDescription: string; + displayedName: string; + enabled: boolean; + iconId: number; + displayedIconId: number; + created: Date; + updated: Date; + statistics: { + pastDayAwardedCount: number; + awardedCount: number; + winRatePercentage: number; + }; + awardingUniverse: PartialGameUniverse; + constructor(data: GameBadgeOptions, client: Client); +} +export declare type PartialGameBadgeOptions = GameBadgeBaseOptions; +export declare class PartialGameBadge extends GameBadgeBase { + constructor(data: PartialGameBadgeOptions, client: Client); +} +export interface GamePassOptions { + id: number; + name: string; + displayName: string; + productId: number; + price: number; +} +export declare class GamePass { + client: Client; + id: number; + name: string; + displayName: string; + productId: number; + price: number; + constructor(data: GamePassOptions, client: Client); +} +export interface BasePlaceOptions { + id: number; + name?: string; +} +export declare class BasePlace { + client: Client; + id: number; + name: string | null; + constructor(options: BasePlaceOptions, client: Client); + getCompatibilities(): Promise; + updatePlaceConfiguration(options: { + name: string; + description: string; + }): Promise; + getStatistics(options: Omit): Promise; + awardBadge(userId: number, badgeId: number): Promise; + getGameServers(options: Omit): Promise; +} +export interface PlaceOptions { + placeId: number; + name: string; + url: string; + description: string; + builder: string; + builderId: number; + isPlayable: boolean; + reasonProhibited: string; + universeId: number; + universeRootPlaceId: number; + price: number; + imageToken: string; +} +export declare class Place extends BasePlace { + description: string; + url: string; + creatorName: string; + creatorId: number; + playable: boolean; + prohibitedReason: string; + prohibited: boolean; + universe: PartialGameUniverse; + price: number; + imageToken: string; + constructor(data: PlaceOptions, client: Client); +} +interface PartialPlaceOptions { + id: number; + name?: string | null; +} +export declare class PartialPlace extends BasePlace { + constructor(data: PartialPlaceOptions, client: Client); +} +export interface PartialGameUniverseOptions { + id: number; + name?: string; + rootPlace?: { + id: number; + name?: string | null; + }; +} +export declare class PartialGameUniverse { + client: Client; + id: number; + name: string | null; + rootPlace: PartialPlace | null; + constructor(data: PartialGameUniverseOptions, client: Client); +} +export interface GameUniverseOptions { + id: number; + rootPlaceId: number; + name: string; + description: string; + creatorType: string; + creator: { + id: number; + name: string; + }; + price: number; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: string; + updated: string; + studioAccessToApisAllowed: boolean; + createVipServersAllowed: boolean; + universeAvatarType: string; + genre: string; +} +export declare class GameUniverse { + client: Client; + id: number; + rootPlace: PartialPlace | null; + name: string; + description: string; + creatorType: CreatorType; + creator: PartialGroup | PartialUser; + price: number | null; + allowedGearGenres: string[]; + allowedGearCategories: string[]; + playing: number; + visits: number; + maxPlayers: number; + created: Date; + updated: Date; + studioAccessToAPIsEnabled: boolean; + createVIPServersEnabled: boolean; + avatarType: MorphAvatarType; + genre: GameGenre; + constructor(data: GameUniverseOptions, client: Client); +} +export interface PartialVIPServerOptions { + id: number; +} +export declare class PartialVIPServer { + client: Client; + id: number; + constructor(data: PartialVIPServerOptions, client: Client); +} +export interface VIPServerOptions { + id: number; + name: string; + game: { + id: number; + name: string; + rootPlace: { + id: number; + name: string; + }; + }; + joinCode: string; + active: boolean; + subscription: { + active: boolean; + expired: boolean; + expirationDate: string; + price: number; + }; + permissions: { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: { + id: number; + name: string; + displayName: string; + }[]; + }; +} +export declare class VIPServer { + client: Client; + id: number; + name: string; + game: PartialGameUniverse; + code: string; + active: boolean; + subscription: { + active: boolean; + expired: boolean; + expirationDate: Date; + price: number; + }; + permissions: { + clanAllowed: boolean; + enemyClanId: number; + friendsAllowed: boolean; + users: PartialUser[]; + }; + constructor(data: VIPServerOptions, client: Client); +} +export interface GameMediaDataOptions { + assetTypeId: number; + assetType: "Video" | "Image" | string; + imageId: number | null; + videoHash: string | null; + videoTitle: string | null; + approved: boolean; +} +export declare class GameMediaData { + client: Client; + assetTypeId: number; + assetType: "Video" | "Image" | string; + imageId: number | null; + videoHash: string | null; + videoTitle: string | null; + approved: boolean; + constructor(data: GameMediaDataOptions, client: Client); +} +export {}; diff --git a/dist/structures/Game.js b/dist/structures/Game.js new file mode 100644 index 000000000..c0196e162 --- /dev/null +++ b/dist/structures/Game.js @@ -0,0 +1,238 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GameMediaData = exports.VIPServer = exports.PartialVIPServer = exports.GameUniverse = exports.PartialGameUniverse = exports.PartialPlace = exports.Place = exports.BasePlace = exports.GamePass = exports.PartialGameBadge = exports.GameBadge = exports.GameBadgeBase = void 0; +const constants_1 = require("../util/constants"); +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse, + PartialGroup: require("./Group").PartialGroup, + PartialPlace: require("./Game").PartialPlace +}); +class GameBadgeBase { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + } +} +exports.GameBadgeBase = GameBadgeBase; +class GameBadge { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name; + this.description = data.description; + this.displayedName = data.displayName; + this.displayedDescription = data.displayDescription; + this.enabled = data.enabled; + this.iconId = data.iconImageId; + this.displayedIconId = data.displayIconImageId; + this.created = new Date(data.created); + this.updated = new Date(data.updated); + this.statistics = { + pastDayAwardedCount: data.statistics.pastDayAwardedCount, + awardedCount: data.statistics.awardedCount, + winRatePercentage: data.statistics.winRatePercentage + }; + this.awardingUniverse = new structures.PartialGameUniverse({ + id: data.awardingUniverse.id, + rootPlace: { + id: data.awardingUniverse.rootPlaceId + }, + name: data.awardingUniverse.name + }, client); + } +} +exports.GameBadge = GameBadge; +class PartialGameBadge extends GameBadgeBase { + // Shut up eslint, it's not useless + // eslint-disable-next-line no-useless-constructor + constructor(data, client) { + super(data, client); + } +} +exports.PartialGameBadge = PartialGameBadge; +class GamePass { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name; + this.displayName = data.displayName; + this.productId = data.productId; + this.price = data.price; + } +} +exports.GamePass = GamePass; +class BasePlace { + constructor(options, client) { + this.client = client; + this.id = options.id; + this.name = options.name || null; + } + getCompatibilities() { + return this.client.apis.developAPI.getPlaceCompatibilities({ + placeId: this.id + }); + } + updatePlaceConfiguration(options) { + return this.client.apis.developAPI.updatePlaceConfiguration(Object.assign({ placeId: this.id }, options)); + } + getStatistics(options) { + return this.client.apis.developAPI.getPlaceStatistics(Object.assign({ placeId: this.id }, options)); + } + awardBadge(userId, badgeId) { + return this.client.apis.generalApi.awardBadge({ + placeId: this.id, + badgeId, + userId + }); + } + getGameServers(options) { + return this.client.apis.gamesAPI.getGameServersByType(Object.assign({ placeId: this.id }, options)); + } +} +exports.BasePlace = BasePlace; +class Place extends BasePlace { + constructor(data, client) { + const structures = retrieveStructures(); + super({ + id: data.placeId, + name: data.name + }, client); + this.description = data.description; + this.url = data.url; + this.creatorName = data.builder; + this.creatorId = data.builderId; + this.playable = data.isPlayable; + this.prohibitedReason = data.reasonProhibited; + this.prohibited = this.prohibitedReason.toLowerCase() !== "none"; + this.universe = new structures.PartialGameUniverse({ + id: data.universeId, + rootPlace: { + id: data.universeRootPlaceId + } + }, client); + this.price = data.price; + this.imageToken = data.imageToken; + } +} +exports.Place = Place; +class PartialPlace extends BasePlace { + constructor(data, client) { + super({ + id: data.id, + name: data.name || undefined + }, client); + } +} +exports.PartialPlace = PartialPlace; +class PartialGameUniverse { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name || null; + this.rootPlace = data.rootPlace + ? new structures.PartialPlace({ + id: data.rootPlace.id, + name: data.rootPlace.name || null + }, client) + : null; + } +} +exports.PartialGameUniverse = PartialGameUniverse; +class GameUniverse { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.rootPlace = data.rootPlaceId + ? new structures.PartialPlace({ + id: data.rootPlaceId + }, client) + : null; + this.name = data.name; + this.description = data.description; + this.creatorType = + data.creatorType.toLowerCase() === "group" + ? constants_1.CreatorType.GROUP + : constants_1.CreatorType.USER; + this.creator = + this.creatorType === constants_1.CreatorType.GROUP + ? new structures.PartialGroup({ + id: data.creator.id, + name: data.creator.name + }, client) + : new structures.PartialUser({ + id: data.creator.id, + name: data.creator.name + }, client); + this.price = data.price; + this.allowedGearGenres = data.allowedGearGenres; + this.allowedGearCategories = data.allowedGearCategories; + this.playing = data.playing; + this.visits = data.visits; + this.maxPlayers = data.maxPlayers; + this.created = new Date(data.created); + this.updated = new Date(data.updated); + this.studioAccessToAPIsEnabled = data.studioAccessToApisAllowed; + this.createVIPServersEnabled = data.createVipServersAllowed; + this.avatarType = + data.universeAvatarType.toLowerCase() === "morphtor6" + ? constants_1.MorphAvatarType.R6 + : constants_1.MorphAvatarType.R15; + this.genre = data.genre; + } +} +exports.GameUniverse = GameUniverse; +class PartialVIPServer { + constructor(data, client) { + this.client = client; + this.id = data.id; + } +} +exports.PartialVIPServer = PartialVIPServer; +class VIPServer { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id; + this.name = data.name; + this.game = new structures.PartialGameUniverse({ + id: data.game.id, + name: data.game.name, + rootPlace: { + id: data.game.rootPlace.id, + name: data.game.rootPlace.name + } + }, client); + this.active = data.active; + this.code = data.joinCode; + this.subscription = { + active: data.subscription.active, + expired: data.subscription.expired, + expirationDate: new Date(data.subscription.expirationDate), + price: data.subscription.price + }; + this.permissions = { + clanAllowed: data.permissions.clanAllowed, + enemyClanId: data.permissions.enemyClanId, + friendsAllowed: data.permissions.friendsAllowed, + users: data.permissions.users.map((userData) => new structures.PartialUser(userData, client)) + }; + } +} +exports.VIPServer = VIPServer; +class GameMediaData { + constructor(data, client) { + this.client = client; + this.assetTypeId = data.assetTypeId; + this.assetType = data.assetType; + this.imageId = data.imageId; + this.videoHash = data.videoHash; + this.videoTitle = data.videoTitle; + this.approved = data.approved; + } +} +exports.GameMediaData = GameMediaData; diff --git a/dist/structures/Group.d.ts b/dist/structures/Group.d.ts new file mode 100644 index 000000000..9545d2058 --- /dev/null +++ b/dist/structures/Group.d.ts @@ -0,0 +1,272 @@ +import { Client } from "../client"; +import { DevelopGetGroupUniversesOptions } from "../client/apis/DevelopAPI"; +import { CursorPage } from "./Asset"; +import { PartialGameUniverse } from "./Game"; +import { EconomyGetGroupRevenueSummaryInTimeFrame, EconomyGetGroupRevenueSummaryInTimeFrameOptions, EconomyGetGroupTransactions, EconomyGetGroupTransactionsOptions } from "../client/apis/EconomyAPI"; +import { GroupsAcceptJoinRequest, GroupsAcceptJoinRequests, GroupsAcceptJoinRequestsOptions, GroupsAcceptRelationshipRequest, GroupsAcceptRelationshipRequests, GroupsAcceptRelationshipRequestsOptions, GroupsChangeOwner, GroupsClaimGroup, GroupsCreateRelationship, GroupsCreateRelationshipOptions, GroupsCreateRole, GroupsCreateRoleOptions, GroupsCreateWallPost, GroupsCreateWallPostOptions, GroupsDeclineJoinRequest, GroupsDeclineJoinRequests, GroupsDeclineRelationshipRequest, GroupsDeclineRelationshipRequests, GroupsDeclineRelationshipRequestsOptions, GroupsDeleteRelationship, GroupsDeleteRelationshipOptions, GroupsDeleteRole, GroupsDeleteSocialLink, GroupsDeleteWallPost, GroupsGetAllRolesPermissions, GroupsGetGroupPayouts, GroupsGetGroupRelationships, GroupsGetGroupRelationshipsOptions, GroupsGetGroupSettings, GroupsGetGuestPermissions, GroupsGetJoinRequest, GroupsGetJoinRequestsOptions, GroupsGetMembersOptions, GroupsGetMembersWithRoleOptions, GroupsGetRelationshipRequests, GroupsGetRelationshipRequestsOptions, GroupsGetRolePermissions, GroupsGetSelfGroupMembership, GroupsGetSocialLinks, GroupsGetWallPostsOptions, GroupsJoinGroup, GroupsJoinGroupOptions, GroupsKickMember, GroupsPayoutMembers, GroupsPayoutMembersOptions, GroupsPostSocialLink, GroupsPostSocialLinkOptions, GroupsRemovePrimaryGroup, GroupsSetPrimaryGroup, GroupsUpdateGroupDescription, GroupsUpdateGroupIcon, GroupsUpdateGroupSettings, GroupsUpdateGroupSettingsOptions, GroupsUpdateGroupStatus, GroupsUpdateMember, GroupsUpdateRecurringPayouts, GroupsUpdateRecurringPayoutsOptions, GroupsUpdateRole, GroupsUpdateRoleOptions, GroupsUpdateRolePermissions, GroupsUpdateRolePermissionsOptions, GroupsUpdateSocialLink, GroupsUpdateSocialLinkOptions } from "../client/apis/GroupsAPI"; +import { PartialUser, PartialUserOptions, UserBase } from "./User"; +declare type GroupRelationships = Omit & { + groupId: number; + relationshipType: T; + totalGroupCount: number; + groups: Group[]; + nextRowIndex: number; +}; +export interface GroupBaseOptions { + id: number; + name?: string; +} +export declare class GroupBase { + client: Client; + id: number; + name: string | null; + constructor(data: GroupBaseOptions, client: Client); + getUniverses(options?: Omit): Promise>; + /** + * Returns whether the authenticated user can manage the group or not + * @returns {Promise} + */ + canSelfManage(): Promise; + /** + * Gets the currently available funds in the group + * @returns {Promise} + */ + getFunds(): Promise; + getRevenueSummaryInTimeFrame(timeFrame: EconomyGetGroupRevenueSummaryInTimeFrameOptions["timeFrame"]): Promise; + getTransactions(options: Omit): Promise; + getAllies(maxItems?: number, startItem?: number): Promise>; + getEnemies(maxItems?: number, startItem?: number): Promise>; + getGroup(): Promise; + getMember(userId: number): Promise; + getIsMember(userId: number): Promise; + getSettings(): Promise; + updateSettings(options: Omit): Promise; + updateDescription(description: string): Promise; + updateShout(shout: string): Promise; + updateIcon(file: unknown): Promise; + declineJoinRequests(userIds: number[]): Promise; + getJoinRequests(options: Omit): Promise>; + acceptJoinRequests(options: Omit): Promise; + declineJoinRequest(userId: number): Promise; + getJoinRequest(userId: number): Promise; + acceptJoinRequest(userId: number): Promise; + getSelfMembership(): Promise; + getRoles(): Promise; + getMembersWithRole(options: Omit): Promise>; + getMembers(options: Omit): Promise>; + join(options: Omit): Promise; + getIsPendingJoin(): Promise; + changeOwner(userId: number): Promise; + claim(): Promise; + kickMember(userId: number): Promise; + updateMember(userId: number, roleId: number): Promise; + getPayouts(): Promise; + payoutMembers(options: Omit): Promise; + updateRecurringPayouts(options: Omit): Promise; + getRelationships(options: Omit): Promise; + declineRelationshipRequests(options: Omit): Promise; + getRelationshipRequests(options: Omit): Promise; + acceptRelationshipRequests(options: Omit): Promise; + deleteRelationship(options: Omit): Promise; + createRelationship(options: Omit): Promise; + acceptRelationshipRequest(type: "enemies" | "allies", withGroup: number): Promise; + declineRelationshipRequest(type: "enemies" | "allies", withGroup: number): Promise; + getRolePermissions(roleId: number): Promise; + updateRolePermissions(roleId: number, permissions: Omit): Promise; + getGuestPermissions(): Promise; + getAllRolesPermissions(): Promise; + getSocialLinks(): Promise; + createSocialLink(options: Omit): Promise; + deleteSocialLink(id: number): Promise; + updateSocialLink(options: Omit): Promise; + getWallPosts(options: Omit): Promise>; + createWallPost(options: Omit): Promise; + deleteWallPost(id: number): Promise; + getIsUserPrimaryGroup(userId: number): Promise; + removeAsPrimary(): Promise; + setAsPrimary(): Promise; + createRole(options: Omit): Promise; + deleteRole(roleId: number): Promise; + updateRole(roleId: number, options: Omit): Promise; +} +export interface PartialGroupOptions { + id: number; + name?: string; +} +export declare class PartialGroup extends GroupBase { + constructor(data: PartialGroupOptions, client: Client); +} +export interface GroupMemberOptions { + group: PartialGroupOptions; + name?: string | null; + /** + * The user id + */ + id: number; + role?: { + id: number; + name: string; + rank: number; + }; +} +export declare class GroupMember extends UserBase { + group: PartialGroup; + role: GroupRole | null; + constructor(data: GroupMemberOptions, client: Client); +} +export interface GroupOptions { + id: number; + name: string; + description: string; + owner: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + } | null; + shout: { + body: string; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + created: string; + updated: string; + } | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; +} +export declare class Group extends GroupBase { + description: string; + name: string; + owner: GroupMember | null; + shout: GroupShout | null; + memberCount: number; + isBuildersClubOnly: boolean; + publicEntryAllowed: boolean; + isLocked: boolean; + constructor(data: GroupOptions, client: Client); +} +export interface GroupJoinRequestOptions { + id?: number; + user: PartialUserOptions; + group: PartialGroupOptions; + created: string; +} +export declare class GroupJoinRequest { + client: Client; + id: number | null; + user: PartialUser; + group: PartialGroup; + created: Date; + constructor(data: GroupJoinRequestOptions, client: Client); +} +export interface GroupRoleOptions { + id?: number; + name?: string; + rank?: number; + group: { + id: number; + name?: string; + }; +} +export declare class GroupRole { + client: Client; + id: number | null; + name: string | null; + rank: number | null; + group: PartialGroup; + constructor(data: GroupRoleOptions, client: Client); +} +export interface GroupRolePermissionsOptions { + groupId: number; + role: { + id: number; + name: string; + description: string; + rank: number; + memberCount: number; + }; + permissions: { + groupPostsPermissions: { + viewWall: boolean; + postToWall: boolean; + deleteFromWall: boolean; + viewStatus: boolean; + postToStatus: boolean; + }; + groupMembershipPermissions: { + changeRank: boolean; + inviteMembers: boolean; + removeMembers: boolean; + }; + groupManagementPermissions: { + manageRelationships: boolean; + manageClan: boolean; + viewAuditLogs: boolean; + }; + groupEconomyPermissions: { + spendGroupFunds: boolean; + advertiseGroup: boolean; + createItems: boolean; + manageItems: boolean; + addGroupPlaces: boolean; + manageGroupGames: boolean; + viewGroupPayouts: boolean; + }; + }; +} +export declare class GroupRolePermissions { + client: Client; + group: PartialGroup; + role: GroupRole; + permissions: GroupRolePermissionsOptions["permissions"]; + constructor(data: GroupRolePermissionsOptions, client: Client); +} +export interface GroupShoutOptions { + content: string; + creator: { + id: number; + username: string; + }; + group: { + id: number; + name?: string; + }; +} +export declare class GroupShout { + client: Client; + content: string; + creator: PartialUser; + group: PartialGroup; + constructor(data: GroupShoutOptions, client: Client); +} +export interface GroupWallPostOptions { + id: number; + poster: { + buildersClubMembershipType: string; + userId: number; + username: string; + displayName: string; + }; + group: { + id: number; + name?: string; + }; + body: string; + created: string; + updated: string; +} +export declare class GroupWallPost { + client: Client; + id: number; + creator: GroupMember; + content: string; + created: Date; + constructor(data: GroupWallPostOptions, client: Client); +} +export {}; diff --git a/dist/structures/Group.js b/dist/structures/Group.js new file mode 100644 index 000000000..8e61a3e13 --- /dev/null +++ b/dist/structures/Group.js @@ -0,0 +1,495 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GroupWallPost = exports.GroupShout = exports.GroupRolePermissions = exports.GroupRole = exports.GroupJoinRequest = exports.Group = exports.GroupMember = exports.PartialGroup = exports.GroupBase = void 0; +const User_1 = require("./User"); +const retrieveStructures = () => ({ + PartialUser: require("./User").PartialUser, + PartialGameUniverse: require("./Game").PartialGameUniverse +}); +class GroupBase { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.name = data.name || null; + } + getUniverses(options) { + return this.client.apis.developAPI + .getGroupUniverses(Object.assign(Object.assign({}, options), { groupId: this.id })) + .then((response) => { + const CursorPageClass = require("./Asset").CursorPage; + const structures = retrieveStructures(); + return new CursorPageClass(this.client, options || {}, Object.assign(Object.assign({}, response), { data: response.data.map((universeData) => new structures.PartialGameUniverse({ + id: universeData.id, + name: universeData.name, + rootPlace: universeData.rootPlaceId + ? { + id: universeData.rootPlaceId + } + : undefined + }, this.client)) }), this.getUniverses); + }); + } + /** + * Returns whether the authenticated user can manage the group or not + * @returns {Promise} + */ + canSelfManage() { + return this.client.apis.developAPI + .getSelfManageableGroups() + .then((response) => !!response.data.find((data) => data.id === this.id)); + } + /** + * Gets the currently available funds in the group + * @returns {Promise} + */ + getFunds() { + return this.client.apis.economyAPI + .getGroupCurrency({ + groupId: this.id + }) + .then((response) => response.robux); + } + getRevenueSummaryInTimeFrame(timeFrame) { + return this.client.apis.economyAPI.getGroupRevenueByTime({ + groupId: this.id, + timeFrame + }); + } + getTransactions(options) { + return this.client.apis.economyAPI.getGroupTransactions(Object.assign({ groupId: this.id }, options)); + } + getAllies(maxItems = 100, startItem) { + return this.client.apis.groupsAPI + .getGroupRelationships({ + relationshipType: "allies", + groupId: this.id, + maxRows: maxItems, + startRowIndex: startItem + }) + .then((response) => (Object.assign(Object.assign({}, response), { relationshipType: "allies", groups: response.relatedGroups.map((groupData) => new Group(groupData, this.client)) }))); + } + getEnemies(maxItems = 100, startItem) { + return this.client.apis.groupsAPI + .getGroupRelationships({ + relationshipType: "enemies", + groupId: this.id, + maxRows: maxItems, + startRowIndex: startItem + }) + .then((response) => (Object.assign(Object.assign({}, response), { relationshipType: "enemies", groups: response.relatedGroups.map((groupData) => new Group(groupData, this.client)) }))); + } + getGroup() { + return this.client.getGroup(this.id); + } + getMember(userId) { + return this.client.apis.groupsAPI + .getUserGroups({ + userId + }) + .then((response) => { + const foundGroup = response.data.find((groupData) => groupData.group.id === this.id); + if (foundGroup) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define + return new GroupMember({ + id: userId, + role: foundGroup.role, + group: foundGroup.group + }, this.client); + } + else { + return null; + } + }); + } + getIsMember(userId) { + console.warn(`group.getIsMember() is deprecated and may be removed in the future. Please switch to group.getMember`); + return this.getMember(userId); + } + getSettings() { + return this.client.apis.groupsAPI.getGroupSettings({ + groupId: this.id + }); + } + updateSettings(options) { + return this.client.apis.groupsAPI.updateGroupSettings(Object.assign({ groupId: this.id }, options)); + } + updateDescription(description) { + return this.client.apis.groupsAPI.updateGroupDescription({ + description, + groupId: this.id + }); + } + updateShout(shout) { + return this.client.apis.groupsAPI.updateGroupStatus({ + groupId: this.id, + message: shout + }); + } + updateIcon(file) { + return this.client.apis.groupsAPI.updateGroupIcon({ + files: file, + groupId: this.id + }); + } + declineJoinRequests(userIds) { + return this.client.apis.groupsAPI.declineJoinRequests({ + groupId: this.id, + userIds + }); + } + getJoinRequests(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getJoinRequests(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getJoinRequests)); + } + acceptJoinRequests(options) { + return this.client.apis.groupsAPI.acceptJoinRequests(Object.assign({ groupId: this.id }, options)); + } + declineJoinRequest(userId) { + return this.client.apis.groupsAPI.declineJoinRequest({ + groupId: this.id, + userId + }); + } + getJoinRequest(userId) { + return this.client.apis.groupsAPI.getJoinRequest({ + groupId: this.id, + userId + }); + } + acceptJoinRequest(userId) { + return this.client.apis.groupsAPI.acceptJoinRequest({ + groupId: this.id, + userId + }); + } + getSelfMembership() { + return this.client.apis.groupsAPI.getSelfGroupMembership({ + groupId: this.id + }); + } + getRoles() { + return this.client.apis.groupsAPI + .getGroupRoles({ + groupId: this.id + }) + .then((response) => response.roles.map((roleData) => new GroupRole(Object.assign({ group: { + id: this.id, + name: this.name || undefined + } }, roleData), this.client))); + } + getMembersWithRole(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getMembersWithRole(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getMembersWithRole)); + } + getMembers(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getMembers(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getMembers)); + } + join(options) { + return this.client.apis.groupsAPI.joinGroup(Object.assign(Object.assign({ groupId: this.id }, options), { captchaProvider: options.captchaProvider || "PROVIDER_ARKOSELABS" })); + } + getIsPendingJoin() { + return this.client.apis.groupsAPI + .getSelfPendingGroupJoins() + .then((response) => (response.data.find((groupData) => groupData.id === this.id) && + true) || + false); + } + changeOwner(userId) { + return this.client.apis.groupsAPI.changeGroupOwner({ + groupId: this.id, + userId + }); + } + claim() { + return this.client.apis.groupsAPI.claimGroup({ + groupId: this.id + }); + } + kickMember(userId) { + return this.client.apis.groupsAPI.kickMember({ + groupId: this.id, + userId + }); + } + updateMember(userId, roleId) { + return this.client.apis.groupsAPI.updateMember({ + groupId: this.id, + roleId, + userId + }); + } + getPayouts() { + return this.client.apis.groupsAPI.getGroupPayouts({ + groupId: this.id + }); + } + payoutMembers(options) { + return this.client.apis.groupsAPI.payoutMembers(Object.assign({ groupId: this.id }, options)); + } + updateRecurringPayouts(options) { + return this.client.apis.groupsAPI.updateRecurringPayouts(Object.assign({ groupId: this.id }, options)); + } + getRelationships(options) { + return this.client.apis.groupsAPI.getGroupRelationships(Object.assign({ groupId: this.id }, options)); + } + declineRelationshipRequests(options) { + return this.client.apis.groupsAPI.declineRelationshipRequests(Object.assign({ groupId: this.id }, options)); + } + getRelationshipRequests(options) { + return this.client.apis.groupsAPI.getRelationshipRequests(Object.assign({ groupId: this.id }, options)); + } + acceptRelationshipRequests(options) { + return this.client.apis.groupsAPI.acceptRelationshipRequests(Object.assign({ groupId: this.id }, options)); + } + deleteRelationship(options) { + return this.client.apis.groupsAPI.deleteRelationship(Object.assign({ groupId: this.id }, options)); + } + createRelationship(options) { + return this.client.apis.groupsAPI.createRelationship(Object.assign({ groupId: this.id }, options)); + } + acceptRelationshipRequest(type, withGroup) { + return this.client.apis.groupsAPI.acceptRelationshipRequest({ + groupId: this.id, + relationshipType: type || "allies", + withGroup + }); + } + declineRelationshipRequest(type, withGroup) { + return this.client.apis.groupsAPI.declineRelationshipRequest({ + groupId: this.id, + relationshipType: type || "allies", + withGroup + }); + } + getRolePermissions(roleId) { + return this.client.apis.groupsAPI.getRolePermissions({ + groupId: this.id, + roleId + }); + } + updateRolePermissions(roleId, permissions) { + return this.client.apis.groupsAPI.updateRolePermissions(Object.assign({ groupId: this.id, roleId }, permissions)); + } + getGuestPermissions() { + return this.client.apis.groupsAPI.getGuestPermissions({ + groupId: this.id + }); + } + getAllRolesPermissions() { + return this.client.apis.groupsAPI.getAllRolesPermissions({ + groupId: this.id + }); + } + getSocialLinks() { + return this.client.apis.groupsAPI.getSocialLinks({ + groupId: this.id + }); + } + createSocialLink(options) { + return this.client.apis.groupsAPI.createSocialLink(Object.assign({ groupId: this.id }, options)); + } + deleteSocialLink(id) { + return this.client.apis.groupsAPI.deleteSocialLink({ + groupId: this.id, + id + }); + } + updateSocialLink(options) { + return this.client.apis.groupsAPI.updateSocialLink(Object.assign({ groupId: this.id }, options)); + } + getWallPosts(options) { + const CursorPageClass = require("./Asset").CursorPage; + return this.client.apis.groupsAPI + .getWallPosts(Object.assign({ groupId: this.id }, options)) + .then((response) => new CursorPageClass(this.client, options, response, this.getWallPosts)); + } + createWallPost(options) { + return this.client.apis.groupsAPI.createWallPost(Object.assign({ groupId: this.id }, options)); + } + deleteWallPost(id) { + return this.client.apis.groupsAPI.deleteWallPost({ + groupId: this.id, + id + }); + } + getIsUserPrimaryGroup(userId) { + return (this.client.apis.groupsAPI + .getUserPrimaryGroup({ + userId + }) + // eslint-disable-next-line @typescript-eslint/no-use-before-define + .then((response) => response && response.group && response.role + ? new GroupMember({ + group: response.group, + role: { + id: response.role.id, + name: response.role.name, + rank: response.role.rank + }, + id: userId + }, this.client) + : null)); + } + removeAsPrimary() { + return this.client.apis.groupsAPI.removePrimaryGroup(); + } + setAsPrimary() { + return this.client.apis.groupsAPI.setPrimaryGroup({ + groupId: this.id + }); + } + createRole(options) { + return this.client.apis.groupsAPI.createRole(Object.assign({ groupId: this.id }, options)); + } + deleteRole(roleId) { + return this.client.apis.groupsAPI.deleteRole({ + groupId: this.id, + roleId + }); + } + updateRole(roleId, options) { + return this.client.apis.groupsAPI.updateRole(Object.assign({ groupId: this.id, roleId }, options)); + } +} +exports.GroupBase = GroupBase; +class PartialGroup extends GroupBase { + // Shut up eslint, this is not useless either + // eslint-disable-next-line no-useless-constructor + constructor(data, client) { + super(data, client); + } +} +exports.PartialGroup = PartialGroup; +class GroupMember extends User_1.UserBase { + constructor(data, client) { + super({ + name: data.name, + id: data.id + }, client); + this.group = new PartialGroup(data.group, client); + // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.role = data.role + ? new GroupRole({ + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + name: this.name || undefined, + id: this.id + } + }, client) + : null; + } +} +exports.GroupMember = GroupMember; +class Group extends GroupBase { + constructor(data, client) { + super(data, client); + this.description = data.description; + this.name = data.name; + this.owner = data.owner + ? new GroupMember({ + id: data.owner.userId, + name: data.owner.username, + group: this + }, client) + : null; + this.shout = data.shout + ? new GroupShout({ + content: data.shout.body, + creator: { + id: data.shout.poster.userId, + username: data.shout.poster.username + }, + group: { + id: this.id, + name: this.name || undefined + } + }, client) + : null; + this.memberCount = data.memberCount; + this.isBuildersClubOnly = data.isBuildersClubOnly; + this.publicEntryAllowed = data.publicEntryAllowed; + this.isLocked = data.isLocked; + } +} +exports.Group = Group; +class GroupJoinRequest { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.id = data.id || null; + this.user = new structures.PartialUser(data.user, client); + this.group = new PartialGroup(data.group, client); + this.created = new Date(data.created); + } +} +exports.GroupJoinRequest = GroupJoinRequest; +class GroupRole { + constructor(data, client) { + this.client = client; + this.id = data.id || null; + this.name = data.name || null; + this.rank = data.rank || null; + this.group = new PartialGroup({ + id: data.group.id, + name: data.group.name + }, client); + } +} +exports.GroupRole = GroupRole; +class GroupRolePermissions { + constructor(data, client) { + this.client = client; + this.group = new PartialGroup({ + id: data.groupId + }, client); + this.role = new GroupRole({ + id: data.role.id, + name: data.role.name, + rank: data.role.rank, + group: { + id: this.group.id + } + }, client); + this.permissions = data.permissions; + } +} +exports.GroupRolePermissions = GroupRolePermissions; +class GroupShout { + constructor(data, client) { + const structures = retrieveStructures(); + this.client = client; + this.content = data.content; + this.creator = new structures.PartialUser(data.creator, client); + this.group = new PartialGroup({ + id: data.group.id, + name: data.group.name + }, client); + } +} +exports.GroupShout = GroupShout; +class GroupWallPost { + constructor(data, client) { + this.client = client; + this.id = data.id; + this.content = data.body; + this.creator = new GroupMember({ + group: { + id: data.group.id, + name: data.group.name + }, + id: data.poster.userId, + name: data.poster.username + }, client); + this.created = new Date(data.created); + } +} +exports.GroupWallPost = GroupWallPost; diff --git a/dist/structures/User.d.ts b/dist/structures/User.d.ts new file mode 100644 index 000000000..01ab8d650 --- /dev/null +++ b/dist/structures/User.d.ts @@ -0,0 +1,20 @@ +import { Client, UsersGetUserById } from ".."; +import { BaseUser } from "./BaseUser"; +declare type UserConstructorData = UsersGetUserById; +/** + * Represents a roblox user + */ +export declare class User extends BaseUser { + readonly name: string; + readonly displayName: string; + readonly externalAppDisplayName: string; + readonly isBanned: boolean; + readonly description: string; + readonly created: Date; + /** + * @param {Client} client The Bloxy Client + * @param {number} userId The user ID + */ + constructor(client: Client, data: UserConstructorData); +} +export {}; diff --git a/dist/structures/User.js b/dist/structures/User.js new file mode 100644 index 000000000..c222d4665 --- /dev/null +++ b/dist/structures/User.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.User = void 0; +const BaseUser_1 = require("./BaseUser"); +/** + * Represents a roblox user + */ +class User extends BaseUser_1.BaseUser { + /** + * @param {Client} client The Bloxy Client + * @param {number} userId The user ID + */ + constructor(client, data) { + super(client, data.id); + this.name = data.name; + this.displayName = data.displayName; + this.externalAppDisplayName = data.externalAppDisplayName; + this.isBanned = data.isBanned; + this.description = data.description; + this.created = new Date(data.created); + } +} +exports.User = User; diff --git a/dist/structures/index.d.ts b/dist/structures/index.d.ts new file mode 100644 index 000000000..9f31e7296 --- /dev/null +++ b/dist/structures/index.d.ts @@ -0,0 +1,6 @@ +export * from "./Asset"; +export * from "./Chat"; +export * from "./ClientUser"; +export * from "./Game"; +export * from "./Group"; +export * from "./User"; diff --git a/dist/structures/index.js b/dist/structures/index.js new file mode 100644 index 000000000..693bf3bad --- /dev/null +++ b/dist/structures/index.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +(0, tslib_1.__exportStar)(require("./Asset"), exports); +(0, tslib_1.__exportStar)(require("./Chat"), exports); +(0, tslib_1.__exportStar)(require("./ClientUser"), exports); +(0, tslib_1.__exportStar)(require("./Game"), exports); +(0, tslib_1.__exportStar)(require("./Group"), exports); +(0, tslib_1.__exportStar)(require("./User"), exports); diff --git a/dist/types/GeneralTypes.d.ts b/dist/types/GeneralTypes.d.ts new file mode 100644 index 000000000..750d1a26f --- /dev/null +++ b/dist/types/GeneralTypes.d.ts @@ -0,0 +1,2 @@ +export declare type Privacy = "NoOne" | "Friends" | "Following" | "Followers" | "AllUsers"; +export declare type ISOString = string; diff --git a/dist/types/GeneralTypes.js b/dist/types/GeneralTypes.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/types/GeneralTypes.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/types/GenericOptionTypes.d.ts b/dist/types/GenericOptionTypes.d.ts new file mode 100644 index 000000000..255e1aba4 --- /dev/null +++ b/dist/types/GenericOptionTypes.d.ts @@ -0,0 +1,43 @@ +export declare type UserIdOption = { + userId: number; +}; +export declare type UserIdsOption = { + userIds: number[]; +}; +export declare type PlaceIdOption = { + placeId: number; +}; +export declare type PlaceIdsOption = { + placeIds: number[]; +}; +export declare type UniverseIdOption = { + universeId: number; +}; +export declare type UniverseIdsOption = { + universeIds: number[]; +}; +export declare type AssetIdOption = { + assetId: number; +}; +export declare type AssetIdsOption = { + assetIds: number[]; +}; +export declare type GroupIdOption = { + groupId: number; +}; +export declare type GroupIdsOption = { + groupIds: number[]; +}; +export declare type SortOption = { + sortOrder?: "Asc" | "Desc"; + limit?: 10 | 25 | 50 | 100; + cursor?: string; +}; +export declare type UsernamePasswordOption = { + username: string; + password: string; +}; +export declare type PageSortOrder = SortOption["sortOrder"]; +export declare type PageSortLimit = SortOption["limit"]; +export declare type PageSortCursor = SortOption["cursor"]; +export declare type ItemType = "Asset" | "GamePass" | "Badge" | "Bundle"; diff --git a/dist/types/GenericOptionTypes.js b/dist/types/GenericOptionTypes.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/types/GenericOptionTypes.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/types/GenericTypes.d.ts b/dist/types/GenericTypes.d.ts new file mode 100644 index 000000000..07128703c --- /dev/null +++ b/dist/types/GenericTypes.d.ts @@ -0,0 +1,10 @@ +export declare type Privacy = "NoOne" | "Friends" | "Following" | "Followers" | "AllUsers"; +export declare type ISOString = string; +export declare type CursorData = { + previousPageCursor?: string; + nextPageCursor?: string; + data: T; +}; +export declare type SuccessResponse = { + success: boolean; +}; diff --git a/dist/types/GenericTypes.js b/dist/types/GenericTypes.js new file mode 100644 index 000000000..c8ad2e549 --- /dev/null +++ b/dist/types/GenericTypes.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/util/constants.d.ts b/dist/util/constants.d.ts new file mode 100644 index 000000000..a29b75848 --- /dev/null +++ b/dist/util/constants.d.ts @@ -0,0 +1,26 @@ +export declare const identifierNames: { + userId: string[]; + groupId: string[]; + name: string[]; + username: string[]; + friendsCount: string[]; +}; +export declare const StatusCodeReasons: { + 400: string[]; + 401: string[]; + 403: string[]; + 404: string[]; + 429: string[]; + 500: string[]; +}; +export declare enum CreatorType { + USER = 1, + GROUP = 2 +} +export declare enum MorphAvatarType { + R6 = "MorphToR6", + R15 = "MorphToR15" +} +export declare enum GameGenre { + FPS = "FPS" +} diff --git a/dist/util/constants.js b/dist/util/constants.js new file mode 100644 index 000000000..9f5f2ece4 --- /dev/null +++ b/dist/util/constants.js @@ -0,0 +1,77 @@ +"use strict"; +// All naming conventions Roblox uses for identifier types (userId, groupId, etc.) +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GameGenre = exports.MorphAvatarType = exports.CreatorType = exports.StatusCodeReasons = exports.identifierNames = void 0; +exports.identifierNames = { + userId: [ + "ProfileUserId", + "UserId", + "userId", + "userid", + "PlayerId", + "playerId", + "playerid", + "targetUserId", + "ID", + "id", + "Id", + "targetID" + ], + groupId: ["GroupId", "groupId", "Groupid", "Id", "ID", "id"], + name: ["Name", "name"], + username: [ + "ProfileUserName", + "Username", + "username", + "userName", + "UserName", + "Name", + "name" + ], + friendsCount: ["numFriends", "NumFriends", "numfriends", "FriendsCount"] +}; +exports.StatusCodeReasons = { + 400: [ + "Bad Request (invalid values provided)", + "Invalid body type (content-type) sent", + "Bloxy sent an invalid request (from faulty code, feel free to check it out and submit an issue / PR)", + "(Roblox's fault for not saying) All data provided was valid but you don't have access to view the response or the requested data" + ], + 401: [ + "You're not logged in (use .login on the client to log in)", + "The cookie was not provided in the request, or invalid cookie provided" + ], + 403: [ + "A captcha is required", + "You don't have the proper permissions", + "You're not authorized" + ], + 404: [ + "Invalid request method (i.e. POST instead of GET)", + "Resource removed / updated to another route", + "You're not logged in (use .login on the client to log in)" + ], + 429: [ + "You're sending too many requests. Roblox has rate limits in place to prevent abuse", + "Your IP has sent too many requests" + ], + 500: [ + "Roblox is down", + "There is an error in Roblox's API handler (causing a server error)", + "Invalid body provided which results in the API failing" + ] +}; +var CreatorType; +(function (CreatorType) { + CreatorType[CreatorType["USER"] = 1] = "USER"; + CreatorType[CreatorType["GROUP"] = 2] = "GROUP"; +})(CreatorType = exports.CreatorType || (exports.CreatorType = {})); +var MorphAvatarType; +(function (MorphAvatarType) { + MorphAvatarType["R6"] = "MorphToR6"; + MorphAvatarType["R15"] = "MorphToR15"; +})(MorphAvatarType = exports.MorphAvatarType || (exports.MorphAvatarType = {})); +var GameGenre; +(function (GameGenre) { + GameGenre["FPS"] = "FPS"; +})(GameGenre = exports.GameGenre || (exports.GameGenre = {})); diff --git a/dist/util/converter.d.ts b/dist/util/converter.d.ts new file mode 100644 index 000000000..cd18f92de --- /dev/null +++ b/dist/util/converter.d.ts @@ -0,0 +1,2 @@ +export declare function generalIdentifierToNumber(identifier: string | number): number; +export declare function convertObjectToValue(dataObject: Record, namingConventions: string[]): unknown; diff --git a/dist/util/converter.js b/dist/util/converter.js new file mode 100644 index 000000000..2c912c06e --- /dev/null +++ b/dist/util/converter.js @@ -0,0 +1,21 @@ +"use strict"; +// Misc. "type" converter +Object.defineProperty(exports, "__esModule", { value: true }); +exports.convertObjectToValue = exports.generalIdentifierToNumber = void 0; +function generalIdentifierToNumber(identifier) { + if (typeof identifier === "string") { + return Number(identifier); + } + else { + return identifier; + } +} +exports.generalIdentifierToNumber = generalIdentifierToNumber; +/* eslint-disable security/detect-object-injection */ +function convertObjectToValue(dataObject, namingConventions) { + // eslint-disable-next-line security/detect-object-injection + return namingConventions + .map((name) => dataObject[name] || null) + .find((value) => !!value); +} +exports.convertObjectToValue = convertObjectToValue; diff --git a/dist/util/errors/errors.d.ts b/dist/util/errors/errors.d.ts new file mode 100644 index 000000000..839686735 --- /dev/null +++ b/dist/util/errors/errors.d.ts @@ -0,0 +1,13 @@ +interface BloxyHttpErrorOptions { + message: string; + name?: string; + statusMessage: string; + statusCode: number; + possibleReasons: string[]; +} +export declare class BloxyHttpError extends Error { + statusCode: number; + statusMessage: string; + constructor(options: BloxyHttpErrorOptions); +} +export {}; diff --git a/dist/util/errors/errors.js b/dist/util/errors/errors.js new file mode 100644 index 000000000..86ae467ac --- /dev/null +++ b/dist/util/errors/errors.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BloxyHttpError = void 0; +const constants_1 = require("../constants"); +class BloxyHttpError extends Error { + constructor(options) { + const statusRelatedIssues = constants_1.StatusCodeReasons[options.statusCode] + || []; + options.possibleReasons = [ + ...options.possibleReasons, + ...statusRelatedIssues + ]; + const revisedMessage = `\n\n${options.message} | Status code: ${options.statusCode}, status message: ${options.statusMessage}. ${options.possibleReasons.length > 0 + ? `Possible reasons:\n${options.possibleReasons + .map((r) => `- ${r}`) + .join("\n")}\n\n` + : ""}`; + super(revisedMessage); + this.name = options.name || "BloxyHttpError"; + this.statusCode = options.statusCode; + this.statusMessage = options.statusMessage; + } +} +exports.BloxyHttpError = BloxyHttpError; diff --git a/dist/util/errors/index.d.ts b/dist/util/errors/index.d.ts new file mode 100644 index 000000000..e74c2e775 --- /dev/null +++ b/dist/util/errors/index.d.ts @@ -0,0 +1,8 @@ +import * as errors from "./errors"; +declare const _default: { + messages: { + hello: string; + }; + errors: typeof errors; +}; +export default _default; diff --git a/dist/util/errors/index.js b/dist/util/errors/index.js new file mode 100644 index 000000000..a5a897484 --- /dev/null +++ b/dist/util/errors/index.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const messages_1 = (0, tslib_1.__importDefault)(require("./messages")); +const errors = (0, tslib_1.__importStar)(require("./errors")); +exports.default = { + messages: messages_1.default, + errors +}; diff --git a/dist/util/errors/messages.d.ts b/dist/util/errors/messages.d.ts new file mode 100644 index 000000000..ed723916f --- /dev/null +++ b/dist/util/errors/messages.d.ts @@ -0,0 +1,4 @@ +declare const _default: { + hello: string; +}; +export default _default; diff --git a/dist/util/errors/messages.js b/dist/util/errors/messages.js new file mode 100644 index 000000000..280bb32d3 --- /dev/null +++ b/dist/util/errors/messages.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + hello: "world" +}; diff --git a/dist/util/utilFunctions.d.ts b/dist/util/utilFunctions.d.ts new file mode 100644 index 000000000..b5a66d650 --- /dev/null +++ b/dist/util/utilFunctions.d.ts @@ -0,0 +1 @@ +export declare function utilMergeDeep, N extends Record>(baseObject: B, newObject: N): B & N; diff --git a/dist/util/utilFunctions.js b/dist/util/utilFunctions.js new file mode 100644 index 000000000..94dfb86b2 --- /dev/null +++ b/dist/util/utilFunctions.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.utilMergeDeep = void 0; +/* eslint-disable security/detect-object-injection */ +function utilMergeDeep(baseObject, newObject) { + const target = {}; + // Merge the object into the target object + const internalMerger = (obj) => { + for (const prop in obj) { + // eslint-disable-next-line no-prototype-builtins + if (obj.hasOwnProperty(prop)) { + if (Object.prototype.toString.call(obj[prop]) === "[object Object]") { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + target[prop] = utilMergeDeep(target[prop], obj[prop]); + } + else { + // Otherwise, do a regular merge + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + target[prop] = obj[prop]; + } + } + } + }; + internalMerger(baseObject); + internalMerger(newObject); + return target; +} +exports.utilMergeDeep = utilMergeDeep; From ea5281d6e99013bec5a57cc886bb85fa5ea861c4 Mon Sep 17 00:00:00 2001 From: Sebastian Erik Bauer Date: Thu, 20 Jan 2022 00:10:32 +0100 Subject: [PATCH 24/24] Build to latest state --- dist/client/apis/FriendsAPI.d.ts | 3 +-- dist/client/apis/UsersAPI.d.ts | 3 +++ dist/structures/BaseGroup.d.ts | 16 ++++++++++++ dist/structures/BaseGroup.js | 42 ++++++++++++++++++++++++++++++++ dist/structures/BaseUser.d.ts | 22 ++++++++++++++--- dist/structures/BaseUser.js | 34 ++++++++++++++++++++------ 6 files changed, 107 insertions(+), 13 deletions(-) create mode 100644 dist/structures/BaseGroup.d.ts create mode 100644 dist/structures/BaseGroup.js diff --git a/dist/client/apis/FriendsAPI.d.ts b/dist/client/apis/FriendsAPI.d.ts index d810b69fa..fd6dac3df 100644 --- a/dist/client/apis/FriendsAPI.d.ts +++ b/dist/client/apis/FriendsAPI.d.ts @@ -91,8 +91,7 @@ export declare type FriendsGetUserFollowing = FriendsGetUserFollowers; export declare type FriendsGetUserFollowingCountOptions = FriendsGetUserFollowersCountOptions; export declare type FriendsGetUserFollowingCount = FriendsGetUserFollowersCount; export declare type FriendsGetUserFriendsOptions = { - cursor?: string; - limit?: 10 | 25 | 50 | 100; + userSort?: "Alphabetical" | "StatusAlphabetical" | "StatusFrequents"; userId: number; }; export declare type FriendsGetUserFriends = { diff --git a/dist/client/apis/UsersAPI.d.ts b/dist/client/apis/UsersAPI.d.ts index 823d704d6..edb2a83c9 100644 --- a/dist/client/apis/UsersAPI.d.ts +++ b/dist/client/apis/UsersAPI.d.ts @@ -97,6 +97,9 @@ export declare class UsersAPI extends BaseAPI { getUsersByIds(options: UsersGetUsersByUserIdsOptions): Promise; getUserNameHistory(options: { userId: number; + limit?: 10 | 25 | 50 | 100; + cursor?: string; + sortOrder?: "Asc" | "Desc"; }): Promise; searchUsers(options: UsersSearchUsersOptions): Promise; } diff --git a/dist/structures/BaseGroup.d.ts b/dist/structures/BaseGroup.d.ts new file mode 100644 index 000000000..a0a963810 --- /dev/null +++ b/dist/structures/BaseGroup.d.ts @@ -0,0 +1,16 @@ +import { Client } from ".."; +/** + * Represents a Roblox group ID and gives direct access to various group-related APIs. + */ +export declare class BaseGroup { + #private; + /** + * @param {Client} client The Bloxy Client + * @param {number} groupId The group ID + */ + constructor(client: Client, groupId: number); + get client(): Client; + get groupId(): number; + acceptUser(user: number): Promise; + declineUser(user: number): Promise; +} diff --git a/dist/structures/BaseGroup.js b/dist/structures/BaseGroup.js new file mode 100644 index 000000000..55bd3dae5 --- /dev/null +++ b/dist/structures/BaseGroup.js @@ -0,0 +1,42 @@ +"use strict"; +var _BaseGroup_client, _BaseGroup_groupId; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseGroup = void 0; +const tslib_1 = require("tslib"); +/** + * Represents a Roblox group ID and gives direct access to various group-related APIs. + */ +class BaseGroup { + /** + * @param {Client} client The Bloxy Client + * @param {number} groupId The group ID + */ + constructor(client, groupId) { + /** @private */ + _BaseGroup_client.set(this, void 0); + /** @private */ + _BaseGroup_groupId.set(this, void 0); + (0, tslib_1.__classPrivateFieldSet)(this, _BaseGroup_client, client, "f"); + (0, tslib_1.__classPrivateFieldSet)(this, _BaseGroup_groupId, groupId, "f"); + } + get client() { + return (0, tslib_1.__classPrivateFieldGet)(this, _BaseGroup_client, "f"); + } + get groupId() { + return (0, tslib_1.__classPrivateFieldGet)(this, _BaseGroup_groupId, "f"); + } + acceptUser(user) { + return this.client.apis.groupsAPI.acceptJoinRequest({ + groupId: this.groupId, + userId: user + }); + } + declineUser(user) { + return this.client.apis.groupsAPI.declineJoinRequest({ + groupId: this.groupId, + userId: user + }); + } +} +exports.BaseGroup = BaseGroup; +_BaseGroup_client = new WeakMap(), _BaseGroup_groupId = new WeakMap(); diff --git a/dist/structures/BaseUser.d.ts b/dist/structures/BaseUser.d.ts index dcd1c2aab..af5747626 100644 --- a/dist/structures/BaseUser.d.ts +++ b/dist/structures/BaseUser.d.ts @@ -1,4 +1,4 @@ -import { AccountInformationPromotionChannels, AccountInformationRobloxBadges, Client, EconomyGetSelfCurrency, FriendsGetUserFollowers, FriendsGetUserFriends, ItemType, PageSortLimit, PageSortOrder, PresenceGetUsersPresence, UsersUserNameHistory } from ".."; +import { AccountInformationPromotionChannels, AccountInformationRobloxBadges, Client, EconomyGetSelfCurrency, FriendsGetUserFollowers, FriendsGetUserFriends, FriendsGetUserFriendsOptions, ItemType, PageSortLimit, PageSortOrder, PresenceGetUsersPresence, PrivateMessagesSendMessage, UsersUserNameHistory } from ".."; import { CursorPage } from "./CursorPage"; export declare type BaseUserOwnedBadge = { badgeId: number; @@ -25,8 +25,13 @@ export declare class BaseUser { get userId(): number; /** * Return the username history of the user. + * @param limit The number of followers to return + * @param sortOrder The sort order of the followers + * @param cursor The cursor to continue at */ - getUsernameHistory(): Promise; + getUsernameHistory(limit?: PageSortLimit, sortOrder?: PageSortOrder, cursor?: string): Promise>; /** * Returns the users current presence. */ @@ -36,7 +41,7 @@ export declare class BaseUser { * @param limit The number of friends to return * @param cursor The cursor to continue at */ - getFriends(limit?: PageSortLimit, cursor?: string): Promise; + getFriends(userSort?: FriendsGetUserFriendsOptions["userSort"]): Promise; /** * Returns the user's robux amount. The BaseUser must be the currently authenticated user, or else this function throws an error. */ @@ -105,5 +110,14 @@ export declare class BaseUser { * @param sortOrder The sort order of the followings * @param cursor The cursor to continue at */ - getFollowings(limit?: PageSortLimit, sortOrder?: PageSortOrder, cursor?: string): Promise; + getFollowings(limit?: PageSortLimit, sortOrder?: PageSortOrder, cursor?: string): Promise>; + /** + * Sends a private message to the user + * @param recipientId The user ID to send the message to + * @param subject The subject of the message + * @param body The body of the message + */ + sendMessage(recipientId: number, subject: string, body: string): Promise; } diff --git a/dist/structures/BaseUser.js b/dist/structures/BaseUser.js index 917165037..a94ed6673 100644 --- a/dist/structures/BaseUser.js +++ b/dist/structures/BaseUser.js @@ -26,11 +26,16 @@ class BaseUser { } /** * Return the username history of the user. + * @param limit The number of followers to return + * @param sortOrder The sort order of the followers + * @param cursor The cursor to continue at */ - getUsernameHistory() { - return this.client.apis.usersAPI.getUserNameHistory({ + getUsernameHistory(limit = 10, sortOrder = "Asc", cursor) { + return this.client.apis.usersAPI + .getUserNameHistory({ userId: this.userId - }); + }) + .then((response) => new CursorPage_1.CursorPage({ limit, sortOrder, cursor }, { userId: this.userId }, response, (0, CursorPage_1.contextCall)(this.client.apis.usersAPI, this.client.apis.usersAPI.getUserNameHistory))); } /** * Returns the users current presence. @@ -47,11 +52,10 @@ class BaseUser { * @param limit The number of friends to return * @param cursor The cursor to continue at */ - getFriends(limit = 10, cursor) { + getFriends(userSort) { return this.client.apis.friendsAPI.getUserFriends({ userId: this.userId, - limit, - cursor + userSort }); } /** @@ -200,11 +204,27 @@ class BaseUser { * @param cursor The cursor to continue at */ getFollowings(limit = 10, sortOrder = "Asc", cursor) { - return this.client.apis.friendsAPI.getUserFollowing({ + return this.client.apis.friendsAPI + .getUserFollowing({ userId: this.userId, limit, sortOrder, cursor + }) + .then((response) => new CursorPage_1.CursorPage({ limit, sortOrder, cursor }, { userId: this.userId }, response, (0, CursorPage_1.contextCall)(this.client.apis.friendsAPI, this.client.apis.friendsAPI.getUserFollowers))); + } + /** + * Sends a private message to the user + * @param recipientId The user ID to send the message to + * @param subject The subject of the message + * @param body The body of the message + */ + sendMessage(recipientId, subject, body) { + return this.client.apis.privateMessagesAPI.sendMessage({ + userId: this.userId, + recipientId, + subject, + body }); } }