From 79ee531d29c1f30d52ddf52aba7ace795f35de9e Mon Sep 17 00:00:00 2001 From: SnowCait Date: Wed, 21 Dec 2022 04:26:20 +0900 Subject: [PATCH 1/4] set-output => GITHUB_OUTPUT --- .github/workflows/increment-version.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/increment-version.yml b/.github/workflows/increment-version.yml index cb0f437..7cfbed1 100644 --- a/.github/workflows/increment-version.yml +++ b/.github/workflows/increment-version.yml @@ -25,7 +25,7 @@ jobs: run: | set -x version=$(npm --no-git-tag-version version $INCREMENT_VERSION) - echo "::set-output name=version::${version}" + echo "version=${version}" >> $GITHUB_OUTPUT sed -i -e "s|${GITHUB_REPOSITORY}@v[.0-9]\+|${GITHUB_REPOSITORY}@${version}|g" README.md .github/workflows/released.yml git diff env: From b332f3cbc8baa6acfd2129cc3015d5ff2eed2634 Mon Sep 17 00:00:00 2001 From: SnowCait Date: Wed, 21 Dec 2022 04:29:32 +0900 Subject: [PATCH 2/4] workflow_dispatch --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2454b89..43be34b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: branches: - main + workflow_dispatch: jobs: paths: @@ -15,7 +16,7 @@ jobs: steps: - run: cat $GITHUB_EVENT_PATH - uses: actions/checkout@v3 - if: github.event_name == 'push' + if: github.event_name != 'pull_request' - uses: dorny/paths-filter@v2.11.1 id: changes with: From 65872f288c1b4ee0407606c7d83709c36239bf35 Mon Sep 17 00:00:00 2001 From: SnowCait Date: Wed, 21 Dec 2022 04:33:35 +0900 Subject: [PATCH 3/4] npm update --- package-lock.json | 5731 ++++----------------------------------------- 1 file changed, 515 insertions(+), 5216 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6da411..5cc1c09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "tweet", "version": "1.3.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -32,9 +32,9 @@ } }, "node_modules/@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", + "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", "dependencies": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -74,30 +74,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", + "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", + "@babel/generator": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.5", + "@babel/parser": "^7.20.5", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -122,12 +122,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", + "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.10", + "@babel/types": "^7.20.5", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -150,14 +150,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -186,13 +186,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -223,40 +223,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -275,18 +275,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -302,14 +302,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", + "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" }, "engines": { "node": ">=6.9.0" @@ -401,9 +401,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", + "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -560,12 +560,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -575,25 +575,25 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", + "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz", - "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz", + "integrity": "sha512-tqeujPiuEfcH067mx+7otTQWROVMKHXEaOQcAeNV5dDdbPWvPcFA8/W9LXw2NfjNmOetqLl03dfnG2WALPlsRQ==", "dev": true, "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -614,19 +614,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", + "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", + "@babel/generator": "^7.20.5", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -644,13 +644,13 @@ } }, "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", + "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -664,15 +664,15 @@ "dev": true }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", + "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.4.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -681,27 +681,39 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, + "node_modules/@github/browserslist-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz", + "integrity": "sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==", + "dev": true + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "engines": { + "node": ">=12.22" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -959,15 +971,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/fake-timers": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", @@ -1180,13 +1183,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -1225,15 +1228,15 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.24.27", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz", - "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==", + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, "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==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -1249,9 +1252,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1281,9 +1284,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz", - "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -1345,15 +1348,21 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "version": "18.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", + "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", "dev": true }, "node_modules/@types/prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "node_modules/@types/stack-utils": { @@ -1363,9 +1372,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz", - "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==", + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz", + "integrity": "sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -1378,17 +1387,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz", - "integrity": "sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.0.tgz", + "integrity": "sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.0", - "@typescript-eslint/type-utils": "5.33.0", - "@typescript-eslint/utils": "5.33.0", + "@typescript-eslint/scope-manager": "5.47.0", + "@typescript-eslint/type-utils": "5.47.0", + "@typescript-eslint/utils": "5.47.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -1411,14 +1420,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.0.tgz", - "integrity": "sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.0.tgz", + "integrity": "sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.0", - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/typescript-estree": "5.33.0", + "@typescript-eslint/scope-manager": "5.47.0", + "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/typescript-estree": "5.47.0", "debug": "^4.3.4" }, "engines": { @@ -1438,13 +1447,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz", - "integrity": "sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz", + "integrity": "sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/visitor-keys": "5.33.0" + "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/visitor-keys": "5.47.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1455,12 +1464,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz", - "integrity": "sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.47.0.tgz", + "integrity": "sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.33.0", + "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/utils": "5.47.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1481,9 +1491,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.0.tgz", - "integrity": "sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", + "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1494,13 +1504,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz", - "integrity": "sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", + "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/visitor-keys": "5.33.0", + "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/visitor-keys": "5.47.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1521,17 +1531,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.0.tgz", - "integrity": "sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.47.0.tgz", + "integrity": "sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.0", - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/typescript-estree": "5.33.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.47.0", + "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/typescript-estree": "5.47.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1567,12 +1579,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz", - "integrity": "sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", + "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/types": "5.47.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1593,9 +1605,9 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1681,9 +1693,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -1713,15 +1725,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -1741,14 +1753,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -1765,9 +1777,9 @@ "dev": true }, "node_modules/axe-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", - "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.1.tgz", + "integrity": "sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==", "dev": true, "engines": { "node": ">=4" @@ -1899,9 +1911,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "funding": [ { @@ -1914,10 +1926,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -1985,9 +1997,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001375", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz", - "integrity": "sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==", + "version": "1.0.30001439", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", + "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", "dev": true, "funding": [ { @@ -2026,10 +2038,13 @@ } }, "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", + "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { "version": "1.2.2", @@ -2038,14 +2053,17 @@ "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==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/co": { @@ -2089,18 +2107,15 @@ "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" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/core-js-pure": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", - "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", + "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -2233,9 +2248,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.215", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.215.tgz", - "integrity": "sha512-vqZxT8C5mlDZ//hQFhneHmOLnj1LhbzxV0+I1yqHV8SB1Oo4Y5Ne9+qQhwHl7O1s9s9cRuo2l5CoLEHdhMTwZg==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, "node_modules/emittery": { @@ -2266,33 +2281,35 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", + "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", "unbox-primitive": "^1.0.2" }, "engines": { @@ -2350,14 +2367,15 @@ } }, "node_modules/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "version": "8.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", + "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.4.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2367,21 +2385,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -2392,8 +2410,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -2437,16 +2454,20 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -2458,77 +2479,10 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-escompat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.2.0.tgz", - "integrity": "sha512-obXAKKiZE/wB2fgIw0ZxCmp+8vpDsUw2inkaok1i7OVxY4cEds4Y9YCoky0f5V+q8rqZpTUJDv1R9ykWbXLX8Q==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.3.4.tgz", + "integrity": "sha512-d/k6JwRzGRY6uZ426l6Ut6Eb2S/pi/079Ykj2GdWSzwm6WJHkdm28tECUWfLtpFA5ObApjPw6wR9bgY+uWAhag==", "dev": true, "dependencies": { "browserslist": "^4.21.0" @@ -2581,21 +2535,22 @@ } }, "node_modules/eslint-plugin-github": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.3.7.tgz", - "integrity": "sha512-tYZdXvAEz4JCMrC4NHIUoJTsLUvydCxff5OqB5hgU0vQbLmMkw6VOipN2KNe+T06pEhAWs1KBEwyq9cmMWRe7A==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.6.0.tgz", + "integrity": "sha512-6VMH3wLUPEnV/0VuV3f0F74LF93N522Ht9KBYWDuPWKhr1NBzCqySIbQsxjPINIynoLtsErSc/YgICrocCc2zw==", "dev": true, "dependencies": { + "@github/browserslist-config": "^1.0.0", "@typescript-eslint/eslint-plugin": "^5.1.0", "@typescript-eslint/parser": "^5.1.0", "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-escompat": "^3.1.0", + "eslint-plugin-escompat": "^3.3.3", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-i18n-text": "^1.0.1", "eslint-plugin-import": "^2.25.2", "eslint-plugin-jsx-a11y": "^6.6.0", - "eslint-plugin-no-only-tests": "^2.6.0", + "eslint-plugin-no-only-tests": "^3.0.0", "eslint-plugin-prettier": "^4.0.0", "eslint-rule-documentation": ">=1.0.0", "jsx-ast-utils": "^3.3.2", @@ -2673,9 +2628,9 @@ "dev": true }, "node_modules/eslint-plugin-jest": { - "version": "26.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.2.tgz", - "integrity": "sha512-67oh0FKaku9y48OpLzL3uK9ckrgLb83Sp5gxxTbtOGDw9lq6D8jw/Psj/9CipkbK406I2M7mvx1q+pv/MdbvxA==", + "version": "26.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz", + "integrity": "sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -2733,12 +2688,12 @@ } }, "node_modules/eslint-plugin-no-only-tests": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz", + "integrity": "sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==", "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">=5.0.0" } }, "node_modules/eslint-plugin-prettier": { @@ -2821,9 +2776,9 @@ } }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -2976,15 +2931,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/expect/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/expect/node_modules/jest-matcher-utils": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", @@ -3034,9 +2980,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3074,18 +3020,18 @@ "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==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", "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==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" @@ -3145,9 +3091,9 @@ } }, "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/fs": { @@ -3199,12 +3145,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -3233,9 +3173,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -3316,9 +3256,9 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3350,6 +3290,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -3447,9 +3399,9 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -3516,12 +3468,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.1.3", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -3564,9 +3516,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -3576,9 +3528,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3677,6 +3629,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -3775,9 +3736,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -3945,31 +3906,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-circus/node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-circus/node_modules/jest-matcher-utils": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", @@ -4097,15 +4033,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-config/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", @@ -4142,6 +4069,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-diff/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-docblock": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", @@ -4154,6 +4090,55 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/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/jest-each/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-environment-node": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", @@ -4172,12 +4157,12 @@ } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-haste-map": { @@ -4230,15 +4215,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-leak-detector/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", @@ -4275,6 +4251,15 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-message-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", @@ -4342,9 +4327,9 @@ } }, "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==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -4535,15 +4520,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", @@ -4638,15 +4614,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-validate/node_modules/pretty-format": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", @@ -4716,6 +4683,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4765,9 +4742,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -4805,12 +4782,12 @@ "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.7.tgz", + "integrity": "sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" } }, "node_modules/leven": { @@ -4993,10 +4970,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/ms": { "version": "2.1.2", @@ -5010,6 +4990,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -5017,9 +5003,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "node_modules/normalize-path": { @@ -5062,9 +5048,9 @@ } }, "node_modules/object.assign": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", - "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -5080,14 +5066,14 @@ } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -5467,9 +5453,9 @@ "dev": true }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "node_modules/regexp.prototype.flags": { @@ -5614,16 +5600,24 @@ "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-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5717,9 +5711,9 @@ "dev": true }, "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==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -5771,28 +5765,28 @@ "dev": true }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5853,9 +5847,9 @@ } }, "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", @@ -5951,9 +5945,9 @@ } }, "node_modules/ts-jest": { - "version": "28.0.7", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz", - "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==", + "version": "28.0.8", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz", + "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -6056,9 +6050,9 @@ } }, "node_modules/twitter-api-v2": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.12.3.tgz", - "integrity": "sha512-FM+RmHdVbCKw/KZ99+if4JQyl2Nx5eF/Jl8CNDeV5J/NSnuFgk3bFw1cZHcNusXitxTWIQ0TQFHr1BkgWDz0wQ==" + "version": "1.12.10", + "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.12.10.tgz", + "integrity": "sha512-gLo4u3EZM8zt2CRZ5uJaWpGVoH1/xR0veF74E3K7WCQXUONoZVc0pbg6dGfoPBOmEXhS4QHGcgAMj1TRU+OSXA==" }, "node_modules/type-check": { "version": "0.4.0", @@ -6094,9 +6088,9 @@ } }, "node_modules/typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6122,9 +6116,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "funding": [ { @@ -6177,12 +6171,6 @@ "uuid": "dist/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": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", @@ -6270,16 +6258,16 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/y18n": { @@ -6298,18 +6286,18 @@ "dev": true }, "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" @@ -6336,4694 +6324,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", - "requires": { - "@actions/http-client": "^2.0.1", - "uuid": "^8.3.2" - } - }, - "@actions/http-client": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", - "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", - "requires": { - "tunnel": "^0.0.6" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "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/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "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.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "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.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", - "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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz", - "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==", - "dev": true, - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", - "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.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "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.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, - "@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" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "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 - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - } - }, - "@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - } - }, - "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - }, - "dependencies": { - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - } - } - }, - "@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - } - }, - "@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "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-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "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.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@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" - } - }, - "@sinclair/typebox": { - "version": "0.24.27", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz", - "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==", - "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": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "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.18.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz", - "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@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/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/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", - "dev": true, - "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@types/prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", - "dev": true - }, - "@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/yargs": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz", - "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz", - "integrity": "sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.33.0", - "@typescript-eslint/type-utils": "5.33.0", - "@typescript-eslint/utils": "5.33.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.0.tgz", - "integrity": "sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.33.0", - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/typescript-estree": "5.33.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz", - "integrity": "sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/visitor-keys": "5.33.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz", - "integrity": "sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.33.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.0.tgz", - "integrity": "sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz", - "integrity": "sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/visitor-keys": "5.33.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.0.tgz", - "integrity": "sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.0", - "@typescript-eslint/types": "5.33.0", - "@typescript-eslint/typescript-estree": "5.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "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" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz", - "integrity": "sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.33.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@vercel/ncc": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.34.0.tgz", - "integrity": "sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==", - "dev": true - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "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": {} - }, - "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-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 - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "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 - }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "axe-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", - "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "requires": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "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": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@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": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^28.1.3", - "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 - }, - "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" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "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 - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "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.30001375", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz", - "integrity": "sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==", - "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.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "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" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "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 - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "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-js-pure": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", - "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", - "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" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "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 - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "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-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "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" - } - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" - }, - "electron-to-chromium": { - "version": "1.4.215", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.215.tgz", - "integrity": "sha512-vqZxT8C5mlDZ//hQFhneHmOLnj1LhbzxV0+I1yqHV8SB1Oo4Y5Ne9+qQhwHl7O1s9s9cRuo2l5CoLEHdhMTwZg==", - "dev": true - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "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" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.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.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "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.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, - "eslint-plugin-escompat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.2.0.tgz", - "integrity": "sha512-obXAKKiZE/wB2fgIw0ZxCmp+8vpDsUw2inkaok1i7OVxY4cEds4Y9YCoky0f5V+q8rqZpTUJDv1R9ykWbXLX8Q==", - "dev": true, - "requires": { - "browserslist": "^4.21.0" - } - }, - "eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "eslint-plugin-filenames": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz", - "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==", - "dev": true, - "requires": { - "lodash.camelcase": "4.3.0", - "lodash.kebabcase": "4.1.1", - "lodash.snakecase": "4.1.1", - "lodash.upperfirst": "4.3.1" - } - }, - "eslint-plugin-github": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.3.7.tgz", - "integrity": "sha512-tYZdXvAEz4JCMrC4NHIUoJTsLUvydCxff5OqB5hgU0vQbLmMkw6VOipN2KNe+T06pEhAWs1KBEwyq9cmMWRe7A==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^5.1.0", - "@typescript-eslint/parser": "^5.1.0", - "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-escompat": "^3.1.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-jsx-a11y": "^6.6.0", - "eslint-plugin-no-only-tests": "^2.6.0", - "eslint-plugin-prettier": "^4.0.0", - "eslint-rule-documentation": ">=1.0.0", - "jsx-ast-utils": "^3.3.2", - "prettier": "^2.2.1", - "svg-element-attributes": "^1.3.1" - } - }, - "eslint-plugin-i18n-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz", - "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==", - "dev": true, - "requires": {} - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.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" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "eslint-plugin-jest": { - "version": "26.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.2.tgz", - "integrity": "sha512-67oh0FKaku9y48OpLzL3uK9ckrgLb83Sp5gxxTbtOGDw9lq6D8jw/Psj/9CipkbK406I2M7mvx1q+pv/MdbvxA==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.10.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "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 - } - } - }, - "eslint-plugin-no-only-tests": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-rule-documentation": { - "version": "1.0.23", - "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz", - "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "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.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.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" - } - }, - "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" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "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 - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "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-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "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": "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" - } - }, - "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.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "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 - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "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-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "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 - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "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.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "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-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "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 - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "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 - }, - "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 - }, - "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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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 - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "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-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "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-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "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.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "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.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", - "import-local": "^3.0.2", - "jest-cli": "^28.1.3" - } - }, - "jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "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 - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.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 - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "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 - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "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 - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@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": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - } - }, - "jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "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.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "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 - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "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 - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "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" - } - } - } - }, - "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" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "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-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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "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" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "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" - } - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "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 - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "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" - } - }, - "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" - } - }, - "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.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "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 - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "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 - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "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 - }, - "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" - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", - "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "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-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" - } - }, - "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" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "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" - } - }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "requires": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "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 - }, - "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.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "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" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "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 - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "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": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "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" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "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 - }, - "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 - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "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 - }, - "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 - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "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.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "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": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "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 - } - } - }, - "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" - }, - "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 - } - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "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 - }, - "svg-element-attributes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz", - "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==", - "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": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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" - } - }, - "ts-jest": { - "version": "28.0.7", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz", - "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", - "json5": "^2.2.1", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "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" - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "twitter-api-v2": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.12.3.tgz", - "integrity": "sha512-FM+RmHdVbCKw/KZ99+if4JQyl2Nx5eF/Jl8CNDeV5J/NSnuFgk3bFw1cZHcNusXitxTWIQ0TQFHr1BkgWDz0wQ==" - }, - "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 - }, - "typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "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" - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - } - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "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": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.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" - } - }, - "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-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "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 - }, - "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": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "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": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "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.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "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 - } } } From 47e8e3fc906e658dd9737e8656eed890c1322578 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 19:34:38 +0000 Subject: [PATCH 4/4] npm run package --- dist/index.js | 310 +++++++++++++++++++++++++++++++++++++++++----- dist/index.js.map | 2 +- 2 files changed, 283 insertions(+), 29 deletions(-) diff --git a/dist/index.js b/dist/index.js index e4da5e3..1de13b4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -328,7 +328,6 @@ const file_command_1 = __nccwpck_require__(717); const utils_1 = __nccwpck_require__(5278); const os = __importStar(__nccwpck_require__(2037)); const path = __importStar(__nccwpck_require__(1017)); -const uuid_1 = __nccwpck_require__(5840); const oidc_utils_1 = __nccwpck_require__(8041); /** * The code to exit an action @@ -358,20 +357,9 @@ function exportVariable(name, val) { process.env[name] = convertedVal; const filePath = process.env['GITHUB_ENV'] || ''; if (filePath) { - const delimiter = `ghadelimiter_${uuid_1.v4()}`; - // These should realistically never happen, but just in case someone finds a way to exploit uuid generation let's not allow keys or values that contain the delimiter. - if (name.includes(delimiter)) { - throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); - } - if (convertedVal.includes(delimiter)) { - throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); - } - const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; - file_command_1.issueCommand('ENV', commandValue); - } - else { - command_1.issueCommand('set-env', { name }, convertedVal); + return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); } + command_1.issueCommand('set-env', { name }, convertedVal); } exports.exportVariable = exportVariable; /** @@ -389,7 +377,7 @@ exports.setSecret = setSecret; function addPath(inputPath) { const filePath = process.env['GITHUB_PATH'] || ''; if (filePath) { - file_command_1.issueCommand('PATH', inputPath); + file_command_1.issueFileCommand('PATH', inputPath); } else { command_1.issueCommand('add-path', {}, inputPath); @@ -429,7 +417,10 @@ function getMultilineInput(name, options) { const inputs = getInput(name, options) .split('\n') .filter(x => x !== ''); - return inputs; + if (options && options.trimWhitespace === false) { + return inputs; + } + return inputs.map(input => input.trim()); } exports.getMultilineInput = getMultilineInput; /** @@ -462,8 +453,12 @@ exports.getBooleanInput = getBooleanInput; */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function setOutput(name, value) { + const filePath = process.env['GITHUB_OUTPUT'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); + } process.stdout.write(os.EOL); - command_1.issueCommand('set-output', { name }, value); + command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value)); } exports.setOutput = setOutput; /** @@ -592,7 +587,11 @@ exports.group = group; */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function saveState(name, value) { - command_1.issueCommand('save-state', { name }, value); + const filePath = process.env['GITHUB_STATE'] || ''; + if (filePath) { + return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); + } + command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value)); } exports.saveState = saveState; /** @@ -658,13 +657,14 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.issueCommand = void 0; +exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; // We use any as a valid input type /* eslint-disable @typescript-eslint/no-explicit-any */ const fs = __importStar(__nccwpck_require__(7147)); const os = __importStar(__nccwpck_require__(2037)); +const uuid_1 = __nccwpck_require__(5840); const utils_1 = __nccwpck_require__(5278); -function issueCommand(command, message) { +function issueFileCommand(command, message) { const filePath = process.env[`GITHUB_${command}`]; if (!filePath) { throw new Error(`Unable to find environment variable for file command ${command}`); @@ -676,7 +676,22 @@ function issueCommand(command, message) { encoding: 'utf8' }); } -exports.issueCommand = issueCommand; +exports.issueFileCommand = issueFileCommand; +function prepareKeyValueMessage(key, value) { + const delimiter = `ghadelimiter_${uuid_1.v4()}`; + const convertedValue = utils_1.toCommandValue(value); + // These should realistically never happen, but just in case someone finds a + // way to exploit uuid generation let's not allow keys or values that contain + // the delimiter. + if (key.includes(delimiter)) { + throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); + } + if (convertedValue.includes(delimiter)) { + throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); + } + return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; +} +exports.prepareKeyValueMessage = prepareKeyValueMessage; //# sourceMappingURL=file-command.js.map /***/ }), @@ -3536,11 +3551,15 @@ class RequestParamHelpers { return body; } if (mode === 'json') { - headers['content-type'] = 'application/json;charset=UTF-8'; + if (!headers['content-type']) { + headers['content-type'] = 'application/json;charset=UTF-8'; + } return JSON.stringify(body); } else if (mode === 'url') { - headers['content-type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + if (!headers['content-type']) { + headers['content-type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + } if (Object.keys(body).length) { return new URLSearchParams(body) .toString() @@ -3556,8 +3575,10 @@ class RequestParamHelpers { for (const parameter in body) { form.append(parameter, body[parameter]); } - const formHeaders = form.getHeaders(); - headers['content-type'] = formHeaders['content-type']; + if (!headers['content-type']) { + const formHeaders = form.getHeaders(); + headers['content-type'] = formHeaders['content-type']; + } return form.getBuffer(); } } @@ -4411,6 +4432,9 @@ class TwitterPaginator { this._sharedParams = sharedParams; } get _isRateLimitOk() { + if (!this._rateLimit) { + return true; + } const resetDate = this._rateLimit.reset * 1000; if (resetDate < Date.now()) { return true; @@ -4480,7 +4504,8 @@ class TwitterPaginator { return this; } get rateLimit() { - return { ...this._rateLimit }; + var _a; + return { ...(_a = this._rateLimit) !== null && _a !== void 0 ? _a : {} }; } /** Get raw data returned by Twitter API. */ get data() { @@ -4630,6 +4655,140 @@ class WelcomeDmV1Paginator extends paginator_v1_1.CursoredV1Paginator { exports.WelcomeDmV1Paginator = WelcomeDmV1Paginator; +/***/ }), + +/***/ 4509: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserFollowerIdsV1Paginator = exports.UserFollowerListV1Paginator = void 0; +const paginator_v1_1 = __nccwpck_require__(593); +class UserFollowerListV1Paginator extends paginator_v1_1.CursoredV1Paginator { + constructor() { + super(...arguments); + this._endpoint = 'followers/list.json'; + } + refreshInstanceFromResult(response, isNextPage) { + const result = response.data; + this._rateLimit = response.rateLimit; + if (isNextPage) { + this._realData.users.push(...result.users); + this._realData.next_cursor = result.next_cursor; + } + } + getPageLengthFromRequest(result) { + return result.data.users.length; + } + getItemArray() { + return this.users; + } + /** + * Users returned by paginator. + */ + get users() { + return this._realData.users; + } +} +exports.UserFollowerListV1Paginator = UserFollowerListV1Paginator; +class UserFollowerIdsV1Paginator extends paginator_v1_1.CursoredV1Paginator { + constructor() { + super(...arguments); + this._endpoint = 'followers/ids.json'; + this._maxResultsWhenFetchLast = 5000; + } + refreshInstanceFromResult(response, isNextPage) { + const result = response.data; + this._rateLimit = response.rateLimit; + if (isNextPage) { + this._realData.ids.push(...result.ids); + this._realData.next_cursor = result.next_cursor; + } + } + getPageLengthFromRequest(result) { + return result.data.ids.length; + } + getItemArray() { + return this.ids; + } + /** + * Users IDs returned by paginator. + */ + get ids() { + return this._realData.ids; + } +} +exports.UserFollowerIdsV1Paginator = UserFollowerIdsV1Paginator; + + +/***/ }), + +/***/ 5905: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserFollowersIdsV1Paginator = exports.UserFriendListV1Paginator = void 0; +const paginator_v1_1 = __nccwpck_require__(593); +class UserFriendListV1Paginator extends paginator_v1_1.CursoredV1Paginator { + constructor() { + super(...arguments); + this._endpoint = 'friends/list.json'; + } + refreshInstanceFromResult(response, isNextPage) { + const result = response.data; + this._rateLimit = response.rateLimit; + if (isNextPage) { + this._realData.users.push(...result.users); + this._realData.next_cursor = result.next_cursor; + } + } + getPageLengthFromRequest(result) { + return result.data.users.length; + } + getItemArray() { + return this.users; + } + /** + * Users returned by paginator. + */ + get users() { + return this._realData.users; + } +} +exports.UserFriendListV1Paginator = UserFriendListV1Paginator; +class UserFollowersIdsV1Paginator extends paginator_v1_1.CursoredV1Paginator { + constructor() { + super(...arguments); + this._endpoint = 'friends/ids.json'; + this._maxResultsWhenFetchLast = 5000; + } + refreshInstanceFromResult(response, isNextPage) { + const result = response.data; + this._rateLimit = response.rateLimit; + if (isNextPage) { + this._realData.ids.push(...result.ids); + this._realData.next_cursor = result.next_cursor; + } + } + getPageLengthFromRequest(result) { + return result.data.ids.length; + } + getItemArray() { + return this.ids; + } + /** + * Users IDs returned by paginator. + */ + get ids() { + return this._realData.ids; + } +} +exports.UserFollowersIdsV1Paginator = UserFollowersIdsV1Paginator; + + /***/ }), /***/ 5814: @@ -4661,6 +4820,8 @@ __exportStar(__nccwpck_require__(8985), exports); __exportStar(__nccwpck_require__(2178), exports); __exportStar(__nccwpck_require__(5631), exports); __exportStar(__nccwpck_require__(7874), exports); +__exportStar(__nccwpck_require__(5905), exports); +__exportStar(__nccwpck_require__(4509), exports); /***/ }), @@ -6147,7 +6308,18 @@ class ApiResponseError extends ApiError { this.code = options.code; this.headers = options.headers; this.rateLimit = options.rateLimit; - this.data = options.data; + // Fix bad error data payload on some v1 endpoints (see https://github.com/PLhery/node-twitter-api-v2/issues/342) + if (options.data && typeof options.data === 'object' && 'error' in options.data && !options.data.errors) { + const data = { ...options.data }; + data.errors = [{ + code: EApiV1ErrorCode.InternalError, + message: data.error, + }]; + this.data = data; + } + else { + this.data = options.data; + } } get request() { return this._options.request; @@ -6829,7 +7001,7 @@ class TwitterApiv1 extends client_v1_write_1.default { if (!attachment) { throw new Error('The given direct message doesn\'t contain any attachment'); } - urlOrDm = attachment.media_url_https; + urlOrDm = attachment.media.media_url_https; } const data = await this.get(urlOrDm, undefined, { forceParseMode: 'buffer', prefix: '' }); if (!data.length) { @@ -6859,6 +7031,8 @@ const helpers_1 = __nccwpck_require__(1120); const client_v1_1 = __importDefault(__nccwpck_require__(7030)); const tweet_paginator_v1_1 = __nccwpck_require__(9848); const mutes_paginator_v1_1 = __nccwpck_require__(7277); +const followers_paginator_v1_1 = __nccwpck_require__(4509); +const friends_paginator_v1_1 = __nccwpck_require__(5905); const user_paginator_v1_1 = __nccwpck_require__(8985); const list_paginator_v1_1 = __nccwpck_require__(5631); /** @@ -7064,6 +7238,72 @@ class TwitterApiv1ReadOnly extends client_subclient_1.default { queryParams, }); } + /** + * Returns an array of user objects of friends of the specified user. + * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-list + */ + async userFriendList(options = {}) { + const queryParams = { + ...options, + }; + const initialRq = await this.get('friends/list.json', queryParams, { fullResponse: true }); + return new friends_paginator_v1_1.UserFriendListV1Paginator({ + realData: initialRq.data, + rateLimit: initialRq.rateLimit, + instance: this, + queryParams, + }); + } + /** + * Returns an array of user objects of followers of the specified user. + * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-list + */ + async userFollowerList(options = {}) { + const queryParams = { + ...options, + }; + const initialRq = await this.get('followers/list.json', queryParams, { fullResponse: true }); + return new followers_paginator_v1_1.UserFollowerListV1Paginator({ + realData: initialRq.data, + rateLimit: initialRq.rateLimit, + instance: this, + queryParams, + }); + } + /** + * Returns an array of numeric user ids of followers of the specified user. + * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids + */ + async userFollowerIds(options = {}) { + const queryParams = { + stringify_ids: true, + ...options, + }; + const initialRq = await this.get('followers/ids.json', queryParams, { fullResponse: true }); + return new followers_paginator_v1_1.UserFollowerIdsV1Paginator({ + realData: initialRq.data, + rateLimit: initialRq.rateLimit, + instance: this, + queryParams, + }); + } + /** + * Returns an array of numeric user ids of friends of the specified user. + * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids + */ + async userFollowingIds(options = {}) { + const queryParams = { + stringify_ids: true, + ...options, + }; + const initialRq = await this.get('friends/ids.json', queryParams, { fullResponse: true }); + return new friends_paginator_v1_1.UserFollowersIdsV1Paginator({ + realData: initialRq.data, + rateLimit: initialRq.rateLimit, + instance: this, + queryParams, + }); + } /** * Provides a simple, relevance-based search interface to public user accounts on Twitter. * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-search @@ -7533,6 +7773,20 @@ class TwitterApiv1ReadWrite extends client_v1_read_1.default { updateFriendship(options) { return this.post('friendships/update.json', options); } + /** + * Follow the specified user. + * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create + */ + createFriendship(options) { + return this.post('friendships/create.json', options); + } + /** + * Unfollow the specified user. + * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy + */ + destroyFriendship(options) { + return this.post('friendships/destroy.json', options); + } /* Account API */ /** * Update current account settings for authenticating user. diff --git a/dist/index.js.map b/dist/index.js.map index 0831794..5b7df8e 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/GA;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChBA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACRA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxBA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACXA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrBA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;;;;;;;;;ACJA;AACA;;;;;;;;;ACDA;AACA;AACA;;;;;;;;;ACFA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACriBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7BA;AACA;;;;AEDA;AACA;AACA;AACA","sources":["../webpack://tweet/./lib/main.js","../webpack://tweet/./lib/tweet.js","../webpack://tweet/./lib/upload-media.js","../webpack://tweet/./node_modules/@actions/core/lib/command.js","../webpack://tweet/./node_modules/@actions/core/lib/core.js","../webpack://tweet/./node_modules/@actions/core/lib/file-command.js","../webpack://tweet/./node_modules/@actions/core/lib/oidc-utils.js","../webpack://tweet/./node_modules/@actions/core/lib/path-utils.js","../webpack://tweet/./node_modules/@actions/core/lib/summary.js","../webpack://tweet/./node_modules/@actions/core/lib/utils.js","../webpack://tweet/./node_modules/@actions/http-client/lib/auth.js","../webpack://tweet/./node_modules/@actions/http-client/lib/index.js","../webpack://tweet/./node_modules/@actions/http-client/lib/proxy.js","../webpack://tweet/./node_modules/dotenv/config.js","../webpack://tweet/./node_modules/dotenv/lib/cli-options.js","../webpack://tweet/./node_modules/dotenv/lib/env-options.js","../webpack://tweet/./node_modules/dotenv/lib/main.js","../webpack://tweet/./node_modules/tunnel/index.js","../webpack://tweet/./node_modules/tunnel/lib/tunnel.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/form-data.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/oauth1.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/oauth2.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/request-handler.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/request-maker.mixin.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/request-param.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client.base.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client.subclient.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client/readonly.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client/readwrite.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/globals.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/helpers.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/TwitterPaginator.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/dm.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/list.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/list.paginator.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/mutes.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/tweet.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/tweet.paginator.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/user.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/user.paginator.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/v2.paginator.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/plugins/helpers.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/settings.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/stream/TweetStream.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/stream/TweetStreamEventCombiner.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/stream/TweetStreamParser.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/auth.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/client.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/errors.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/plugins/client.plugins.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/plugins/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/responses.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/dev-utilities.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/dm.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/entities.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/geo.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/list.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/streaming.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/trends.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/tweet.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/user.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/list.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/spaces.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/streaming.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/tweet.definition.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/tweet.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/user.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/client.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/client.v1.read.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/client.v1.write.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/media-helpers.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2-labs/client.v2.labs.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2-labs/client.v2.labs.read.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2-labs/client.v2.labs.write.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/client.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/client.v2.read.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/client.v2.write.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/includes.v2.helper.js","../webpack://tweet/./node_modules/uuid/dist/index.js","../webpack://tweet/./node_modules/uuid/dist/md5.js","../webpack://tweet/./node_modules/uuid/dist/nil.js","../webpack://tweet/./node_modules/uuid/dist/parse.js","../webpack://tweet/./node_modules/uuid/dist/regex.js","../webpack://tweet/./node_modules/uuid/dist/rng.js","../webpack://tweet/./node_modules/uuid/dist/sha1.js","../webpack://tweet/./node_modules/uuid/dist/stringify.js","../webpack://tweet/./node_modules/uuid/dist/v1.js","../webpack://tweet/./node_modules/uuid/dist/v3.js","../webpack://tweet/./node_modules/uuid/dist/v35.js","../webpack://tweet/./node_modules/uuid/dist/v4.js","../webpack://tweet/./node_modules/uuid/dist/v5.js","../webpack://tweet/./node_modules/uuid/dist/validate.js","../webpack://tweet/./node_modules/uuid/dist/version.js","../webpack://tweet/external node-commonjs \"assert\"","../webpack://tweet/external node-commonjs \"crypto\"","../webpack://tweet/external node-commonjs \"events\"","../webpack://tweet/external node-commonjs \"fs\"","../webpack://tweet/external node-commonjs \"http\"","../webpack://tweet/external node-commonjs \"https\"","../webpack://tweet/external node-commonjs \"net\"","../webpack://tweet/external node-commonjs \"os\"","../webpack://tweet/external node-commonjs \"path\"","../webpack://tweet/external node-commonjs \"tls\"","../webpack://tweet/external node-commonjs \"util\"","../webpack://tweet/external node-commonjs \"zlib\"","../webpack://tweet/webpack/bootstrap","../webpack://tweet/webpack/runtime/compat","../webpack://tweet/webpack/before-startup","../webpack://tweet/webpack/startup","../webpack://tweet/webpack/after-startup"],"sourcesContent":["\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"dotenv/config\");\nconst core = __importStar(require(\"@actions/core\"));\nconst path = __importStar(require(\"path\"));\nconst tweet_1 = require(\"./tweet\");\nconst upload_media_1 = require(\"./upload-media\");\nfunction run() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const mediaPaths = core.getInput('media_paths');\n const mediaIds = yield (0, upload_media_1.uploadMedia)(mediaPaths\n .split('\\n')\n .filter(x => x !== '')\n .map(mediaPath => path.join(process.cwd(), mediaPath)));\n core.debug(`Media IDs: ${mediaIds.join(', ')}`);\n const inReplyToStatusId = core.getInput('in_reply_to_status_id');\n const response = yield (0, tweet_1.tweet)(core.getInput('status'), mediaIds, inReplyToStatusId);\n core.setOutput('response', JSON.stringify(response));\n }\n catch (error) {\n if (error instanceof Error)\n core.setFailed(error.message);\n }\n });\n}\nrun();\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tweet = void 0;\nconst twitter_api_v2_1 = __importDefault(require(\"twitter-api-v2\"));\nfunction tweet(status, mediaIds = [], inReplyToStatusId = '') {\n return __awaiter(this, void 0, void 0, function* () {\n const appKey = process.env.CONSUMER_API_KEY;\n const appSecret = process.env.CONSUMER_API_SECRET_KEY;\n const accessToken = process.env.ACCESS_TOKEN;\n const accessSecret = process.env.ACCESS_TOKEN_SECRET;\n const client = new twitter_api_v2_1.default({\n appKey,\n appSecret,\n accessToken,\n accessSecret\n }).v1;\n const parameters = {};\n if (mediaIds.length > 0) {\n parameters['media_ids'] = mediaIds.join(',');\n }\n if (inReplyToStatusId !== '') {\n parameters['in_reply_to_status_id'] = inReplyToStatusId;\n }\n return yield client.tweet(status, parameters);\n });\n}\nexports.tweet = tweet;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uploadMedia = void 0;\nconst twitter_api_v2_1 = __importDefault(require(\"twitter-api-v2\"));\nconst fs = __importStar(require(\"fs\"));\nconst core = __importStar(require(\"@actions/core\"));\nfunction uploadMedia(mediaPaths) {\n return __awaiter(this, void 0, void 0, function* () {\n core.debug(JSON.stringify(mediaPaths));\n for (const path of mediaPaths) {\n if (!fs.existsSync(path)) {\n throw new Error(`${path} not exists`);\n }\n }\n const appKey = process.env.CONSUMER_API_KEY;\n const appSecret = process.env.CONSUMER_API_SECRET_KEY;\n const accessToken = process.env.ACCESS_TOKEN;\n const accessSecret = process.env.ACCESS_TOKEN_SECRET;\n const client = new twitter_api_v2_1.default({\n appKey,\n appSecret,\n accessToken,\n accessSecret\n }).v1;\n const mediaIdsPromise = mediaPaths.map((path) => __awaiter(this, void 0, void 0, function* () {\n return yield client.uploadMedia(path);\n }));\n return yield Promise.all(mediaIdsPromise);\n });\n}\nexports.uploadMedia = uploadMedia;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issue = exports.issueCommand = void 0;\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\nconst uuid_1 = require(\"uuid\");\nconst oidc_utils_1 = require(\"./oidc-utils\");\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n const delimiter = `ghadelimiter_${uuid_1.v4()}`;\n // These should realistically never happen, but just in case someone finds a way to exploit uuid generation let's not allow keys or values that contain the delimiter.\n if (name.includes(delimiter)) {\n throw new Error(`Unexpected input: name should not contain the delimiter \"${delimiter}\"`);\n }\n if (convertedVal.includes(delimiter)) {\n throw new Error(`Unexpected input: value should not contain the delimiter \"${delimiter}\"`);\n }\n const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;\n file_command_1.issueCommand('ENV', commandValue);\n }\n else {\n command_1.issueCommand('set-env', { name }, convertedVal);\n }\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input.\n * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.\n * Returns an empty string if the value is not defined.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n if (options && options.trimWhitespace === false) {\n return val;\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Gets the values of an multiline input. Each value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string[]\n *\n */\nfunction getMultilineInput(name, options) {\n const inputs = getInput(name, options)\n .split('\\n')\n .filter(x => x !== '');\n return inputs;\n}\nexports.getMultilineInput = getMultilineInput;\n/**\n * Gets the input value of the boolean type in the YAML 1.2 \"core schema\" specification.\n * Support boolean input list: `true | True | TRUE | false | False | FALSE` .\n * The return value is also in boolean type.\n * ref: https://yaml.org/spec/1.2/spec.html#id2804923\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns boolean\n */\nfunction getBooleanInput(name, options) {\n const trueValue = ['true', 'True', 'TRUE'];\n const falseValue = ['false', 'False', 'FALSE'];\n const val = getInput(name, options);\n if (trueValue.includes(val))\n return true;\n if (falseValue.includes(val))\n return false;\n throw new TypeError(`Input does not meet YAML 1.2 \"Core Schema\" specification: ${name}\\n` +\n `Support boolean input list: \\`true | True | TRUE | false | False | FALSE\\``);\n}\nexports.getBooleanInput = getBooleanInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n process.stdout.write(os.EOL);\n command_1.issueCommand('set-output', { name }, value);\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction error(message, properties = {}) {\n command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds a warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction warning(message, properties = {}) {\n command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Adds a notice issue\n * @param message notice issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction notice(message, properties = {}) {\n command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.notice = notice;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n command_1.issueCommand('save-state', { name }, value);\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\nfunction getIDToken(aud) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield oidc_utils_1.OidcClient.getIDToken(aud);\n });\n}\nexports.getIDToken = getIDToken;\n/**\n * Summary exports\n */\nvar summary_1 = require(\"./summary\");\nObject.defineProperty(exports, \"summary\", { enumerable: true, get: function () { return summary_1.summary; } });\n/**\n * @deprecated use core.summary\n */\nvar summary_2 = require(\"./summary\");\nObject.defineProperty(exports, \"markdownSummary\", { enumerable: true, get: function () { return summary_2.markdownSummary; } });\n/**\n * Path exports\n */\nvar path_utils_1 = require(\"./path-utils\");\nObject.defineProperty(exports, \"toPosixPath\", { enumerable: true, get: function () { return path_utils_1.toPosixPath; } });\nObject.defineProperty(exports, \"toWin32Path\", { enumerable: true, get: function () { return path_utils_1.toWin32Path; } });\nObject.defineProperty(exports, \"toPlatformPath\", { enumerable: true, get: function () { return path_utils_1.toPlatformPath; } });\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issueCommand = void 0;\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\nfunction issueCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueCommand = issueCommand;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OidcClient = void 0;\nconst http_client_1 = require(\"@actions/http-client\");\nconst auth_1 = require(\"@actions/http-client/lib/auth\");\nconst core_1 = require(\"./core\");\nclass OidcClient {\n static createHttpClient(allowRetry = true, maxRetry = 10) {\n const requestOptions = {\n allowRetries: allowRetry,\n maxRetries: maxRetry\n };\n return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);\n }\n static getRequestToken() {\n const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];\n if (!token) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');\n }\n return token;\n }\n static getIDTokenUrl() {\n const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];\n if (!runtimeUrl) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');\n }\n return runtimeUrl;\n }\n static getCall(id_token_url) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const httpclient = OidcClient.createHttpClient();\n const res = yield httpclient\n .getJson(id_token_url)\n .catch(error => {\n throw new Error(`Failed to get ID Token. \\n \n Error Code : ${error.statusCode}\\n \n Error Message: ${error.result.message}`);\n });\n const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;\n if (!id_token) {\n throw new Error('Response json body do not have ID Token field');\n }\n return id_token;\n });\n }\n static getIDToken(audience) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n // New ID Token is requested from action service\n let id_token_url = OidcClient.getIDTokenUrl();\n if (audience) {\n const encodedAudience = encodeURIComponent(audience);\n id_token_url = `${id_token_url}&audience=${encodedAudience}`;\n }\n core_1.debug(`ID token url is ${id_token_url}`);\n const id_token = yield OidcClient.getCall(id_token_url);\n core_1.setSecret(id_token);\n return id_token;\n }\n catch (error) {\n throw new Error(`Error message: ${error.message}`);\n }\n });\n }\n}\nexports.OidcClient = OidcClient;\n//# sourceMappingURL=oidc-utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;\nconst path = __importStar(require(\"path\"));\n/**\n * toPosixPath converts the given path to the posix form. On Windows, \\\\ will be\n * replaced with /.\n *\n * @param pth. Path to transform.\n * @return string Posix path.\n */\nfunction toPosixPath(pth) {\n return pth.replace(/[\\\\]/g, '/');\n}\nexports.toPosixPath = toPosixPath;\n/**\n * toWin32Path converts the given path to the win32 form. On Linux, / will be\n * replaced with \\\\.\n *\n * @param pth. Path to transform.\n * @return string Win32 path.\n */\nfunction toWin32Path(pth) {\n return pth.replace(/[/]/g, '\\\\');\n}\nexports.toWin32Path = toWin32Path;\n/**\n * toPlatformPath converts the given path to a platform-specific path. It does\n * this by replacing instances of / and \\ with the platform-specific path\n * separator.\n *\n * @param pth The path to platformize.\n * @return string The platform-specific path.\n */\nfunction toPlatformPath(pth) {\n return pth.replace(/[/\\\\]/g, path.sep);\n}\nexports.toPlatformPath = toPlatformPath;\n//# sourceMappingURL=path-utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;\nconst os_1 = require(\"os\");\nconst fs_1 = require(\"fs\");\nconst { access, appendFile, writeFile } = fs_1.promises;\nexports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';\nexports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';\nclass Summary {\n constructor() {\n this._buffer = '';\n }\n /**\n * Finds the summary file path from the environment, rejects if env var is not found or file does not exist\n * Also checks r/w permissions.\n *\n * @returns step summary file path\n */\n filePath() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._filePath) {\n return this._filePath;\n }\n const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];\n if (!pathFromEnv) {\n throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);\n }\n try {\n yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);\n }\n catch (_a) {\n throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);\n }\n this._filePath = pathFromEnv;\n return this._filePath;\n });\n }\n /**\n * Wraps content in an HTML tag, adding any HTML attributes\n *\n * @param {string} tag HTML tag to wrap\n * @param {string | null} content content within the tag\n * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add\n *\n * @returns {string} content wrapped in HTML element\n */\n wrap(tag, content, attrs = {}) {\n const htmlAttrs = Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${value}\"`)\n .join('');\n if (!content) {\n return `<${tag}${htmlAttrs}>`;\n }\n return `<${tag}${htmlAttrs}>${content}`;\n }\n /**\n * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.\n *\n * @param {SummaryWriteOptions} [options] (optional) options for write operation\n *\n * @returns {Promise} summary instance\n */\n write(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);\n const filePath = yield this.filePath();\n const writeFunc = overwrite ? writeFile : appendFile;\n yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });\n return this.emptyBuffer();\n });\n }\n /**\n * Clears the summary buffer and wipes the summary file\n *\n * @returns {Summary} summary instance\n */\n clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.emptyBuffer().write({ overwrite: true });\n });\n }\n /**\n * Returns the current summary buffer as a string\n *\n * @returns {string} string of summary buffer\n */\n stringify() {\n return this._buffer;\n }\n /**\n * If the summary buffer is empty\n *\n * @returns {boolen} true if the buffer is empty\n */\n isEmptyBuffer() {\n return this._buffer.length === 0;\n }\n /**\n * Resets the summary buffer without writing to summary file\n *\n * @returns {Summary} summary instance\n */\n emptyBuffer() {\n this._buffer = '';\n return this;\n }\n /**\n * Adds raw text to the summary buffer\n *\n * @param {string} text content to add\n * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)\n *\n * @returns {Summary} summary instance\n */\n addRaw(text, addEOL = false) {\n this._buffer += text;\n return addEOL ? this.addEOL() : this;\n }\n /**\n * Adds the operating system-specific end-of-line marker to the buffer\n *\n * @returns {Summary} summary instance\n */\n addEOL() {\n return this.addRaw(os_1.EOL);\n }\n /**\n * Adds an HTML codeblock to the summary buffer\n *\n * @param {string} code content to render within fenced code block\n * @param {string} lang (optional) language to syntax highlight code\n *\n * @returns {Summary} summary instance\n */\n addCodeBlock(code, lang) {\n const attrs = Object.assign({}, (lang && { lang }));\n const element = this.wrap('pre', this.wrap('code', code), attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML list to the summary buffer\n *\n * @param {string[]} items list of items to render\n * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)\n *\n * @returns {Summary} summary instance\n */\n addList(items, ordered = false) {\n const tag = ordered ? 'ol' : 'ul';\n const listItems = items.map(item => this.wrap('li', item)).join('');\n const element = this.wrap(tag, listItems);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML table to the summary buffer\n *\n * @param {SummaryTableCell[]} rows table rows\n *\n * @returns {Summary} summary instance\n */\n addTable(rows) {\n const tableBody = rows\n .map(row => {\n const cells = row\n .map(cell => {\n if (typeof cell === 'string') {\n return this.wrap('td', cell);\n }\n const { header, data, colspan, rowspan } = cell;\n const tag = header ? 'th' : 'td';\n const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));\n return this.wrap(tag, data, attrs);\n })\n .join('');\n return this.wrap('tr', cells);\n })\n .join('');\n const element = this.wrap('table', tableBody);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds a collapsable HTML details element to the summary buffer\n *\n * @param {string} label text for the closed state\n * @param {string} content collapsable content\n *\n * @returns {Summary} summary instance\n */\n addDetails(label, content) {\n const element = this.wrap('details', this.wrap('summary', label) + content);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML image tag to the summary buffer\n *\n * @param {string} src path to the image you to embed\n * @param {string} alt text description of the image\n * @param {SummaryImageOptions} options (optional) addition image attributes\n *\n * @returns {Summary} summary instance\n */\n addImage(src, alt, options) {\n const { width, height } = options || {};\n const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));\n const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML section heading element\n *\n * @param {string} text heading text\n * @param {number | string} [level=1] (optional) the heading level, default: 1\n *\n * @returns {Summary} summary instance\n */\n addHeading(text, level) {\n const tag = `h${level}`;\n const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)\n ? tag\n : 'h1';\n const element = this.wrap(allowedTag, text);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML thematic break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addSeparator() {\n const element = this.wrap('hr', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML line break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addBreak() {\n const element = this.wrap('br', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML blockquote to the summary buffer\n *\n * @param {string} text quote text\n * @param {string} cite (optional) citation url\n *\n * @returns {Summary} summary instance\n */\n addQuote(text, cite) {\n const attrs = Object.assign({}, (cite && { cite }));\n const element = this.wrap('blockquote', text, attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML anchor tag to the summary buffer\n *\n * @param {string} text link text/content\n * @param {string} href hyperlink\n *\n * @returns {Summary} summary instance\n */\n addLink(text, href) {\n const element = this.wrap('a', text, { href });\n return this.addRaw(element).addEOL();\n }\n}\nconst _summary = new Summary();\n/**\n * @deprecated use `core.summary`\n */\nexports.markdownSummary = _summary;\nexports.summary = _summary;\n//# sourceMappingURL=summary.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCommandProperties = exports.toCommandValue = void 0;\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n/**\n *\n * @param annotationProperties\n * @returns The command properties to send with the actual annotation command\n * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646\n */\nfunction toCommandProperties(annotationProperties) {\n if (!Object.keys(annotationProperties).length) {\n return {};\n }\n return {\n title: annotationProperties.title,\n file: annotationProperties.file,\n line: annotationProperties.startLine,\n endLine: annotationProperties.endLine,\n col: annotationProperties.startColumn,\n endColumn: annotationProperties.endColumn\n };\n}\nexports.toCommandProperties = toCommandProperties;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;\nclass BasicCredentialHandler {\n constructor(username, password) {\n this.username = username;\n this.password = password;\n }\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BasicCredentialHandler = BasicCredentialHandler;\nclass BearerCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Bearer ${this.token}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BearerCredentialHandler = BearerCredentialHandler;\nclass PersonalAccessTokenCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;\n//# sourceMappingURL=auth.js.map","\"use strict\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;\nconst http = __importStar(require(\"http\"));\nconst https = __importStar(require(\"https\"));\nconst pm = __importStar(require(\"./proxy\"));\nconst tunnel = __importStar(require(\"tunnel\"));\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n const proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n }));\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n const parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n });\n }\n get(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n });\n }\n del(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n });\n }\n post(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n });\n }\n patch(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n });\n }\n put(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n });\n }\n head(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n });\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n });\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n getJson(requestUrl, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n const res = yield this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n postJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n putJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n patchJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n request(verb, requestUrl, data, headers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n const parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n do {\n response = yield this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (const handler of this.handlers) {\n if (handler.canHandleAuthentication(response)) {\n authenticationHandler = handler;\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (response.message.statusCode &&\n HttpRedirectCodes.includes(response.message.statusCode) &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n const parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol === 'https:' &&\n parsedUrl.protocol !== parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n yield response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (const header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = yield this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (!response.message.statusCode ||\n !HttpResponseRetryCodes.includes(response.message.statusCode)) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n yield response.readBody();\n yield this._performExponentialBackoff(numTries);\n }\n } while (numTries < maxTries);\n return response;\n });\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n function callbackForResult(err, res) {\n if (err) {\n reject(err);\n }\n else if (!res) {\n // If `err` is not passed, then `res` must be passed.\n reject(new Error('Unknown error'));\n }\n else {\n resolve(res);\n }\n }\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n if (typeof data === 'string') {\n if (!info.options.headers) {\n info.options.headers = {};\n }\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n function handleResult(err, res) {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n }\n const req = info.httpModule.request(info.options, (msg) => {\n const res = new HttpClientResponse(msg);\n handleResult(undefined, res);\n });\n let socket;\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error(`Request timeout: ${info.options.path}`));\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n const parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n for (const handler of this.handlers) {\n handler.prepareRequest(info.options);\n }\n }\n return info;\n }\n _mergeHeaders(headers) {\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n const proxyUrl = pm.getProxyUrl(parsedUrl);\n const useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.\n if (proxyUrl && proxyUrl.hostname) {\n const agentOptions = {\n maxSockets,\n keepAlive: this._keepAlive,\n proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`\n })), { host: proxyUrl.hostname, port: proxyUrl.port })\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n return __awaiter(this, void 0, void 0, function* () {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n });\n }\n _processResponse(res, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const statusCode = res.message.statusCode || 0;\n const response = {\n statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode === HttpCodes.NotFound) {\n resolve(response);\n }\n // get the result from the body\n function dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n const a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n let obj;\n let contents;\n try {\n contents = yield res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = `Failed request: (${statusCode})`;\n }\n const err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n }));\n });\n }\n}\nexports.HttpClient = HttpClient;\nconst lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkBypass = exports.getProxyUrl = void 0;\nfunction getProxyUrl(reqUrl) {\n const usingSsl = reqUrl.protocol === 'https:';\n if (checkBypass(reqUrl)) {\n return undefined;\n }\n const proxyVar = (() => {\n if (usingSsl) {\n return process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n return process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n })();\n if (proxyVar) {\n return new URL(proxyVar);\n }\n else {\n return undefined;\n }\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n const upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (const upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperReqHosts.some(x => x === upperNoProxyItem)) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\n//# sourceMappingURL=proxy.js.map","(function () {\n require('./lib/main').config(\n Object.assign(\n {},\n require('./lib/env-options'),\n require('./lib/cli-options')(process.argv)\n )\n )\n})()\n","const re = /^dotenv_config_(encoding|path|debug|override)=(.+)$/\n\nmodule.exports = function optionMatcher (args) {\n return args.reduce(function (acc, cur) {\n const matches = cur.match(re)\n if (matches) {\n acc[matches[1]] = matches[2]\n }\n return acc\n }, {})\n}\n","// ../config.js accepts options via environment variables\nconst options = {}\n\nif (process.env.DOTENV_CONFIG_ENCODING != null) {\n options.encoding = process.env.DOTENV_CONFIG_ENCODING\n}\n\nif (process.env.DOTENV_CONFIG_PATH != null) {\n options.path = process.env.DOTENV_CONFIG_PATH\n}\n\nif (process.env.DOTENV_CONFIG_DEBUG != null) {\n options.debug = process.env.DOTENV_CONFIG_DEBUG\n}\n\nif (process.env.DOTENV_CONFIG_OVERRIDE != null) {\n options.override = process.env.DOTENV_CONFIG_OVERRIDE\n}\n\nmodule.exports = options\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parser src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n let dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (options) {\n if (options.path != null) {\n dotenvPath = _resolveHome(options.path)\n }\n if (options.encoding != null) {\n encoding = options.encoding\n }\n }\n\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(dotenvPath, { encoding }))\n\n Object.keys(parsed).forEach(function (key) {\n if (!Object.prototype.hasOwnProperty.call(process.env, key)) {\n process.env[key] = parsed[key]\n } else {\n if (override === true) {\n process.env[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _log(`\"${key}\" is already defined in \\`process.env\\` and WAS overwritten`)\n } else {\n _log(`\"${key}\" is already defined in \\`process.env\\` and was NOT overwritten`)\n }\n }\n }\n })\n\n return { parsed }\n } catch (e) {\n if (debug) {\n _log(`Failed to load ${dotenvPath} ${e.message}`)\n }\n\n return { error: e }\n }\n}\n\nconst DotenvModule = {\n config,\n parse\n}\n\nmodule.exports.config = DotenvModule.config\nmodule.exports.parse = DotenvModule.parse\nmodule.exports = DotenvModule\n","module.exports = require('./lib/tunnel');\n","'use strict';\n\nvar net = require('net');\nvar tls = require('tls');\nvar http = require('http');\nvar https = require('https');\nvar events = require('events');\nvar assert = require('assert');\nvar util = require('util');\n\n\nexports.httpOverHttp = httpOverHttp;\nexports.httpsOverHttp = httpsOverHttp;\nexports.httpOverHttps = httpOverHttps;\nexports.httpsOverHttps = httpsOverHttps;\n\n\nfunction httpOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n return agent;\n}\n\nfunction httpsOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\nfunction httpOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n return agent;\n}\n\nfunction httpsOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\n\nfunction TunnelingAgent(options) {\n var self = this;\n self.options = options || {};\n self.proxyOptions = self.options.proxy || {};\n self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;\n self.requests = [];\n self.sockets = [];\n\n self.on('free', function onFree(socket, host, port, localAddress) {\n var options = toOptions(host, port, localAddress);\n for (var i = 0, len = self.requests.length; i < len; ++i) {\n var pending = self.requests[i];\n if (pending.host === options.host && pending.port === options.port) {\n // Detect the request to connect same origin server,\n // reuse the connection.\n self.requests.splice(i, 1);\n pending.request.onSocket(socket);\n return;\n }\n }\n socket.destroy();\n self.removeSocket(socket);\n });\n}\nutil.inherits(TunnelingAgent, events.EventEmitter);\n\nTunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {\n var self = this;\n var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));\n\n if (self.sockets.length >= this.maxSockets) {\n // We are over limit so we'll add it to the queue.\n self.requests.push(options);\n return;\n }\n\n // If we are under maxSockets create a new one.\n self.createSocket(options, function(socket) {\n socket.on('free', onFree);\n socket.on('close', onCloseOrRemove);\n socket.on('agentRemove', onCloseOrRemove);\n req.onSocket(socket);\n\n function onFree() {\n self.emit('free', socket, options);\n }\n\n function onCloseOrRemove(err) {\n self.removeSocket(socket);\n socket.removeListener('free', onFree);\n socket.removeListener('close', onCloseOrRemove);\n socket.removeListener('agentRemove', onCloseOrRemove);\n }\n });\n};\n\nTunnelingAgent.prototype.createSocket = function createSocket(options, cb) {\n var self = this;\n var placeholder = {};\n self.sockets.push(placeholder);\n\n var connectOptions = mergeOptions({}, self.proxyOptions, {\n method: 'CONNECT',\n path: options.host + ':' + options.port,\n agent: false,\n headers: {\n host: options.host + ':' + options.port\n }\n });\n if (options.localAddress) {\n connectOptions.localAddress = options.localAddress;\n }\n if (connectOptions.proxyAuth) {\n connectOptions.headers = connectOptions.headers || {};\n connectOptions.headers['Proxy-Authorization'] = 'Basic ' +\n new Buffer(connectOptions.proxyAuth).toString('base64');\n }\n\n debug('making CONNECT request');\n var connectReq = self.request(connectOptions);\n connectReq.useChunkedEncodingByDefault = false; // for v0.6\n connectReq.once('response', onResponse); // for v0.6\n connectReq.once('upgrade', onUpgrade); // for v0.6\n connectReq.once('connect', onConnect); // for v0.7 or later\n connectReq.once('error', onError);\n connectReq.end();\n\n function onResponse(res) {\n // Very hacky. This is necessary to avoid http-parser leaks.\n res.upgrade = true;\n }\n\n function onUpgrade(res, socket, head) {\n // Hacky.\n process.nextTick(function() {\n onConnect(res, socket, head);\n });\n }\n\n function onConnect(res, socket, head) {\n connectReq.removeAllListeners();\n socket.removeAllListeners();\n\n if (res.statusCode !== 200) {\n debug('tunneling socket could not be established, statusCode=%d',\n res.statusCode);\n socket.destroy();\n var error = new Error('tunneling socket could not be established, ' +\n 'statusCode=' + res.statusCode);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n if (head.length > 0) {\n debug('got illegal response body from proxy');\n socket.destroy();\n var error = new Error('got illegal response body from proxy');\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n debug('tunneling connection has established');\n self.sockets[self.sockets.indexOf(placeholder)] = socket;\n return cb(socket);\n }\n\n function onError(cause) {\n connectReq.removeAllListeners();\n\n debug('tunneling socket could not be established, cause=%s\\n',\n cause.message, cause.stack);\n var error = new Error('tunneling socket could not be established, ' +\n 'cause=' + cause.message);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n }\n};\n\nTunnelingAgent.prototype.removeSocket = function removeSocket(socket) {\n var pos = this.sockets.indexOf(socket)\n if (pos === -1) {\n return;\n }\n this.sockets.splice(pos, 1);\n\n var pending = this.requests.shift();\n if (pending) {\n // If we have pending requests and a socket gets closed a new one\n // needs to be created to take over in the pool for the one that closed.\n this.createSocket(pending, function(socket) {\n pending.request.onSocket(socket);\n });\n }\n};\n\nfunction createSecureSocket(options, cb) {\n var self = this;\n TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {\n var hostHeader = options.request.getHeader('host');\n var tlsOptions = mergeOptions({}, self.options, {\n socket: socket,\n servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host\n });\n\n // 0 is dummy port for v0.6\n var secureSocket = tls.connect(0, tlsOptions);\n self.sockets[self.sockets.indexOf(socket)] = secureSocket;\n cb(secureSocket);\n });\n}\n\n\nfunction toOptions(host, port, localAddress) {\n if (typeof host === 'string') { // since v0.10\n return {\n host: host,\n port: port,\n localAddress: localAddress\n };\n }\n return host; // for v0.11 or later\n}\n\nfunction mergeOptions(target) {\n for (var i = 1, len = arguments.length; i < len; ++i) {\n var overrides = arguments[i];\n if (typeof overrides === 'object') {\n var keys = Object.keys(overrides);\n for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {\n var k = keys[j];\n if (overrides[k] !== undefined) {\n target[k] = overrides[k];\n }\n }\n }\n }\n return target;\n}\n\n\nvar debug;\nif (process.env.NODE_DEBUG && /\\btunnel\\b/.test(process.env.NODE_DEBUG)) {\n debug = function() {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'string') {\n args[0] = 'TUNNEL: ' + args[0];\n } else {\n args.unshift('TUNNEL:');\n }\n console.error.apply(console, args);\n }\n} else {\n debug = function() {};\n}\nexports.debug = debug; // for test\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FormDataHelper = void 0;\nconst helpers_1 = require(\"../helpers\");\n// This class is partially inspired by https://github.com/form-data/form-data/blob/master/lib/form_data.js\n// All credits to their authors.\nclass FormDataHelper {\n constructor() {\n this._boundary = '';\n this._chunks = [];\n }\n bodyAppend(...values) {\n const allAsBuffer = values.map(val => val instanceof Buffer ? val : Buffer.from(val));\n this._chunks.push(...allAsBuffer);\n }\n append(field, value, contentType) {\n const convertedValue = value instanceof Buffer ? value : value.toString();\n const header = this.getMultipartHeader(field, convertedValue, contentType);\n this.bodyAppend(header, convertedValue, FormDataHelper.LINE_BREAK);\n }\n getHeaders() {\n return {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary(),\n };\n }\n /** Length of form-data (including footer length). */\n getLength() {\n return this._chunks.reduce((acc, cur) => acc + cur.length, this.getMultipartFooter().length);\n }\n getBuffer() {\n const allChunks = [...this._chunks, this.getMultipartFooter()];\n const totalBuffer = Buffer.alloc(this.getLength());\n let i = 0;\n for (const chunk of allChunks) {\n for (let j = 0; j < chunk.length; i++, j++) {\n totalBuffer[i] = chunk[j];\n }\n }\n return totalBuffer;\n }\n getBoundary() {\n if (!this._boundary) {\n this.generateBoundary();\n }\n return this._boundary;\n }\n generateBoundary() {\n // This generates a 50 character boundary similar to those used by Firefox.\n let boundary = '--------------------------';\n for (let i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n this._boundary = boundary;\n }\n getMultipartHeader(field, value, contentType) {\n // In this lib no need to guess more the content type, octet stream is ok of buffers\n if (!contentType) {\n contentType = value instanceof Buffer ? FormDataHelper.DEFAULT_CONTENT_TYPE : '';\n }\n const headers = {\n 'Content-Disposition': ['form-data', `name=\"${field}\"`],\n 'Content-Type': contentType,\n };\n let contents = '';\n for (const [prop, header] of Object.entries(headers)) {\n // skip nullish headers.\n if (!header.length) {\n continue;\n }\n contents += prop + ': ' + (0, helpers_1.arrayWrap)(header).join('; ') + FormDataHelper.LINE_BREAK;\n }\n return '--' + this.getBoundary() + FormDataHelper.LINE_BREAK + contents + FormDataHelper.LINE_BREAK;\n }\n getMultipartFooter() {\n if (this._footerChunk) {\n return this._footerChunk;\n }\n return this._footerChunk = Buffer.from('--' + this.getBoundary() + '--' + FormDataHelper.LINE_BREAK);\n }\n}\nexports.FormDataHelper = FormDataHelper;\nFormDataHelper.LINE_BREAK = '\\r\\n';\nFormDataHelper.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OAuth1Helper = void 0;\nconst crypto = __importStar(require(\"crypto\"));\nclass OAuth1Helper {\n constructor(options) {\n this.nonceLength = 32;\n this.consumerKeys = options.consumerKeys;\n }\n static percentEncode(str) {\n return encodeURIComponent(str)\n .replace(/!/g, '%21')\n .replace(/\\*/g, '%2A')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29');\n }\n hash(base, key) {\n return crypto\n .createHmac('sha1', key)\n .update(base)\n .digest('base64');\n }\n authorize(request, accessTokens = {}) {\n const oauthInfo = {\n oauth_consumer_key: this.consumerKeys.key,\n oauth_nonce: this.getNonce(),\n oauth_signature_method: 'HMAC-SHA1',\n oauth_timestamp: this.getTimestamp(),\n oauth_version: '1.0',\n };\n if (accessTokens.key !== undefined) {\n oauthInfo.oauth_token = accessTokens.key;\n }\n if (!request.data) {\n request.data = {};\n }\n oauthInfo.oauth_signature = this.getSignature(request, accessTokens.secret, oauthInfo);\n return oauthInfo;\n }\n toHeader(oauthInfo) {\n const sorted = sortObject(oauthInfo);\n let header_value = 'OAuth ';\n for (const element of sorted) {\n if (element.key.indexOf('oauth_') !== 0) {\n continue;\n }\n header_value += OAuth1Helper.percentEncode(element.key) + '=\"' + OAuth1Helper.percentEncode(element.value) + '\",';\n }\n return {\n // Remove the last ,\n Authorization: header_value.slice(0, header_value.length - 1),\n };\n }\n getNonce() {\n const wordCharacters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n let result = '';\n for (let i = 0; i < this.nonceLength; i++) {\n result += wordCharacters[Math.trunc(Math.random() * wordCharacters.length)];\n }\n return result;\n }\n getTimestamp() {\n return Math.trunc(new Date().getTime() / 1000);\n }\n getSignature(request, tokenSecret, oauthInfo) {\n return this.hash(this.getBaseString(request, oauthInfo), this.getSigningKey(tokenSecret));\n }\n getSigningKey(tokenSecret) {\n return OAuth1Helper.percentEncode(this.consumerKeys.secret) + '&' + OAuth1Helper.percentEncode(tokenSecret || '');\n }\n getBaseString(request, oauthInfo) {\n return request.method.toUpperCase() + '&'\n + OAuth1Helper.percentEncode(this.getBaseUrl(request.url)) + '&'\n + OAuth1Helper.percentEncode(this.getParameterString(request, oauthInfo));\n }\n getParameterString(request, oauthInfo) {\n const baseStringData = sortObject(percentEncodeData(mergeObject(oauthInfo, mergeObject(request.data, deParamUrl(request.url)))));\n let dataStr = '';\n for (const { key, value } of baseStringData) {\n // check if the value is an array\n // this means that this key has multiple values\n if (value && Array.isArray(value)) {\n // sort the array first\n value.sort();\n let valString = '';\n // serialize all values for this key: e.g. formkey=formvalue1&formkey=formvalue2\n value.forEach((item, i) => {\n valString += key + '=' + item;\n if (i < value.length) {\n valString += '&';\n }\n });\n dataStr += valString;\n }\n else {\n dataStr += key + '=' + value + '&';\n }\n }\n // Remove the last character\n return dataStr.slice(0, dataStr.length - 1);\n }\n getBaseUrl(url) {\n return url.split('?')[0];\n }\n}\nexports.OAuth1Helper = OAuth1Helper;\nexports.default = OAuth1Helper;\n// Helper functions //\nfunction mergeObject(obj1, obj2) {\n return {\n ...obj1 || {},\n ...obj2 || {},\n };\n}\nfunction sortObject(data) {\n return Object.keys(data)\n .sort()\n .map(key => ({ key, value: data[key] }));\n}\nfunction deParam(string) {\n const splitted = string.split('&');\n const data = {};\n for (const coupleKeyValue of splitted) {\n const [key, value = ''] = coupleKeyValue.split('=');\n // check if the key already exists\n // this can occur if the QS part of the url contains duplicate keys like this: ?formkey=formvalue1&formkey=formvalue2\n if (data[key]) {\n // the key exists already\n if (!Array.isArray(data[key])) {\n // replace the value with an array containing the already present value\n data[key] = [data[key]];\n }\n // and add the new found value to it\n data[key].push(decodeURIComponent(value));\n }\n else {\n // it doesn't exist, just put the found value in the data object\n data[key] = decodeURIComponent(value);\n }\n }\n return data;\n}\nfunction deParamUrl(url) {\n const tmp = url.split('?');\n if (tmp.length === 1)\n return {};\n return deParam(tmp[1]);\n}\nfunction percentEncodeData(data) {\n const result = {};\n for (const key in data) {\n let value = data[key];\n // check if the value is an array\n if (value && Array.isArray(value)) {\n value = value.map(v => OAuth1Helper.percentEncode(v));\n }\n else {\n value = OAuth1Helper.percentEncode(value);\n }\n result[OAuth1Helper.percentEncode(key)] = value;\n }\n return result;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OAuth2Helper = void 0;\nconst crypto = __importStar(require(\"crypto\"));\nclass OAuth2Helper {\n static getCodeVerifier() {\n return this.generateRandomString(128);\n }\n static getCodeChallengeFromVerifier(verifier) {\n return this.escapeBase64Url(crypto\n .createHash('sha256')\n .update(verifier)\n .digest('base64'));\n }\n static getAuthHeader(clientId, clientSecret) {\n const key = encodeURIComponent(clientId) + ':' + encodeURIComponent(clientSecret);\n return Buffer.from(key).toString('base64');\n }\n static generateRandomString(length) {\n let text = '';\n const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n for (let i = 0; i < length; i++) {\n text += possible[Math.floor(Math.random() * possible.length)];\n }\n return text;\n }\n static escapeBase64Url(string) {\n return string.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n }\n}\nexports.OAuth2Helper = OAuth2Helper;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestHandlerHelper = void 0;\nconst https_1 = require(\"https\");\nconst settings_1 = require(\"../settings\");\nconst TweetStream_1 = __importDefault(require(\"../stream/TweetStream\"));\nconst types_1 = require(\"../types\");\nconst zlib = __importStar(require(\"zlib\"));\nclass RequestHandlerHelper {\n constructor(requestData) {\n this.requestData = requestData;\n this.requestErrorHandled = false;\n this.responseData = [];\n }\n /* Request helpers */\n get hrefPathname() {\n const url = this.requestData.url;\n return url.hostname + url.pathname;\n }\n isCompressionDisabled() {\n return !this.requestData.compression || this.requestData.compression === 'identity';\n }\n isFormEncodedEndpoint() {\n return this.requestData.url.href.startsWith('https://api.twitter.com/oauth/');\n }\n /* Error helpers */\n createRequestError(error) {\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log('Request error:', error);\n }\n return new types_1.ApiRequestError('Request failed.', {\n request: this.req,\n error,\n });\n }\n createPartialResponseError(error, abortClose) {\n const res = this.res;\n let message = `Request failed with partial response with HTTP code ${res.statusCode}`;\n if (abortClose) {\n message += ' (connection abruptly closed)';\n }\n else {\n message += ' (parse error)';\n }\n return new types_1.ApiPartialResponseError(message, {\n request: this.req,\n response: this.res,\n responseError: error,\n rawContent: Buffer.concat(this.responseData).toString(),\n });\n }\n formatV1Errors(errors) {\n return errors\n .map(({ code, message }) => `${message} (Twitter code ${code})`)\n .join(', ');\n }\n formatV2Error(error) {\n return `${error.title}: ${error.detail} (see ${error.type})`;\n }\n createResponseError({ res, data, rateLimit, code }) {\n var _a;\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log(`Request failed with code ${code}, data:`, data);\n settings_1.TwitterApiV2Settings.logger.log('Response headers:', res.headers);\n }\n // Errors formatting.\n let errorString = `Request failed with code ${code}`;\n if ((_a = data === null || data === void 0 ? void 0 : data.errors) === null || _a === void 0 ? void 0 : _a.length) {\n const errors = data.errors;\n if ('code' in errors[0]) {\n errorString += ' - ' + this.formatV1Errors(errors);\n }\n else {\n errorString += ' - ' + this.formatV2Error(data);\n }\n }\n return new types_1.ApiResponseError(errorString, {\n code,\n data,\n headers: res.headers,\n request: this.req,\n response: res,\n rateLimit,\n });\n }\n /* Response helpers */\n getResponseDataStream(res) {\n if (this.isCompressionDisabled()) {\n return res;\n }\n const contentEncoding = (res.headers['content-encoding'] || 'identity').trim().toLowerCase();\n if (contentEncoding === 'br') {\n const brotli = zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n });\n res.pipe(brotli);\n return brotli;\n }\n if (contentEncoding === 'gzip') {\n const gunzip = zlib.createGunzip({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n res.pipe(gunzip);\n return gunzip;\n }\n if (contentEncoding === 'deflate') {\n const inflate = zlib.createInflate({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n res.pipe(inflate);\n return inflate;\n }\n return res;\n }\n detectResponseType(res) {\n var _a, _b;\n // Auto parse if server responds with JSON body\n if (((_a = res.headers['content-type']) === null || _a === void 0 ? void 0 : _a.includes('application/json')) || ((_b = res.headers['content-type']) === null || _b === void 0 ? void 0 : _b.includes('application/problem+json'))) {\n return 'json';\n }\n // f-e oauth token endpoints\n else if (this.isFormEncodedEndpoint()) {\n return 'url';\n }\n return 'text';\n }\n getParsedResponse(res) {\n const data = this.responseData;\n const mode = this.requestData.forceParseMode || this.detectResponseType(res);\n if (mode === 'buffer') {\n return Buffer.concat(data);\n }\n else if (mode === 'text') {\n return Buffer.concat(data).toString();\n }\n else if (mode === 'json') {\n const asText = Buffer.concat(data).toString();\n return asText.length ? JSON.parse(asText) : undefined;\n }\n else if (mode === 'url') {\n const asText = Buffer.concat(data).toString();\n const formEntries = {};\n for (const [item, value] of new URLSearchParams(asText)) {\n formEntries[item] = value;\n }\n return formEntries;\n }\n else {\n // mode === 'none'\n return undefined;\n }\n }\n getRateLimitFromResponse(res) {\n let rateLimit = undefined;\n if (res.headers['x-rate-limit-limit']) {\n rateLimit = {\n limit: Number(res.headers['x-rate-limit-limit']),\n remaining: Number(res.headers['x-rate-limit-remaining']),\n reset: Number(res.headers['x-rate-limit-reset']),\n };\n if (this.requestData.rateLimitSaver) {\n this.requestData.rateLimitSaver(rateLimit);\n }\n }\n return rateLimit;\n }\n /* Request event handlers */\n onSocketEventHandler(reject, socket) {\n socket.on('close', this.onSocketCloseHandler.bind(this, reject));\n }\n onSocketCloseHandler(reject) {\n this.req.removeAllListeners('timeout');\n const res = this.res;\n if (res) {\n // Response ok, res.close/res.end can handle request ending\n return;\n }\n if (!this.requestErrorHandled) {\n return reject(this.createRequestError(new Error('Socket closed without any information.')));\n }\n // else: other situation\n }\n requestErrorHandler(reject, requestError) {\n var _a, _b;\n (_b = (_a = this.requestData).requestEventDebugHandler) === null || _b === void 0 ? void 0 : _b.call(_a, 'request-error', { requestError });\n this.requestErrorHandled = true;\n reject(this.createRequestError(requestError));\n }\n timeoutErrorHandler() {\n this.requestErrorHandled = true;\n this.req.destroy(new Error('Request timeout.'));\n }\n /* Response event handlers */\n classicResponseHandler(resolve, reject, res) {\n this.res = res;\n const dataStream = this.getResponseDataStream(res);\n // Register the response data\n dataStream.on('data', chunk => this.responseData.push(chunk));\n dataStream.on('end', this.onResponseEndHandler.bind(this, resolve, reject));\n dataStream.on('close', this.onResponseCloseHandler.bind(this, resolve, reject));\n // Debug handlers\n if (this.requestData.requestEventDebugHandler) {\n this.requestData.requestEventDebugHandler('response', { res });\n res.on('aborted', error => this.requestData.requestEventDebugHandler('response-aborted', { error }));\n res.on('error', error => this.requestData.requestEventDebugHandler('response-error', { error }));\n res.on('close', () => this.requestData.requestEventDebugHandler('response-close', { data: this.responseData }));\n res.on('end', () => this.requestData.requestEventDebugHandler('response-end'));\n }\n }\n onResponseEndHandler(resolve, reject) {\n const rateLimit = this.getRateLimitFromResponse(this.res);\n let data;\n try {\n data = this.getParsedResponse(this.res);\n }\n catch (e) {\n reject(this.createPartialResponseError(e, false));\n return;\n }\n // Handle bad error codes\n const code = this.res.statusCode;\n if (code >= 400) {\n reject(this.createResponseError({ data, res: this.res, rateLimit, code }));\n return;\n }\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log(`[${this.requestData.options.method} ${this.hrefPathname}]: Request succeeds with code ${this.res.statusCode}`);\n settings_1.TwitterApiV2Settings.logger.log('Response body:', data);\n }\n resolve({\n data,\n headers: this.res.headers,\n rateLimit,\n });\n }\n onResponseCloseHandler(resolve, reject) {\n const res = this.res;\n if (res.aborted) {\n // Try to parse the request (?)\n try {\n this.getParsedResponse(this.res);\n // Ok, try to resolve normally the request\n return this.onResponseEndHandler(resolve, reject);\n }\n catch (e) {\n // Parse error, just drop with content\n return reject(this.createPartialResponseError(e, true));\n }\n }\n if (!res.complete) {\n return reject(this.createPartialResponseError(new Error('Response has been interrupted before response could be parsed.'), true));\n }\n // else: end has been called\n }\n streamResponseHandler(resolve, reject, res) {\n const code = res.statusCode;\n if (code < 400) {\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log(`[${this.requestData.options.method} ${this.hrefPathname}]: Request succeeds with code ${res.statusCode} (starting stream)`);\n }\n const dataStream = this.getResponseDataStream(res);\n // HTTP code ok, consume stream\n resolve({ req: this.req, res: dataStream, originalResponse: res, requestData: this.requestData });\n }\n else {\n // Handle response normally, can only rejects\n this.classicResponseHandler(() => undefined, reject, res);\n }\n }\n /* Wrappers for request lifecycle */\n debugRequest() {\n const url = this.requestData.url;\n settings_1.TwitterApiV2Settings.logger.log(`[${this.requestData.options.method} ${this.hrefPathname}]`, this.requestData.options);\n if (url.search) {\n settings_1.TwitterApiV2Settings.logger.log('Request parameters:', [...url.searchParams.entries()].map(([key, value]) => `${key}: ${value}`));\n }\n if (this.requestData.body) {\n settings_1.TwitterApiV2Settings.logger.log('Request body:', this.requestData.body);\n }\n }\n buildRequest() {\n var _a;\n const url = this.requestData.url;\n const auth = url.username ? `${url.username}:${url.password}` : undefined;\n const headers = (_a = this.requestData.options.headers) !== null && _a !== void 0 ? _a : {};\n if (this.requestData.compression === true || this.requestData.compression === 'brotli') {\n headers['accept-encoding'] = 'br;q=1.0, gzip;q=0.8, deflate;q=0.5, *;q=0.1';\n }\n else if (this.requestData.compression === 'gzip') {\n headers['accept-encoding'] = 'gzip;q=1, deflate;q=0.5, *;q=0.1';\n }\n else if (this.requestData.compression === 'deflate') {\n headers['accept-encoding'] = 'deflate;q=1, *;q=0.1';\n }\n if (settings_1.TwitterApiV2Settings.debug) {\n this.debugRequest();\n }\n this.req = (0, https_1.request)({\n ...this.requestData.options,\n // Define URL params manually, addresses dependencies error https://github.com/PLhery/node-twitter-api-v2/issues/94\n host: url.hostname,\n port: url.port || undefined,\n path: url.pathname + url.search,\n protocol: url.protocol,\n auth,\n headers,\n });\n }\n registerRequestEventDebugHandlers(req) {\n req.on('close', () => this.requestData.requestEventDebugHandler('close'));\n req.on('abort', () => this.requestData.requestEventDebugHandler('abort'));\n req.on('socket', socket => {\n this.requestData.requestEventDebugHandler('socket', { socket });\n socket.on('error', error => this.requestData.requestEventDebugHandler('socket-error', { socket, error }));\n socket.on('connect', () => this.requestData.requestEventDebugHandler('socket-connect', { socket }));\n socket.on('close', withError => this.requestData.requestEventDebugHandler('socket-close', { socket, withError }));\n socket.on('end', () => this.requestData.requestEventDebugHandler('socket-end', { socket }));\n socket.on('lookup', (...data) => this.requestData.requestEventDebugHandler('socket-lookup', { socket, data }));\n socket.on('timeout', () => this.requestData.requestEventDebugHandler('socket-timeout', { socket }));\n });\n }\n makeRequest() {\n this.buildRequest();\n return new Promise((resolve, reject) => {\n const req = this.req;\n // Handle request errors\n req.on('error', this.requestErrorHandler.bind(this, reject));\n req.on('socket', this.onSocketEventHandler.bind(this, reject));\n req.on('response', this.classicResponseHandler.bind(this, resolve, reject));\n if (this.requestData.options.timeout) {\n req.on('timeout', this.timeoutErrorHandler.bind(this));\n }\n // Debug handlers\n if (this.requestData.requestEventDebugHandler) {\n this.registerRequestEventDebugHandlers(req);\n }\n if (this.requestData.body) {\n req.write(this.requestData.body);\n }\n req.end();\n });\n }\n async makeRequestAsStream() {\n const { req, res, requestData, originalResponse } = await this.makeRequestAndResolveWhenReady();\n return new TweetStream_1.default(requestData, { req, res, originalResponse });\n }\n makeRequestAndResolveWhenReady() {\n this.buildRequest();\n return new Promise((resolve, reject) => {\n const req = this.req;\n // Handle request errors\n req.on('error', this.requestErrorHandler.bind(this, reject));\n req.on('response', this.streamResponseHandler.bind(this, resolve, reject));\n if (this.requestData.body) {\n req.write(this.requestData.body);\n }\n req.end();\n });\n }\n}\nexports.RequestHandlerHelper = RequestHandlerHelper;\nexports.default = RequestHandlerHelper;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientRequestMaker = void 0;\nconst types_1 = require(\"../types\");\nconst TweetStream_1 = __importDefault(require(\"../stream/TweetStream\"));\nconst helpers_1 = require(\"../plugins/helpers\");\nconst helpers_2 = require(\"../helpers\");\nconst oauth1_helper_1 = __importDefault(require(\"./oauth1.helper\"));\nconst request_handler_helper_1 = __importDefault(require(\"./request-handler.helper\"));\nconst request_param_helper_1 = __importDefault(require(\"./request-param.helper\"));\nconst oauth2_helper_1 = require(\"./oauth2.helper\");\nclass ClientRequestMaker {\n constructor(settings) {\n this.rateLimits = {};\n this.clientSettings = {};\n if (settings) {\n this.clientSettings = settings;\n }\n }\n /** @deprecated - Switch to `@twitter-api-v2/plugin-rate-limit` */\n getRateLimits() {\n return this.rateLimits;\n }\n saveRateLimit(originalUrl, rateLimit) {\n this.rateLimits[originalUrl] = rateLimit;\n }\n /** Send a new request and returns a wrapped `Promise`. */\n async send(requestParams) {\n var _a, _b, _c, _d, _e;\n // Pre-request config hooks\n if ((_a = this.clientSettings.plugins) === null || _a === void 0 ? void 0 : _a.length) {\n const possibleResponse = await this.applyPreRequestConfigHooks(requestParams);\n if (possibleResponse) {\n return possibleResponse;\n }\n }\n const args = this.getHttpRequestArgs(requestParams);\n const options = {\n method: args.method,\n headers: args.headers,\n timeout: requestParams.timeout,\n agent: this.clientSettings.httpAgent,\n };\n const enableRateLimitSave = requestParams.enableRateLimitSave !== false;\n if (args.body) {\n request_param_helper_1.default.setBodyLengthHeader(options, args.body);\n }\n // Pre-request hooks\n if ((_b = this.clientSettings.plugins) === null || _b === void 0 ? void 0 : _b.length) {\n await this.applyPreRequestHooks(requestParams, args, options);\n }\n let request = new request_handler_helper_1.default({\n url: args.url,\n options,\n body: args.body,\n rateLimitSaver: enableRateLimitSave ? this.saveRateLimit.bind(this, args.rawUrl) : undefined,\n requestEventDebugHandler: requestParams.requestEventDebugHandler,\n compression: (_d = (_c = requestParams.compression) !== null && _c !== void 0 ? _c : this.clientSettings.compression) !== null && _d !== void 0 ? _d : true,\n forceParseMode: requestParams.forceParseMode,\n })\n .makeRequest();\n if ((0, helpers_1.hasRequestErrorPlugins)(this)) {\n request = this.applyResponseErrorHooks(requestParams, args, options, request);\n }\n const response = await request;\n // Post-request hooks\n if ((_e = this.clientSettings.plugins) === null || _e === void 0 ? void 0 : _e.length) {\n const responseOverride = await this.applyPostRequestHooks(requestParams, args, options, response);\n if (responseOverride) {\n return responseOverride.value;\n }\n }\n return response;\n }\n sendStream(requestParams) {\n var _a, _b;\n // Pre-request hooks\n if (this.clientSettings.plugins) {\n this.applyPreStreamRequestConfigHooks(requestParams);\n }\n const args = this.getHttpRequestArgs(requestParams);\n const options = {\n method: args.method,\n headers: args.headers,\n agent: this.clientSettings.httpAgent,\n };\n const enableRateLimitSave = requestParams.enableRateLimitSave !== false;\n const enableAutoConnect = requestParams.autoConnect !== false;\n if (args.body) {\n request_param_helper_1.default.setBodyLengthHeader(options, args.body);\n }\n const requestData = {\n url: args.url,\n options,\n body: args.body,\n rateLimitSaver: enableRateLimitSave ? this.saveRateLimit.bind(this, args.rawUrl) : undefined,\n payloadIsError: requestParams.payloadIsError,\n compression: (_b = (_a = requestParams.compression) !== null && _a !== void 0 ? _a : this.clientSettings.compression) !== null && _b !== void 0 ? _b : true,\n };\n const stream = new TweetStream_1.default(requestData);\n if (!enableAutoConnect) {\n return stream;\n }\n return stream.connect();\n }\n /* Token helpers */\n initializeToken(token) {\n if (typeof token === 'string') {\n this.bearerToken = token;\n }\n else if (typeof token === 'object' && 'appKey' in token) {\n this.consumerToken = token.appKey;\n this.consumerSecret = token.appSecret;\n if (token.accessToken && token.accessSecret) {\n this.accessToken = token.accessToken;\n this.accessSecret = token.accessSecret;\n }\n this._oauth = this.buildOAuth();\n }\n else if (typeof token === 'object' && 'username' in token) {\n const key = encodeURIComponent(token.username) + ':' + encodeURIComponent(token.password);\n this.basicToken = Buffer.from(key).toString('base64');\n }\n else if (typeof token === 'object' && 'clientId' in token) {\n this.clientId = token.clientId;\n this.clientSecret = token.clientSecret;\n }\n }\n getActiveTokens() {\n if (this.bearerToken) {\n return {\n type: 'oauth2',\n bearerToken: this.bearerToken,\n };\n }\n else if (this.basicToken) {\n return {\n type: 'basic',\n token: this.basicToken,\n };\n }\n else if (this.consumerSecret && this._oauth) {\n return {\n type: 'oauth-1.0a',\n appKey: this.consumerToken,\n appSecret: this.consumerSecret,\n accessToken: this.accessToken,\n accessSecret: this.accessSecret,\n };\n }\n else if (this.clientId) {\n return {\n type: 'oauth2-user',\n clientId: this.clientId,\n };\n }\n return { type: 'none' };\n }\n buildOAuth() {\n if (!this.consumerSecret || !this.consumerToken)\n throw new Error('Invalid consumer tokens');\n return new oauth1_helper_1.default({\n consumerKeys: { key: this.consumerToken, secret: this.consumerSecret },\n });\n }\n getOAuthAccessTokens() {\n if (!this.accessSecret || !this.accessToken)\n return;\n return {\n key: this.accessToken,\n secret: this.accessSecret,\n };\n }\n /* Plugin helpers */\n getPlugins() {\n var _a;\n return (_a = this.clientSettings.plugins) !== null && _a !== void 0 ? _a : [];\n }\n hasPlugins() {\n var _a;\n return !!((_a = this.clientSettings.plugins) === null || _a === void 0 ? void 0 : _a.length);\n }\n async applyPluginMethod(method, args) {\n var _a;\n let returnValue;\n for (const plugin of this.getPlugins()) {\n const value = await ((_a = plugin[method]) === null || _a === void 0 ? void 0 : _a.call(plugin, args));\n if (value && value instanceof types_1.TwitterApiPluginResponseOverride) {\n returnValue = value;\n }\n }\n return returnValue;\n }\n /* Request helpers */\n writeAuthHeaders({ headers, bodyInSignature, url, method, query, body }) {\n headers = { ...headers };\n if (this.bearerToken) {\n headers.Authorization = 'Bearer ' + this.bearerToken;\n }\n else if (this.basicToken) {\n // Basic auth, to request a bearer token\n headers.Authorization = 'Basic ' + this.basicToken;\n }\n else if (this.clientId && this.clientSecret) {\n // Basic auth with clientId + clientSecret\n headers.Authorization = 'Basic ' + oauth2_helper_1.OAuth2Helper.getAuthHeader(this.clientId, this.clientSecret);\n }\n else if (this.consumerSecret && this._oauth) {\n // Merge query and body\n const data = bodyInSignature ? request_param_helper_1.default.mergeQueryAndBodyForOAuth(query, body) : query;\n const auth = this._oauth.authorize({\n url: url.toString(),\n method,\n data,\n }, this.getOAuthAccessTokens());\n headers = { ...headers, ...this._oauth.toHeader(auth) };\n }\n return headers;\n }\n getUrlObjectFromUrlString(url) {\n // Add protocol to URL if needed\n if (!url.startsWith('http')) {\n url = 'https://' + url;\n }\n // Convert URL to object that will receive all URL modifications\n return new URL(url);\n }\n getHttpRequestArgs({ url: stringUrl, method, query: rawQuery = {}, body: rawBody = {}, headers, forceBodyMode, enableAuth, params, }) {\n let body = undefined;\n method = method.toUpperCase();\n headers = headers !== null && headers !== void 0 ? headers : {};\n // Add user agent header (Twitter recommends it)\n if (!headers['x-user-agent']) {\n headers['x-user-agent'] = 'Node.twitter-api-v2';\n }\n const url = this.getUrlObjectFromUrlString(stringUrl);\n // URL without query string to save as endpoint name\n const rawUrl = url.origin + url.pathname;\n // Apply URL parameters\n if (params) {\n request_param_helper_1.default.applyRequestParametersToUrl(url, params);\n }\n // Build a URL without anything in QS, and QSP in query\n const query = request_param_helper_1.default.formatQueryToString(rawQuery);\n request_param_helper_1.default.moveUrlQueryParamsIntoObject(url, query);\n // Delete undefined parameters\n if (!(rawBody instanceof Buffer)) {\n (0, helpers_2.trimUndefinedProperties)(rawBody);\n }\n // OAuth signature should not include parameters when using multipart.\n const bodyType = forceBodyMode !== null && forceBodyMode !== void 0 ? forceBodyMode : request_param_helper_1.default.autoDetectBodyType(url);\n // If undefined or true, enable auth by headers\n if (enableAuth !== false) {\n // OAuth needs body signature only if body is URL encoded.\n const bodyInSignature = ClientRequestMaker.BODY_METHODS.has(method) && bodyType === 'url';\n headers = this.writeAuthHeaders({ headers, bodyInSignature, method, query, url, body: rawBody });\n }\n if (ClientRequestMaker.BODY_METHODS.has(method)) {\n body = request_param_helper_1.default.constructBodyParams(rawBody, headers, bodyType) || undefined;\n }\n request_param_helper_1.default.addQueryParamsToUrl(url, query);\n return {\n rawUrl,\n url,\n method,\n headers,\n body,\n };\n }\n /* Plugin helpers */\n async applyPreRequestConfigHooks(requestParams) {\n var _a;\n const url = this.getUrlObjectFromUrlString(requestParams.url);\n for (const plugin of this.getPlugins()) {\n const result = await ((_a = plugin.onBeforeRequestConfig) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n client: this,\n url,\n params: requestParams,\n }));\n if (result) {\n return result;\n }\n }\n }\n applyPreStreamRequestConfigHooks(requestParams) {\n var _a;\n const url = this.getUrlObjectFromUrlString(requestParams.url);\n for (const plugin of this.getPlugins()) {\n (_a = plugin.onBeforeStreamRequestConfig) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n client: this,\n url,\n params: requestParams,\n });\n }\n }\n async applyPreRequestHooks(requestParams, computedParams, requestOptions) {\n await this.applyPluginMethod('onBeforeRequest', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n });\n }\n async applyPostRequestHooks(requestParams, computedParams, requestOptions, response) {\n return await this.applyPluginMethod('onAfterRequest', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n response,\n });\n }\n applyResponseErrorHooks(requestParams, computedParams, requestOptions, promise) {\n return promise.catch(helpers_1.applyResponseHooks.bind(this, requestParams, computedParams, requestOptions));\n }\n}\nexports.ClientRequestMaker = ClientRequestMaker;\nClientRequestMaker.BODY_METHODS = new Set(['POST', 'PUT', 'PATCH']);\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestParamHelpers = void 0;\nconst form_data_helper_1 = require(\"./form-data.helper\");\nconst oauth1_helper_1 = __importDefault(require(\"./oauth1.helper\"));\n/* Helpers functions that are specific to this class but do not depends on instance */\nclass RequestParamHelpers {\n static formatQueryToString(query) {\n const formattedQuery = {};\n for (const prop in query) {\n if (typeof query[prop] === 'string') {\n formattedQuery[prop] = query[prop];\n }\n else if (typeof query[prop] !== 'undefined') {\n formattedQuery[prop] = String(query[prop]);\n }\n }\n return formattedQuery;\n }\n static autoDetectBodyType(url) {\n if (url.pathname.startsWith('/2/') || url.pathname.startsWith('/labs/2/')) {\n // oauth2 takes url encoded\n if (url.password.startsWith('/2/oauth2')) {\n return 'url';\n }\n // Twitter API v2 has JSON-encoded requests for everything else\n return 'json';\n }\n if (url.hostname === 'upload.twitter.com') {\n if (url.pathname === '/1.1/media/upload.json') {\n return 'form-data';\n }\n // json except for media/upload command, that is form-data.\n return 'json';\n }\n const endpoint = url.pathname.split('/1.1/', 2)[1];\n if (this.JSON_1_1_ENDPOINTS.has(endpoint)) {\n return 'json';\n }\n return 'url';\n }\n static addQueryParamsToUrl(url, query) {\n const queryEntries = Object.entries(query);\n if (queryEntries.length) {\n let search = '';\n for (const [key, value] of queryEntries) {\n search += (search.length ? '&' : '?') + `${oauth1_helper_1.default.percentEncode(key)}=${oauth1_helper_1.default.percentEncode(value)}`;\n }\n url.search = search;\n }\n }\n static constructBodyParams(body, headers, mode) {\n if (body instanceof Buffer) {\n return body;\n }\n if (mode === 'json') {\n headers['content-type'] = 'application/json;charset=UTF-8';\n return JSON.stringify(body);\n }\n else if (mode === 'url') {\n headers['content-type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n if (Object.keys(body).length) {\n return new URLSearchParams(body)\n .toString()\n .replace(/\\*/g, '%2A'); // URLSearchParams doesnt encode '*', but Twitter wants it encoded.\n }\n return '';\n }\n else if (mode === 'raw') {\n throw new Error('You can only use raw body mode with Buffers. To give a string, use Buffer.from(str).');\n }\n else {\n const form = new form_data_helper_1.FormDataHelper();\n for (const parameter in body) {\n form.append(parameter, body[parameter]);\n }\n const formHeaders = form.getHeaders();\n headers['content-type'] = formHeaders['content-type'];\n return form.getBuffer();\n }\n }\n static setBodyLengthHeader(options, body) {\n var _a;\n options.headers = (_a = options.headers) !== null && _a !== void 0 ? _a : {};\n if (typeof body === 'string') {\n options.headers['content-length'] = Buffer.byteLength(body);\n }\n else {\n options.headers['content-length'] = body.length;\n }\n }\n static isOAuthSerializable(item) {\n return !(item instanceof Buffer);\n }\n static mergeQueryAndBodyForOAuth(query, body) {\n const parameters = {};\n for (const prop in query) {\n parameters[prop] = query[prop];\n }\n if (this.isOAuthSerializable(body)) {\n for (const prop in body) {\n const bodyProp = body[prop];\n if (this.isOAuthSerializable(bodyProp)) {\n parameters[prop] = typeof bodyProp === 'object' && bodyProp !== null && 'toString' in bodyProp\n ? bodyProp.toString()\n : bodyProp;\n }\n }\n }\n return parameters;\n }\n static moveUrlQueryParamsIntoObject(url, query) {\n for (const [param, value] of url.searchParams) {\n query[param] = value;\n }\n // Remove the query string\n url.search = '';\n return url;\n }\n /**\n * Replace URL parameters available in pathname, like `:id`, with data given in `parameters`:\n * `https://twitter.com/:id.json` + `{ id: '20' }` => `https://twitter.com/20.json`\n */\n static applyRequestParametersToUrl(url, parameters) {\n url.pathname = url.pathname.replace(/:([A-Z_-]+)/ig, (fullMatch, paramName) => {\n if (parameters[paramName] !== undefined) {\n return String(parameters[paramName]);\n }\n return fullMatch;\n });\n return url;\n }\n}\nexports.RequestParamHelpers = RequestParamHelpers;\nRequestParamHelpers.JSON_1_1_ENDPOINTS = new Set([\n 'direct_messages/events/new.json',\n 'direct_messages/welcome_messages/new.json',\n 'direct_messages/welcome_messages/rules/new.json',\n 'media/metadata/create.json',\n 'collections/entries/curate.json',\n]);\nexports.default = RequestParamHelpers;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst request_maker_mixin_1 = require(\"./client-mixins/request-maker.mixin\");\nconst helpers_1 = require(\"./helpers\");\nconst globals_1 = require(\"./globals\");\n/**\n * Base class for Twitter instances\n */\nclass TwitterApiBase {\n constructor(token, settings = {}) {\n this._currentUser = null;\n this._currentUserV2 = null;\n if (token instanceof TwitterApiBase) {\n this._requestMaker = token._requestMaker;\n }\n else {\n this._requestMaker = new request_maker_mixin_1.ClientRequestMaker(settings);\n this._requestMaker.initializeToken(token);\n }\n }\n /* Prefix/Token handling */\n setPrefix(prefix) {\n this._prefix = prefix;\n }\n cloneWithPrefix(prefix) {\n const clone = this.constructor(this);\n clone.setPrefix(prefix);\n return clone;\n }\n getActiveTokens() {\n return this._requestMaker.getActiveTokens();\n }\n /* Rate limit cache / Plugins */\n getPlugins() {\n return this._requestMaker.getPlugins();\n }\n getPluginOfType(type) {\n return this.getPlugins().find(plugin => plugin instanceof type);\n }\n /**\n * @deprecated - Migrate to plugin `@twitter-api-v2/plugin-rate-limit`\n *\n * Tells if you hit the Twitter rate limit for {endpoint}.\n * (local data only, this should not ask anything to Twitter)\n */\n hasHitRateLimit(endpoint) {\n var _a;\n if (this.isRateLimitStatusObsolete(endpoint)) {\n return false;\n }\n return ((_a = this.getLastRateLimitStatus(endpoint)) === null || _a === void 0 ? void 0 : _a.remaining) === 0;\n }\n /**\n * @deprecated - Migrate to plugin `@twitter-api-v2/plugin-rate-limit`\n *\n * Tells if you hit the returned Twitter rate limit for {endpoint} has expired.\n * If client has no saved rate limit data for {endpoint}, this will gives you `true`.\n */\n isRateLimitStatusObsolete(endpoint) {\n const rateLimit = this.getLastRateLimitStatus(endpoint);\n if (rateLimit === undefined) {\n return true;\n }\n // Timestamps are exprimed in seconds, JS works with ms\n return (rateLimit.reset * 1000) < Date.now();\n }\n /**\n * @deprecated - Migrate to plugin `@twitter-api-v2/plugin-rate-limit`\n *\n * Get the last obtained Twitter rate limit information for {endpoint}.\n * (local data only, this should not ask anything to Twitter)\n */\n getLastRateLimitStatus(endpoint) {\n const endpointWithPrefix = endpoint.match(/^https?:\\/\\//) ? endpoint : (this._prefix + endpoint);\n return this._requestMaker.getRateLimits()[endpointWithPrefix];\n }\n /* Current user cache */\n /** Get cached current user. */\n getCurrentUserObject(forceFetch = false) {\n if (!forceFetch && this._currentUser) {\n if (this._currentUser.value) {\n return Promise.resolve(this._currentUser.value);\n }\n return this._currentUser.promise;\n }\n this._currentUser = (0, helpers_1.sharedPromise)(() => this.get('account/verify_credentials.json', { tweet_mode: 'extended' }, { prefix: globals_1.API_V1_1_PREFIX }));\n return this._currentUser.promise;\n }\n /**\n * Get cached current user from v2 API.\n * This can only be the slimest available `UserV2` object, with only `id`, `name` and `username` properties defined.\n *\n * To get a customized `UserV2Result`, use `.v2.me()`\n *\n * OAuth2 scopes: `tweet.read` & `users.read`\n */\n getCurrentUserV2Object(forceFetch = false) {\n if (!forceFetch && this._currentUserV2) {\n if (this._currentUserV2.value) {\n return Promise.resolve(this._currentUserV2.value);\n }\n return this._currentUserV2.promise;\n }\n this._currentUserV2 = (0, helpers_1.sharedPromise)(() => this.get('users/me', undefined, { prefix: globals_1.API_V2_PREFIX }));\n return this._currentUserV2.promise;\n }\n async get(url, query = {}, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'GET',\n query,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async delete(url, query = {}, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'DELETE',\n query,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async post(url, body, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'POST',\n body,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async put(url, body, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'PUT',\n body,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async patch(url, body, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'PATCH',\n body,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n getStream(url, query, { prefix = this._prefix, ...rest } = {}) {\n return this._requestMaker.sendStream({\n url: prefix ? prefix + url : url,\n method: 'GET',\n query,\n ...rest,\n });\n }\n postStream(url, body, { prefix = this._prefix, ...rest } = {}) {\n return this._requestMaker.sendStream({\n url: prefix ? prefix + url : url,\n method: 'POST',\n body,\n ...rest,\n });\n }\n}\nexports.default = TwitterApiBase;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_base_1 = __importDefault(require(\"./client.base\"));\n/**\n * Base subclient for every v1 and v2 client.\n */\nclass TwitterApiSubClient extends client_base_1.default {\n constructor(instance) {\n if (!(instance instanceof client_base_1.default)) {\n throw new Error('You must instance SubTwitterApi instance from existing TwitterApi instance.');\n }\n super(instance);\n }\n}\nexports.default = TwitterApiSubClient;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiReadOnly = exports.TwitterApiReadWrite = exports.TwitterApi = void 0;\nconst client_v1_1 = __importDefault(require(\"../v1/client.v1\"));\nconst client_v2_1 = __importDefault(require(\"../v2/client.v2\"));\nconst readwrite_1 = __importDefault(require(\"./readwrite\"));\n// \"Real\" exported client for usage of TwitterApi.\n/**\n * Twitter v1.1 and v2 API client.\n */\nclass TwitterApi extends readwrite_1.default {\n /* Direct access to subclients */\n get v1() {\n if (this._v1)\n return this._v1;\n return this._v1 = new client_v1_1.default(this);\n }\n get v2() {\n if (this._v2)\n return this._v2;\n return this._v2 = new client_v2_1.default(this);\n }\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n /* Static helpers */\n static getErrors(error) {\n var _a;\n if (typeof error !== 'object')\n return [];\n if (!('data' in error))\n return [];\n return (_a = error.data.errors) !== null && _a !== void 0 ? _a : [];\n }\n /** Extract another image size than obtained in a `profile_image_url` or `profile_image_url_https` field of a user object. */\n static getProfileImageInSize(profileImageUrl, size) {\n const lastPart = profileImageUrl.split('/').pop();\n const sizes = ['normal', 'bigger', 'mini'];\n let originalUrl = profileImageUrl;\n for (const availableSize of sizes) {\n if (lastPart.includes(`_${availableSize}`)) {\n originalUrl = profileImageUrl.replace(`_${availableSize}`, '');\n break;\n }\n }\n if (size === 'original') {\n return originalUrl;\n }\n const extPos = originalUrl.lastIndexOf('.');\n if (extPos !== -1) {\n const ext = originalUrl.slice(extPos + 1);\n return originalUrl.slice(0, extPos) + '_' + size + '.' + ext;\n }\n else {\n return originalUrl + '_' + size;\n }\n }\n}\nexports.TwitterApi = TwitterApi;\nvar readwrite_2 = require(\"./readwrite\");\nObject.defineProperty(exports, \"TwitterApiReadWrite\", { enumerable: true, get: function () { return __importDefault(readwrite_2).default; } });\nvar readonly_1 = require(\"./readonly\");\nObject.defineProperty(exports, \"TwitterApiReadOnly\", { enumerable: true, get: function () { return __importDefault(readonly_1).default; } });\nexports.default = TwitterApi;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _1 = __importDefault(require(\".\"));\nconst client_base_1 = __importDefault(require(\"../client.base\"));\nconst client_v1_read_1 = __importDefault(require(\"../v1/client.v1.read\"));\nconst client_v2_read_1 = __importDefault(require(\"../v2/client.v2.read\"));\nconst oauth2_helper_1 = require(\"../client-mixins/oauth2.helper\");\nconst request_param_helper_1 = __importDefault(require(\"../client-mixins/request-param.helper\"));\n/**\n * Twitter v1.1 and v2 API client.\n */\nclass TwitterApiReadOnly extends client_base_1.default {\n /* Direct access to subclients */\n get v1() {\n if (this._v1)\n return this._v1;\n return this._v1 = new client_v1_read_1.default(this);\n }\n get v2() {\n if (this._v2)\n return this._v2;\n return this._v2 = new client_v2_read_1.default(this);\n }\n /**\n * Fetch and cache current user.\n * This method can only be called with a OAuth 1.0a user authentication.\n *\n * You can use this method to test if authentication was successful.\n * Next calls to this methods will use the cached user, unless `forceFetch: true` is given.\n */\n async currentUser(forceFetch = false) {\n return await this.getCurrentUserObject(forceFetch);\n }\n /**\n * Fetch and cache current user.\n * This method can only be called with a OAuth 1.0a or OAuth2 user authentication.\n *\n * This can only be the slimest available `UserV2` object, with only id, name and username properties defined.\n * To get a customized `UserV2Result`, use `.v2.me()`\n *\n * You can use this method to test if authentication was successful.\n * Next calls to this methods will use the cached user, unless `forceFetch: true` is given.\n *\n * OAuth2 scopes: `tweet.read` & `users.read`\n */\n async currentUserV2(forceFetch = false) {\n return await this.getCurrentUserV2Object(forceFetch);\n }\n /* Shortcuts to endpoints */\n search(what, options) {\n return this.v2.search(what, options);\n }\n /* Authentication */\n /**\n * Generate the OAuth request token link for user-based OAuth 1.0 auth.\n *\n * ```ts\n * // Instanciate TwitterApi with consumer keys\n * const client = new TwitterApi({ appKey: 'consumer_key', appSecret: 'consumer_secret' });\n *\n * const tokenRequest = await client.generateAuthLink('oob-or-your-callback-url');\n * // redirect end-user to tokenRequest.url\n *\n * // Save tokenRequest.oauth_token_secret somewhere, it will be needed for next auth step.\n * ```\n */\n async generateAuthLink(oauth_callback = 'oob', { authAccessType, linkMode = 'authenticate', forceLogin, screenName, } = {}) {\n const oauthResult = await this.post('https://api.twitter.com/oauth/request_token', { oauth_callback, x_auth_access_type: authAccessType });\n let url = `https://api.twitter.com/oauth/${linkMode}?oauth_token=${encodeURIComponent(oauthResult.oauth_token)}`;\n if (forceLogin !== undefined) {\n url += `&force_login=${encodeURIComponent(forceLogin)}`;\n }\n if (screenName !== undefined) {\n url += `&screen_name=${encodeURIComponent(screenName)}`;\n }\n if (this._requestMaker.hasPlugins()) {\n this._requestMaker.applyPluginMethod('onOAuth1RequestToken', {\n client: this._requestMaker,\n url,\n oauthResult,\n });\n }\n return {\n url,\n ...oauthResult,\n };\n }\n /**\n * Obtain access to user-based OAuth 1.0 auth.\n *\n * After user is redirect from your callback, use obtained oauth_token and oauth_verifier to\n * instanciate the new TwitterApi instance.\n *\n * ```ts\n * // Use the saved oauth_token_secret associated to oauth_token returned by callback\n * const requestClient = new TwitterApi({\n * appKey: 'consumer_key',\n * appSecret: 'consumer_secret',\n * accessToken: 'oauth_token',\n * accessSecret: 'oauth_token_secret'\n * });\n *\n * // Use oauth_verifier obtained from callback request\n * const { client: userClient } = await requestClient.login('oauth_verifier');\n *\n * // {userClient} is a valid {TwitterApi} object you can use for future requests\n * ```\n */\n async login(oauth_verifier) {\n const tokens = this.getActiveTokens();\n if (tokens.type !== 'oauth-1.0a')\n throw new Error('You must setup TwitterApi instance with consumer keys to accept OAuth 1.0 login');\n const oauth_result = await this.post('https://api.twitter.com/oauth/access_token', { oauth_token: tokens.accessToken, oauth_verifier });\n const client = new _1.default({\n appKey: tokens.appKey,\n appSecret: tokens.appSecret,\n accessToken: oauth_result.oauth_token,\n accessSecret: oauth_result.oauth_token_secret,\n }, this._requestMaker.clientSettings);\n return {\n accessToken: oauth_result.oauth_token,\n accessSecret: oauth_result.oauth_token_secret,\n userId: oauth_result.user_id,\n screenName: oauth_result.screen_name,\n client,\n };\n }\n /**\n * Enable application-only authentication.\n *\n * To make the request, instanciate TwitterApi with consumer and secret.\n *\n * ```ts\n * const requestClient = new TwitterApi({ appKey: 'consumer', appSecret: 'secret' });\n * const appClient = await requestClient.appLogin();\n *\n * // Use {appClient} to make requests\n * ```\n */\n async appLogin() {\n const tokens = this.getActiveTokens();\n if (tokens.type !== 'oauth-1.0a')\n throw new Error('You must setup TwitterApi instance with consumer keys to accept app-only login');\n // Create a client with Basic authentication\n const basicClient = new _1.default({ username: tokens.appKey, password: tokens.appSecret });\n const res = await basicClient.post('https://api.twitter.com/oauth2/token', { grant_type: 'client_credentials' });\n // New object with Bearer token\n return new _1.default(res.access_token, this._requestMaker.clientSettings);\n }\n /* OAuth 2 user authentication */\n /**\n * Generate the OAuth request token link for user-based OAuth 2.0 auth.\n *\n * - **You can only use v2 API endpoints with this authentication method.**\n * - **You need to specify which scope you want to have when you create your auth link. Make sure it matches your needs.**\n *\n * See https://developer.twitter.com/en/docs/authentication/oauth-2-0/user-access-token for details.\n *\n * ```ts\n * // Instanciate TwitterApi with client ID\n * const client = new TwitterApi({ clientId: 'yourClientId' });\n *\n * // Generate a link to callback URL that will gives a token with tweet+user read access\n * const link = client.generateOAuth2AuthLink('your-callback-url', { scope: ['tweet.read', 'users.read'] });\n *\n * // Extract props from generate link\n * const { url, state, codeVerifier } = link;\n *\n * // redirect end-user to url\n * // Save `state` and `codeVerifier` somewhere, it will be needed for next auth step.\n * ```\n */\n generateOAuth2AuthLink(redirectUri, options = {}) {\n var _a, _b;\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. You can find your client ID in Twitter Developer Portal. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n const state = (_a = options.state) !== null && _a !== void 0 ? _a : oauth2_helper_1.OAuth2Helper.generateRandomString(32);\n const codeVerifier = oauth2_helper_1.OAuth2Helper.getCodeVerifier();\n const codeChallenge = oauth2_helper_1.OAuth2Helper.getCodeChallengeFromVerifier(codeVerifier);\n const rawScope = (_b = options.scope) !== null && _b !== void 0 ? _b : '';\n const scope = Array.isArray(rawScope) ? rawScope.join(' ') : rawScope;\n const url = new URL('https://twitter.com/i/oauth2/authorize');\n const query = {\n response_type: 'code',\n client_id: this._requestMaker.clientId,\n redirect_uri: redirectUri,\n state,\n code_challenge: codeChallenge,\n code_challenge_method: 's256',\n scope,\n };\n request_param_helper_1.default.addQueryParamsToUrl(url, query);\n const result = {\n url: url.toString(),\n state,\n codeVerifier,\n codeChallenge,\n };\n if (this._requestMaker.hasPlugins()) {\n this._requestMaker.applyPluginMethod('onOAuth2RequestToken', {\n client: this._requestMaker,\n result,\n redirectUri,\n });\n }\n return result;\n }\n /**\n * Obtain access to user-based OAuth 2.0 auth.\n *\n * After user is redirect from your callback, use obtained code to\n * instanciate the new TwitterApi instance.\n *\n * You need to obtain `codeVerifier` from a call to `.generateOAuth2AuthLink`.\n *\n * ```ts\n * // Use the saved codeVerifier associated to state (present in query string of callback)\n * const requestClient = new TwitterApi({ clientId: 'yourClientId' });\n *\n * const { client: userClient, refreshToken } = await requestClient.loginWithOAuth2({\n * code: 'codeFromQueryString',\n * // the same URL given to generateOAuth2AuthLink\n * redirectUri,\n * // the verifier returned by generateOAuth2AuthLink\n * codeVerifier,\n * });\n *\n * // {userClient} is a valid {TwitterApi} object you can use for future requests\n * // {refreshToken} is defined if 'offline.access' is in scope.\n * ```\n */\n async loginWithOAuth2({ code, codeVerifier, redirectUri }) {\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n const accessTokenResult = await this.post('https://api.twitter.com/2/oauth2/token', {\n code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n grant_type: 'authorization_code',\n client_id: this._requestMaker.clientId,\n client_secret: this._requestMaker.clientSecret,\n });\n return this.parseOAuth2AccessTokenResult(accessTokenResult);\n }\n /**\n * Obtain a new access token to user-based OAuth 2.0 auth from a refresh token.\n *\n * ```ts\n * const requestClient = new TwitterApi({ clientId: 'yourClientId' });\n *\n * const { client: userClient } = await requestClient.refreshOAuth2Token('refreshToken');\n * // {userClient} is a valid {TwitterApi} object you can use for future requests\n * ```\n */\n async refreshOAuth2Token(refreshToken) {\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n const accessTokenResult = await this.post('https://api.twitter.com/2/oauth2/token', {\n refresh_token: refreshToken,\n grant_type: 'refresh_token',\n client_id: this._requestMaker.clientId,\n client_secret: this._requestMaker.clientSecret,\n });\n return this.parseOAuth2AccessTokenResult(accessTokenResult);\n }\n /**\n * Revoke a single user-based OAuth 2.0 token.\n *\n * You must specify its source, access token (directly after login)\n * or refresh token (if you've called `.refreshOAuth2Token` before).\n */\n async revokeOAuth2Token(token, tokenType = 'access_token') {\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n return await this.post('https://api.twitter.com/2/oauth2/revoke', {\n client_id: this._requestMaker.clientId,\n client_secret: this._requestMaker.clientSecret,\n token,\n token_type_hint: tokenType,\n });\n }\n parseOAuth2AccessTokenResult(result) {\n const client = new _1.default(result.access_token, this._requestMaker.clientSettings);\n const scope = result.scope.split(' ').filter(e => e);\n return {\n client,\n expiresIn: result.expires_in,\n accessToken: result.access_token,\n scope,\n refreshToken: result.refresh_token,\n };\n }\n}\nexports.default = TwitterApiReadOnly;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_v1_write_1 = __importDefault(require(\"../v1/client.v1.write\"));\nconst client_v2_write_1 = __importDefault(require(\"../v2/client.v2.write\"));\nconst readonly_1 = __importDefault(require(\"./readonly\"));\n/**\n * Twitter v1.1 and v2 API client.\n */\nclass TwitterApiReadWrite extends readonly_1.default {\n /* Direct access to subclients */\n get v1() {\n if (this._v1)\n return this._v1;\n return this._v1 = new client_v1_write_1.default(this);\n }\n get v2() {\n if (this._v2)\n return this._v2;\n return this._v2 = new client_v2_write_1.default(this);\n }\n /**\n * Get a client with read only rights.\n */\n get readOnly() {\n return this;\n }\n}\nexports.default = TwitterApiReadWrite;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.API_V1_1_STREAM_PREFIX = exports.API_V1_1_UPLOAD_PREFIX = exports.API_V1_1_PREFIX = exports.API_V2_LABS_PREFIX = exports.API_V2_PREFIX = void 0;\nexports.API_V2_PREFIX = 'https://api.twitter.com/2/';\nexports.API_V2_LABS_PREFIX = 'https://api.twitter.com/labs/2/';\nexports.API_V1_1_PREFIX = 'https://api.twitter.com/1.1/';\nexports.API_V1_1_UPLOAD_PREFIX = 'https://upload.twitter.com/1.1/';\nexports.API_V1_1_STREAM_PREFIX = 'https://stream.twitter.com/1.1/';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeDeprecationWarning = exports.hasMultipleItems = exports.isTweetStreamV2ErrorPayload = exports.trimUndefinedProperties = exports.arrayWrap = exports.sharedPromise = void 0;\nconst settings_1 = require(\"./settings\");\nfunction sharedPromise(getter) {\n const sharedPromise = {\n value: undefined,\n promise: getter().then(val => {\n sharedPromise.value = val;\n return val;\n }),\n };\n return sharedPromise;\n}\nexports.sharedPromise = sharedPromise;\nfunction arrayWrap(value) {\n if (Array.isArray(value)) {\n return value;\n }\n return [value];\n}\nexports.arrayWrap = arrayWrap;\nfunction trimUndefinedProperties(object) {\n // Delete undefined parameters\n for (const parameter in object) {\n if (object[parameter] === undefined)\n delete object[parameter];\n }\n}\nexports.trimUndefinedProperties = trimUndefinedProperties;\nfunction isTweetStreamV2ErrorPayload(payload) {\n // Is error only if 'errors' is present and 'data' does not exists\n return typeof payload === 'object'\n && 'errors' in payload\n && !('data' in payload);\n}\nexports.isTweetStreamV2ErrorPayload = isTweetStreamV2ErrorPayload;\nfunction hasMultipleItems(item) {\n if (Array.isArray(item) && item.length > 1) {\n return true;\n }\n return item.toString().includes(',');\n}\nexports.hasMultipleItems = hasMultipleItems;\nconst deprecationWarningsCache = new Set();\nfunction safeDeprecationWarning(message) {\n if (typeof console === 'undefined' || !console.warn || !settings_1.TwitterApiV2Settings.deprecationWarnings) {\n return;\n }\n const hash = `${message.instance}-${message.method}-${message.problem}`;\n if (deprecationWarningsCache.has(hash)) {\n return;\n }\n const formattedMsg = `[twitter-api-v2] Deprecation warning: In ${message.instance}.${message.method}() call` +\n `, ${message.problem}.\\n${message.resolution}.`;\n console.warn(formattedMsg);\n console.warn('To disable this message, import variable TwitterApiV2Settings from twitter-api-v2 and set TwitterApiV2Settings.deprecationWarnings to false.');\n deprecationWarningsCache.add(hash);\n}\nexports.safeDeprecationWarning = safeDeprecationWarning;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = void 0;\nvar client_1 = require(\"./client\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return __importDefault(client_1).default; } });\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./v1/client.v1\"), exports);\n__exportStar(require(\"./v2/client.v2\"), exports);\n__exportStar(require(\"./v2/includes.v2.helper\"), exports);\n__exportStar(require(\"./v2-labs/client.v2.labs\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./paginators\"), exports);\n__exportStar(require(\"./stream/TweetStream\"), exports);\n__exportStar(require(\"./settings\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PreviousableTwitterPaginator = exports.TwitterPaginator = void 0;\n/** TwitterPaginator: able to get consume data from initial request, then fetch next data sequentially. */\nclass TwitterPaginator {\n // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected\n constructor({ realData, rateLimit, instance, queryParams, sharedParams }) {\n this._maxResultsWhenFetchLast = 100;\n this._realData = realData;\n this._rateLimit = rateLimit;\n this._instance = instance;\n this._queryParams = queryParams;\n this._sharedParams = sharedParams;\n }\n get _isRateLimitOk() {\n const resetDate = this._rateLimit.reset * 1000;\n if (resetDate < Date.now()) {\n return true;\n }\n return this._rateLimit.remaining > 0;\n }\n makeRequest(queryParams) {\n return this._instance.get(this.getEndpoint(), queryParams, { fullResponse: true, params: this._sharedParams });\n }\n makeNewInstanceFromResult(result, queryParams) {\n // Construct a subclass\n return new this.constructor({\n realData: result.data,\n rateLimit: result.rateLimit,\n instance: this._instance,\n queryParams,\n sharedParams: this._sharedParams,\n });\n }\n getEndpoint() {\n return this._endpoint;\n }\n injectQueryParams(maxResults) {\n return {\n ...(maxResults ? { max_results: maxResults } : {}),\n ...this._queryParams,\n };\n }\n /* ---------------------- */\n /* Real paginator methods */\n /* ---------------------- */\n /**\n * Next page.\n */\n async next(maxResults) {\n const queryParams = this.getNextQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n return this.makeNewInstanceFromResult(result, queryParams);\n }\n /**\n * Next page, but store it in current instance.\n */\n async fetchNext(maxResults) {\n const queryParams = this.getNextQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n // Await in case of async sub-methods\n await this.refreshInstanceFromResult(result, true);\n return this;\n }\n /**\n * Fetch up to {count} items after current page,\n * as long as rate limit is not hit and Twitter has some results\n */\n async fetchLast(count = Infinity) {\n let queryParams = this.getNextQueryParams(this._maxResultsWhenFetchLast);\n let resultCount = 0;\n // Break at rate limit limit\n while (resultCount < count && this._isRateLimitOk) {\n const response = await this.makeRequest(queryParams);\n await this.refreshInstanceFromResult(response, true);\n resultCount += this.getPageLengthFromRequest(response);\n if (this.isFetchLastOver(response)) {\n break;\n }\n queryParams = this.getNextQueryParams(this._maxResultsWhenFetchLast);\n }\n return this;\n }\n get rateLimit() {\n return { ...this._rateLimit };\n }\n /** Get raw data returned by Twitter API. */\n get data() {\n return this._realData;\n }\n get done() {\n return !this.canFetchNextPage(this._realData);\n }\n /**\n * Iterate over currently fetched items.\n */\n *[Symbol.iterator]() {\n yield* this.getItemArray();\n }\n /**\n * Iterate over items \"undefinitely\" (until rate limit is hit / they're no more items available)\n * This will **mutate the current instance** and fill data, metas, etc. inside this instance.\n *\n * If you need to handle concurrent requests, or you need to rely on immutability, please use `.fetchAndIterate()` instead.\n */\n async *[Symbol.asyncIterator]() {\n yield* this.getItemArray();\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let paginator = this;\n let canFetchNextPage = this.canFetchNextPage(this._realData);\n while (canFetchNextPage && this._isRateLimitOk && paginator.getItemArray().length > 0) {\n const next = await paginator.next(this._maxResultsWhenFetchLast);\n // Store data into current instance [needed to access includes and meta]\n this.refreshInstanceFromResult({ data: next._realData, headers: {}, rateLimit: next._rateLimit }, true);\n canFetchNextPage = this.canFetchNextPage(next._realData);\n const items = next.getItemArray();\n yield* items;\n paginator = next;\n }\n }\n /**\n * Iterate over items \"undefinitely\" without modifying the current instance (until rate limit is hit / they're no more items available)\n *\n * This will **NOT** mutate the current instance, meaning that current instance will not inherit from `includes` and `meta` (v2 API only).\n * Use `Symbol.asyncIterator` (`for-await of`) to directly access items with current instance mutation.\n */\n async *fetchAndIterate() {\n for (const item of this.getItemArray()) {\n yield [item, this];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let paginator = this;\n let canFetchNextPage = this.canFetchNextPage(this._realData);\n while (canFetchNextPage && this._isRateLimitOk && paginator.getItemArray().length > 0) {\n const next = await paginator.next(this._maxResultsWhenFetchLast);\n // Store data into current instance [needed to access includes and meta]\n this.refreshInstanceFromResult({ data: next._realData, headers: {}, rateLimit: next._rateLimit }, true);\n canFetchNextPage = this.canFetchNextPage(next._realData);\n for (const item of next.getItemArray()) {\n yield [item, next];\n }\n this._rateLimit = next._rateLimit;\n paginator = next;\n }\n }\n}\nexports.TwitterPaginator = TwitterPaginator;\n/** PreviousableTwitterPaginator: a TwitterPaginator able to get consume data from both side, next and previous. */\nclass PreviousableTwitterPaginator extends TwitterPaginator {\n /**\n * Previous page (new tweets)\n */\n async previous(maxResults) {\n const queryParams = this.getPreviousQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n return this.makeNewInstanceFromResult(result, queryParams);\n }\n /**\n * Previous page, but in current instance.\n */\n async fetchPrevious(maxResults) {\n const queryParams = this.getPreviousQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n await this.refreshInstanceFromResult(result, false);\n return this;\n }\n}\nexports.PreviousableTwitterPaginator = PreviousableTwitterPaginator;\nexports.default = TwitterPaginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WelcomeDmV1Paginator = exports.DmEventsV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass DmEventsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'direct_messages/events/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.events.push(...result.events);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.events.length;\n }\n getItemArray() {\n return this.events;\n }\n /**\n * Events returned by paginator.\n */\n get events() {\n return this._realData.events;\n }\n}\nexports.DmEventsV1Paginator = DmEventsV1Paginator;\nclass WelcomeDmV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'direct_messages/welcome_messages/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.welcome_messages.push(...result.welcome_messages);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.welcome_messages.length;\n }\n getItemArray() {\n return this.welcomeMessages;\n }\n get welcomeMessages() {\n return this._realData.welcome_messages;\n }\n}\nexports.WelcomeDmV1Paginator = WelcomeDmV1Paginator;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./tweet.paginator.v2\"), exports);\n__exportStar(require(\"./TwitterPaginator\"), exports);\n__exportStar(require(\"./dm.paginator.v1\"), exports);\n__exportStar(require(\"./mutes.paginator.v1\"), exports);\n__exportStar(require(\"./tweet.paginator.v1\"), exports);\n__exportStar(require(\"./user.paginator.v1\"), exports);\n__exportStar(require(\"./user.paginator.v2\"), exports);\n__exportStar(require(\"./list.paginator.v1\"), exports);\n__exportStar(require(\"./list.paginator.v2\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ListSubscribersV1Paginator = exports.ListMembersV1Paginator = exports.ListSubscriptionsV1Paginator = exports.ListOwnershipsV1Paginator = exports.ListMembershipsV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass ListListsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.lists.push(...result.lists);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.lists.length;\n }\n getItemArray() {\n return this.lists;\n }\n /**\n * Lists returned by paginator.\n */\n get lists() {\n return this._realData.lists;\n }\n}\nclass ListMembershipsV1Paginator extends ListListsV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/memberships.json';\n }\n}\nexports.ListMembershipsV1Paginator = ListMembershipsV1Paginator;\nclass ListOwnershipsV1Paginator extends ListListsV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/ownerships.json';\n }\n}\nexports.ListOwnershipsV1Paginator = ListOwnershipsV1Paginator;\nclass ListSubscriptionsV1Paginator extends ListListsV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/subscriptions.json';\n }\n}\nexports.ListSubscriptionsV1Paginator = ListSubscriptionsV1Paginator;\nclass ListUsersV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.users.push(...result.users);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.users.length;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData.users;\n }\n}\nclass ListMembersV1Paginator extends ListUsersV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/members.json';\n }\n}\nexports.ListMembersV1Paginator = ListMembersV1Paginator;\nclass ListSubscribersV1Paginator extends ListUsersV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/subscribers.json';\n }\n}\nexports.ListSubscribersV1Paginator = ListSubscribersV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserListFollowedV2Paginator = exports.UserListMembershipsV2Paginator = exports.UserOwnedListsV2Paginator = void 0;\nconst v2_paginator_1 = require(\"./v2.paginator\");\nclass ListTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n getItemArray() {\n return this.lists;\n }\n /**\n * Lists returned by paginator.\n */\n get lists() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\nclass UserOwnedListsV2Paginator extends ListTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/owned_lists';\n }\n}\nexports.UserOwnedListsV2Paginator = UserOwnedListsV2Paginator;\nclass UserListMembershipsV2Paginator extends ListTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/list_memberships';\n }\n}\nexports.UserListMembershipsV2Paginator = UserListMembershipsV2Paginator;\nclass UserListFollowedV2Paginator extends ListTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/followed_lists';\n }\n}\nexports.UserListFollowedV2Paginator = UserListFollowedV2Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MuteUserIdsV1Paginator = exports.MuteUserListV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass MuteUserListV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'mutes/users/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.users.push(...result.users);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.users.length;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData.users;\n }\n}\nexports.MuteUserListV1Paginator = MuteUserListV1Paginator;\nclass MuteUserIdsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'mutes/users/ids.json';\n this._maxResultsWhenFetchLast = 5000;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.ids.push(...result.ids);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.ids.length;\n }\n getItemArray() {\n return this.ids;\n }\n /**\n * Users IDs returned by paginator.\n */\n get ids() {\n return this._realData.ids;\n }\n}\nexports.MuteUserIdsV1Paginator = MuteUserIdsV1Paginator;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CursoredV1Paginator = void 0;\nconst TwitterPaginator_1 = __importDefault(require(\"./TwitterPaginator\"));\nclass CursoredV1Paginator extends TwitterPaginator_1.default {\n getNextQueryParams(maxResults) {\n var _a;\n return {\n ...this._queryParams,\n cursor: (_a = this._realData.next_cursor_str) !== null && _a !== void 0 ? _a : this._realData.next_cursor,\n ...(maxResults ? { count: maxResults } : {}),\n };\n }\n isFetchLastOver(result) {\n // If we cant fetch next page\n return !this.canFetchNextPage(result.data);\n }\n canFetchNextPage(result) {\n // If one of cursor is valid\n return !this.isNextCursorInvalid(result.next_cursor) || !this.isNextCursorInvalid(result.next_cursor_str);\n }\n isNextCursorInvalid(value) {\n return value === undefined\n || value === 0\n || value === -1\n || value === '0'\n || value === '-1';\n }\n}\nexports.CursoredV1Paginator = CursoredV1Paginator;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserFavoritesV1Paginator = exports.ListTimelineV1Paginator = exports.UserTimelineV1Paginator = exports.MentionTimelineV1Paginator = exports.HomeTimelineV1Paginator = void 0;\nconst TwitterPaginator_1 = __importDefault(require(\"./TwitterPaginator\"));\n/** A generic TwitterPaginator able to consume TweetV1 timelines. */\nclass TweetTimelineV1Paginator extends TwitterPaginator_1.default {\n constructor() {\n super(...arguments);\n this.hasFinishedFetch = false;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.push(...result);\n // HINT: This is an approximation, as \"end\" of pagination cannot be safely determined without cursors.\n this.hasFinishedFetch = result.length === 0;\n }\n }\n getNextQueryParams(maxResults) {\n const lastestId = BigInt(this._realData[this._realData.length - 1].id_str);\n return {\n ...this.injectQueryParams(maxResults),\n max_id: (lastestId - BigInt(1)).toString(),\n };\n }\n getPageLengthFromRequest(result) {\n return result.data.length;\n }\n isFetchLastOver(result) {\n return !result.data.length;\n }\n canFetchNextPage(result) {\n return result.length > 0;\n }\n getItemArray() {\n return this.tweets;\n }\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n return this._realData;\n }\n get done() {\n return super.done || this.hasFinishedFetch;\n }\n}\n// Timelines\n// Home\nclass HomeTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'statuses/home_timeline.json';\n }\n}\nexports.HomeTimelineV1Paginator = HomeTimelineV1Paginator;\n// Mention\nclass MentionTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'statuses/mentions_timeline.json';\n }\n}\nexports.MentionTimelineV1Paginator = MentionTimelineV1Paginator;\n// User\nclass UserTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'statuses/user_timeline.json';\n }\n}\nexports.UserTimelineV1Paginator = UserTimelineV1Paginator;\n// Lists\nclass ListTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/statuses.json';\n }\n}\nexports.ListTimelineV1Paginator = ListTimelineV1Paginator;\n// Favorites\nclass UserFavoritesV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'favorites/list.json';\n }\n}\nexports.UserFavoritesV1Paginator = UserFavoritesV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetV2ListTweetsPaginator = exports.TweetV2UserLikedTweetsPaginator = exports.TweetBookmarksTimelineV2Paginator = exports.TweetUserMentionTimelineV2Paginator = exports.TweetUserTimelineV2Paginator = exports.TweetHomeTimelineV2Paginator = exports.QuotedTweetsTimelineV2Paginator = exports.TweetSearchAllV2Paginator = exports.TweetSearchRecentV2Paginator = void 0;\nconst v2_paginator_1 = require(\"./v2.paginator\");\n/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines with since_id, until_id and next_token (when available). */\nclass TweetTimelineV2Paginator extends v2_paginator_1.TwitterV2Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n var _a;\n const result = response.data;\n const resultData = (_a = result.data) !== null && _a !== void 0 ? _a : [];\n this._rateLimit = response.rateLimit;\n if (!this._realData.data) {\n this._realData.data = [];\n }\n if (isNextPage) {\n this._realData.meta.oldest_id = result.meta.oldest_id;\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.meta.next_token = result.meta.next_token;\n this._realData.data.push(...resultData);\n }\n else {\n this._realData.meta.newest_id = result.meta.newest_id;\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.data.unshift(...resultData);\n }\n this.updateIncludes(result);\n }\n getNextQueryParams(maxResults) {\n this.assertUsable();\n const params = { ...this.injectQueryParams(maxResults) };\n if (this._realData.meta.next_token) {\n params.next_token = this._realData.meta.next_token;\n }\n else {\n if (params.start_time) {\n // until_id and start_time are forbidden together for some reason, so convert start_time to a since_id.\n params.since_id = this.dateStringToSnowflakeId(params.start_time);\n delete params.start_time;\n }\n if (params.end_time) {\n // until_id overrides end_time, so delete it\n delete params.end_time;\n }\n params.until_id = this._realData.meta.oldest_id;\n }\n return params;\n }\n getPreviousQueryParams(maxResults) {\n this.assertUsable();\n return {\n ...this.injectQueryParams(maxResults),\n since_id: this._realData.meta.newest_id,\n };\n }\n getPageLengthFromRequest(result) {\n var _a, _b;\n return (_b = (_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n }\n isFetchLastOver(result) {\n var _a;\n return !((_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) || !this.canFetchNextPage(result.data);\n }\n canFetchNextPage(result) {\n return !!result.meta.next_token;\n }\n getItemArray() {\n return this.tweets;\n }\n dateStringToSnowflakeId(dateStr) {\n const TWITTER_START_EPOCH = BigInt('1288834974657');\n const date = new Date(dateStr);\n if (isNaN(date.valueOf())) {\n throw new Error('Unable to convert start_time/end_time to a valid date. A ISO 8601 DateTime is excepted, please check your input.');\n }\n const dateTimestamp = BigInt(date.valueOf());\n return ((dateTimestamp - TWITTER_START_EPOCH) << BigInt('22')).toString();\n }\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\n/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines with pagination_tokens. */\nclass TweetPaginableTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n super.refreshInstanceFromResult(response, isNextPage);\n const result = response.data;\n if (isNextPage) {\n this._realData.meta.oldest_id = result.meta.oldest_id;\n }\n else {\n this._realData.meta.newest_id = result.meta.newest_id;\n }\n }\n getItemArray() {\n return this.tweets;\n }\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\n// ----------------\n// - Tweet search -\n// ----------------\nclass TweetSearchRecentV2Paginator extends TweetTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/search/recent';\n }\n}\nexports.TweetSearchRecentV2Paginator = TweetSearchRecentV2Paginator;\nclass TweetSearchAllV2Paginator extends TweetTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/search/all';\n }\n}\nexports.TweetSearchAllV2Paginator = TweetSearchAllV2Paginator;\nclass QuotedTweetsTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/:id/quote_tweets';\n }\n}\nexports.QuotedTweetsTimelineV2Paginator = QuotedTweetsTimelineV2Paginator;\n// -----------------\n// - Home timeline -\n// -----------------\nclass TweetHomeTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/timelines/reverse_chronological';\n }\n}\nexports.TweetHomeTimelineV2Paginator = TweetHomeTimelineV2Paginator;\nclass TweetUserTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/tweets';\n }\n}\nexports.TweetUserTimelineV2Paginator = TweetUserTimelineV2Paginator;\nclass TweetUserMentionTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/mentions';\n }\n}\nexports.TweetUserMentionTimelineV2Paginator = TweetUserMentionTimelineV2Paginator;\n// -------------\n// - Bookmarks -\n// -------------\nclass TweetBookmarksTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/bookmarks';\n }\n}\nexports.TweetBookmarksTimelineV2Paginator = TweetBookmarksTimelineV2Paginator;\n// ---------------------------------------------------------------------------------\n// - Tweet lists (consume tweets with pagination tokens instead of since/until id) -\n// ---------------------------------------------------------------------------------\n/** A generic TwitterPaginator able to consume TweetV2 timelines. */\nclass TweetListV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n getItemArray() {\n return this.tweets;\n }\n}\nclass TweetV2UserLikedTweetsPaginator extends TweetListV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/liked_tweets';\n }\n}\nexports.TweetV2UserLikedTweetsPaginator = TweetV2UserLikedTweetsPaginator;\nclass TweetV2ListTweetsPaginator extends TweetListV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/:id/tweets';\n }\n}\nexports.TweetV2ListTweetsPaginator = TweetV2ListTweetsPaginator;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FriendshipsOutgoingV1Paginator = exports.FriendshipsIncomingV1Paginator = exports.UserSearchV1Paginator = void 0;\nconst TwitterPaginator_1 = __importDefault(require(\"./TwitterPaginator\"));\nconst paginator_v1_1 = require(\"./paginator.v1\");\n/** A generic TwitterPaginator able to consume TweetV1 timelines. */\nclass UserSearchV1Paginator extends TwitterPaginator_1.default {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/search.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.push(...result);\n }\n }\n getNextQueryParams(maxResults) {\n var _a;\n const previousPage = Number((_a = this._queryParams.page) !== null && _a !== void 0 ? _a : '1');\n return {\n ...this._queryParams,\n page: previousPage + 1,\n ...maxResults ? { count: maxResults } : {},\n };\n }\n getPageLengthFromRequest(result) {\n return result.data.length;\n }\n isFetchLastOver(result) {\n return !result.data.length;\n }\n canFetchNextPage(result) {\n return result.length > 0;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData;\n }\n}\nexports.UserSearchV1Paginator = UserSearchV1Paginator;\nclass FriendshipsIncomingV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'friendships/incoming.json';\n this._maxResultsWhenFetchLast = 5000;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.ids.push(...result.ids);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.ids.length;\n }\n getItemArray() {\n return this.ids;\n }\n /**\n * Users IDs returned by paginator.\n */\n get ids() {\n return this._realData.ids;\n }\n}\nexports.FriendshipsIncomingV1Paginator = FriendshipsIncomingV1Paginator;\nclass FriendshipsOutgoingV1Paginator extends FriendshipsIncomingV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'friendships/outgoing.json';\n }\n}\nexports.FriendshipsOutgoingV1Paginator = FriendshipsOutgoingV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetRetweetersUsersV2Paginator = exports.TweetLikingUsersV2Paginator = exports.UserListFollowersV2Paginator = exports.UserListMembersV2Paginator = exports.UserFollowingV2Paginator = exports.UserFollowersV2Paginator = exports.UserMutingUsersV2Paginator = exports.UserBlockingUsersV2Paginator = void 0;\nconst v2_paginator_1 = require(\"./v2.paginator\");\n/** A generic PreviousableTwitterPaginator able to consume UserV2 timelines. */\nclass UserTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\nclass UserBlockingUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/blocking';\n }\n}\nexports.UserBlockingUsersV2Paginator = UserBlockingUsersV2Paginator;\nclass UserMutingUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/muting';\n }\n}\nexports.UserMutingUsersV2Paginator = UserMutingUsersV2Paginator;\nclass UserFollowersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/followers';\n }\n}\nexports.UserFollowersV2Paginator = UserFollowersV2Paginator;\nclass UserFollowingV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/following';\n }\n}\nexports.UserFollowingV2Paginator = UserFollowingV2Paginator;\nclass UserListMembersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/:id/members';\n }\n}\nexports.UserListMembersV2Paginator = UserListMembersV2Paginator;\nclass UserListFollowersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/:id/followers';\n }\n}\nexports.UserListFollowersV2Paginator = UserListFollowersV2Paginator;\nclass TweetLikingUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/:id/liking_users';\n }\n}\nexports.TweetLikingUsersV2Paginator = TweetLikingUsersV2Paginator;\nclass TweetRetweetersUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/:id/retweeted_by';\n }\n}\nexports.TweetRetweetersUsersV2Paginator = TweetRetweetersUsersV2Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TimelineV2Paginator = exports.TwitterV2Paginator = void 0;\nconst includes_v2_helper_1 = require(\"../v2/includes.v2.helper\");\nconst TwitterPaginator_1 = require(\"./TwitterPaginator\");\n/** A generic PreviousableTwitterPaginator with common v2 helper methods. */\nclass TwitterV2Paginator extends TwitterPaginator_1.PreviousableTwitterPaginator {\n updateIncludes(data) {\n // Update errors\n if (data.errors) {\n if (!this._realData.errors) {\n this._realData.errors = [];\n }\n this._realData.errors = [...this._realData.errors, ...data.errors];\n }\n // Update includes\n if (!data.includes) {\n return;\n }\n if (!this._realData.includes) {\n this._realData.includes = {};\n }\n const includesRealData = this._realData.includes;\n for (const [includeKey, includeArray] of Object.entries(data.includes)) {\n if (!includesRealData[includeKey]) {\n includesRealData[includeKey] = [];\n }\n includesRealData[includeKey] = [\n ...includesRealData[includeKey],\n ...includeArray,\n ];\n }\n }\n /** Throw if the current paginator is not usable. */\n assertUsable() {\n if (this.unusable) {\n throw new Error('Unable to use this paginator to fetch more data, as it does not contain any metadata.' +\n ' Check .errors property for more details.');\n }\n }\n get meta() {\n return this._realData.meta;\n }\n get includes() {\n var _a;\n if (!((_a = this._realData) === null || _a === void 0 ? void 0 : _a.includes)) {\n return new includes_v2_helper_1.TwitterV2IncludesHelper(this._realData);\n }\n if (this._includesInstance) {\n return this._includesInstance;\n }\n return this._includesInstance = new includes_v2_helper_1.TwitterV2IncludesHelper(this._realData);\n }\n get errors() {\n var _a;\n return (_a = this._realData.errors) !== null && _a !== void 0 ? _a : [];\n }\n /** `true` if this paginator only contains error payload and no metadata found to consume data. */\n get unusable() {\n return this.errors.length > 0 && !this._realData.meta && !this._realData.data;\n }\n}\nexports.TwitterV2Paginator = TwitterV2Paginator;\n/** A generic TwitterV2Paginator able to consume v2 timelines that use max_results and pagination tokens. */\nclass TimelineV2Paginator extends TwitterV2Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n var _a;\n const result = response.data;\n const resultData = (_a = result.data) !== null && _a !== void 0 ? _a : [];\n this._rateLimit = response.rateLimit;\n if (!this._realData.data) {\n this._realData.data = [];\n }\n if (isNextPage) {\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.meta.next_token = result.meta.next_token;\n this._realData.data.push(...resultData);\n }\n else {\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.meta.previous_token = result.meta.previous_token;\n this._realData.data.unshift(...resultData);\n }\n this.updateIncludes(result);\n }\n getNextQueryParams(maxResults) {\n this.assertUsable();\n return {\n ...this.injectQueryParams(maxResults),\n pagination_token: this._realData.meta.next_token,\n };\n }\n getPreviousQueryParams(maxResults) {\n this.assertUsable();\n return {\n ...this.injectQueryParams(maxResults),\n pagination_token: this._realData.meta.previous_token,\n };\n }\n getPageLengthFromRequest(result) {\n var _a, _b;\n return (_b = (_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n }\n isFetchLastOver(result) {\n var _a;\n return !((_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) || !this.canFetchNextPage(result.data);\n }\n canFetchNextPage(result) {\n var _a;\n return !!((_a = result.meta) === null || _a === void 0 ? void 0 : _a.next_token);\n }\n}\nexports.TimelineV2Paginator = TimelineV2Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.applyResponseHooks = exports.hasRequestErrorPlugins = void 0;\nconst types_1 = require(\"../types\");\n/* Plugin helpers */\nfunction hasRequestErrorPlugins(client) {\n var _a;\n if (!((_a = client.clientSettings.plugins) === null || _a === void 0 ? void 0 : _a.length)) {\n return false;\n }\n for (const plugin of client.clientSettings.plugins) {\n if (plugin.onRequestError || plugin.onResponseError) {\n return true;\n }\n }\n return false;\n}\nexports.hasRequestErrorPlugins = hasRequestErrorPlugins;\nasync function applyResponseHooks(requestParams, computedParams, requestOptions, error) {\n let override;\n if (error instanceof types_1.ApiRequestError || error instanceof types_1.ApiPartialResponseError) {\n override = await this.applyPluginMethod('onRequestError', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n error,\n });\n }\n else if (error instanceof types_1.ApiResponseError) {\n override = await this.applyPluginMethod('onResponseError', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n error,\n });\n }\n if (override && override instanceof types_1.TwitterApiPluginResponseOverride) {\n return override.value;\n }\n return Promise.reject(error);\n}\nexports.applyResponseHooks = applyResponseHooks;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiV2Settings = void 0;\nexports.TwitterApiV2Settings = {\n debug: false,\n deprecationWarnings: true,\n logger: { log: console.log.bind(console) },\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetStream = void 0;\nconst events_1 = require(\"events\");\nconst request_handler_helper_1 = __importDefault(require(\"../client-mixins/request-handler.helper\"));\nconst types_1 = require(\"../types\");\nconst TweetStreamEventCombiner_1 = __importDefault(require(\"./TweetStreamEventCombiner\"));\nconst TweetStreamParser_1 = __importStar(require(\"./TweetStreamParser\"));\n// In seconds\nconst basicRetriesAttempt = [5, 15, 30, 60, 90, 120, 180, 300, 600, 900];\n// Default retry function\nconst basicReconnectRetry = tryOccurence => tryOccurence > basicRetriesAttempt.length\n ? 901000\n : basicRetriesAttempt[tryOccurence - 1] * 1000;\nclass TweetStream extends events_1.EventEmitter {\n constructor(requestData, connection) {\n super();\n this.requestData = requestData;\n this.autoReconnect = false;\n this.autoReconnectRetries = 5;\n // 2 minutes without any Twitter signal\n this.keepAliveTimeoutMs = 1000 * 120;\n this.nextRetryTimeout = basicReconnectRetry;\n this.parser = new TweetStreamParser_1.default();\n this.connectionProcessRunning = false;\n this.onKeepAliveTimeout = this.onKeepAliveTimeout.bind(this);\n this.initEventsFromParser();\n if (connection) {\n this.req = connection.req;\n this.res = connection.res;\n this.originalResponse = connection.originalResponse;\n this.initEventsFromRequest();\n }\n }\n on(event, handler) {\n return super.on(event, handler);\n }\n initEventsFromRequest() {\n if (!this.req || !this.res) {\n throw new Error('TweetStream error: You cannot init TweetStream without a request and response object.');\n }\n const errorHandler = (err) => {\n this.emit(types_1.ETwitterStreamEvent.ConnectionError, err);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.ConnectionError,\n error: err,\n message: 'Connection lost or closed by Twitter.',\n });\n this.onConnectionError();\n };\n this.req.on('error', errorHandler);\n this.res.on('error', errorHandler);\n // Usually, connection should not be closed by Twitter!\n this.res.on('close', () => errorHandler(new Error('Connection closed by Twitter.')));\n this.res.on('data', (chunk) => {\n this.resetKeepAliveTimeout();\n if (chunk.toString() === '\\r\\n') {\n return this.emit(types_1.ETwitterStreamEvent.DataKeepAlive);\n }\n this.parser.push(chunk.toString());\n });\n // Starts the keep alive timeout\n this.resetKeepAliveTimeout();\n }\n initEventsFromParser() {\n const payloadIsError = this.requestData.payloadIsError;\n this.parser.on(TweetStreamParser_1.EStreamParserEvent.ParsedData, (eventData) => {\n if (payloadIsError && payloadIsError(eventData)) {\n this.emit(types_1.ETwitterStreamEvent.DataError, eventData);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.DataError,\n error: eventData,\n message: 'Twitter sent a payload that is detected as an error payload.',\n });\n }\n else {\n this.emit(types_1.ETwitterStreamEvent.Data, eventData);\n }\n });\n this.parser.on(TweetStreamParser_1.EStreamParserEvent.ParseError, (error) => {\n this.emit(types_1.ETwitterStreamEvent.TweetParseError, error);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.TweetParseError,\n error,\n message: 'Failed to parse stream data.',\n });\n });\n }\n resetKeepAliveTimeout() {\n this.unbindKeepAliveTimeout();\n if (this.keepAliveTimeoutMs !== Infinity) {\n this.keepAliveTimeout = setTimeout(this.onKeepAliveTimeout, this.keepAliveTimeoutMs);\n }\n }\n onKeepAliveTimeout() {\n this.emit(types_1.ETwitterStreamEvent.ConnectionLost);\n this.onConnectionError();\n }\n unbindTimeouts() {\n this.unbindRetryTimeout();\n this.unbindKeepAliveTimeout();\n }\n unbindKeepAliveTimeout() {\n if (this.keepAliveTimeout) {\n clearTimeout(this.keepAliveTimeout);\n this.keepAliveTimeout = undefined;\n }\n }\n unbindRetryTimeout() {\n if (this.retryTimeout) {\n clearTimeout(this.retryTimeout);\n this.retryTimeout = undefined;\n }\n }\n closeWithoutEmit() {\n this.unbindTimeouts();\n if (this.res) {\n this.res.removeAllListeners();\n // Close response silentely\n this.res.destroy();\n }\n if (this.req) {\n this.req.removeAllListeners();\n // Close connection silentely\n this.req.destroy();\n }\n }\n /** Terminate connection to Twitter. */\n close() {\n this.emit(types_1.ETwitterStreamEvent.ConnectionClosed);\n this.closeWithoutEmit();\n }\n /** Unbind all listeners, and close connection. */\n destroy() {\n this.removeAllListeners();\n this.close();\n }\n /**\n * Make a new request that creates a new `TweetStream` instance with\n * the same parameters, and bind current listeners to new stream.\n */\n async clone() {\n const newRequest = new request_handler_helper_1.default(this.requestData);\n const newStream = await newRequest.makeRequestAsStream();\n // Clone attached listeners\n const listenerNames = this.eventNames();\n for (const listener of listenerNames) {\n const callbacks = this.listeners(listener);\n for (const callback of callbacks) {\n newStream.on(listener, callback);\n }\n }\n return newStream;\n }\n /** Start initial stream connection, setup options on current instance and returns itself. */\n async connect(options = {}) {\n if (typeof options.autoReconnect !== 'undefined') {\n this.autoReconnect = options.autoReconnect;\n }\n if (typeof options.autoReconnectRetries !== 'undefined') {\n this.autoReconnectRetries = options.autoReconnectRetries === 'unlimited'\n ? Infinity\n : options.autoReconnectRetries;\n }\n if (typeof options.keepAliveTimeout !== 'undefined') {\n this.keepAliveTimeoutMs = options.keepAliveTimeout === 'disable'\n ? Infinity\n : options.keepAliveTimeout;\n }\n if (typeof options.nextRetryTimeout !== 'undefined') {\n this.nextRetryTimeout = options.nextRetryTimeout;\n }\n // Make the connection\n this.unbindTimeouts();\n try {\n await this.reconnect();\n }\n catch (e) {\n this.emit(types_1.ETwitterStreamEvent.ConnectError, 0);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.ConnectError,\n error: e,\n message: 'Connect error - Initial connection just failed.',\n });\n // Only make a reconnection attempt if autoReconnect is true!\n // Otherwise, let error be propagated\n if (this.autoReconnect) {\n this.makeAutoReconnectRetry(0, e);\n }\n else {\n throw e;\n }\n }\n return this;\n }\n /** Make a new request to (re)connect to Twitter. */\n async reconnect() {\n if (this.connectionProcessRunning) {\n throw new Error('Connection process is already running.');\n }\n this.connectionProcessRunning = true;\n try {\n let initialConnection = true;\n if (this.req) {\n initialConnection = false;\n this.closeWithoutEmit();\n }\n const { req, res, originalResponse } = await new request_handler_helper_1.default(this.requestData).makeRequestAndResolveWhenReady();\n this.req = req;\n this.res = res;\n this.originalResponse = originalResponse;\n this.emit(initialConnection ? types_1.ETwitterStreamEvent.Connected : types_1.ETwitterStreamEvent.Reconnected);\n this.parser.reset();\n this.initEventsFromRequest();\n }\n finally {\n this.connectionProcessRunning = false;\n }\n }\n async onConnectionError(retryOccurence = 0) {\n this.unbindTimeouts();\n // Close the request if necessary\n this.closeWithoutEmit();\n // Terminate stream by events if necessary (no auto-reconnect or retries exceeded)\n if (!this.autoReconnect) {\n this.emit(types_1.ETwitterStreamEvent.ConnectionClosed);\n return;\n }\n if (retryOccurence >= this.autoReconnectRetries) {\n this.emit(types_1.ETwitterStreamEvent.ReconnectLimitExceeded);\n this.emit(types_1.ETwitterStreamEvent.ConnectionClosed);\n return;\n }\n // If all other conditions fails, do a reconnect attempt\n try {\n this.emit(types_1.ETwitterStreamEvent.ReconnectAttempt, retryOccurence);\n await this.reconnect();\n }\n catch (e) {\n this.emit(types_1.ETwitterStreamEvent.ReconnectError, retryOccurence);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.ReconnectError,\n error: e,\n message: `Reconnect error - ${retryOccurence + 1} attempts made yet.`,\n });\n this.makeAutoReconnectRetry(retryOccurence, e);\n }\n }\n makeAutoReconnectRetry(retryOccurence, error) {\n const nextRetry = this.nextRetryTimeout(retryOccurence + 1, error);\n this.retryTimeout = setTimeout(() => {\n this.onConnectionError(retryOccurence + 1);\n }, nextRetry);\n }\n async *[Symbol.asyncIterator]() {\n const eventCombiner = new TweetStreamEventCombiner_1.default(this);\n try {\n while (true) {\n if (!this.req || this.req.aborted) {\n throw new Error('Connection closed');\n }\n if (eventCombiner.hasStack()) {\n yield* eventCombiner.popStack();\n }\n const { type, payload } = await eventCombiner.nextEvent();\n if (type === 'error') {\n throw payload;\n }\n }\n }\n finally {\n eventCombiner.destroy();\n }\n }\n}\nexports.TweetStream = TweetStream;\nexports.default = TweetStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetStreamEventCombiner = void 0;\nconst events_1 = require(\"events\");\nconst types_1 = require(\"../types\");\nclass TweetStreamEventCombiner extends events_1.EventEmitter {\n constructor(stream) {\n super();\n this.stream = stream;\n this.stack = [];\n this.onStreamData = this.onStreamData.bind(this);\n this.onStreamError = this.onStreamError.bind(this);\n this.onceNewEvent = this.once.bind(this, 'event');\n // Init events from stream\n stream.on(types_1.ETwitterStreamEvent.Data, this.onStreamData);\n // Ignore reconnect errors: Don't close event combiner until connection error/closed\n stream.on(types_1.ETwitterStreamEvent.ConnectionError, this.onStreamError);\n stream.on(types_1.ETwitterStreamEvent.TweetParseError, this.onStreamError);\n stream.on(types_1.ETwitterStreamEvent.ConnectionClosed, this.onStreamError);\n }\n /** Returns a new `Promise` that will `resolve` on next event (`data` or any sort of error). */\n nextEvent() {\n return new Promise(this.onceNewEvent);\n }\n /** Returns `true` if there's something in the stack. */\n hasStack() {\n return this.stack.length > 0;\n }\n /** Returns stacked data events, and clean the stack. */\n popStack() {\n const stack = this.stack;\n this.stack = [];\n return stack;\n }\n /** Cleanup all the listeners attached on stream. */\n destroy() {\n this.removeAllListeners();\n this.stream.off(types_1.ETwitterStreamEvent.Data, this.onStreamData);\n this.stream.off(types_1.ETwitterStreamEvent.ConnectionError, this.onStreamError);\n this.stream.off(types_1.ETwitterStreamEvent.TweetParseError, this.onStreamError);\n this.stream.off(types_1.ETwitterStreamEvent.ConnectionClosed, this.onStreamError);\n }\n emitEvent(type, payload) {\n this.emit('event', { type, payload });\n }\n onStreamError(payload) {\n this.emitEvent('error', payload);\n }\n onStreamData(payload) {\n this.stack.push(payload);\n this.emitEvent('data', payload);\n }\n}\nexports.TweetStreamEventCombiner = TweetStreamEventCombiner;\nexports.default = TweetStreamEventCombiner;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EStreamParserEvent = void 0;\nconst events_1 = require(\"events\");\nclass TweetStreamParser extends events_1.EventEmitter {\n constructor() {\n super(...arguments);\n this.currentMessage = '';\n }\n // Code partially belongs to twitter-stream-api for this\n // https://github.com/trygve-lie/twitter-stream-api/blob/master/lib/parser.js\n push(chunk) {\n this.currentMessage += chunk;\n chunk = this.currentMessage;\n const size = chunk.length;\n let start = 0;\n let offset = 0;\n while (offset < size) {\n // Take [offset, offset+1] inside a new string\n if (chunk.slice(offset, offset + 2) === '\\r\\n') {\n // If chunk contains \\r\\n after current offset,\n // parse [start, ..., offset] as a tweet\n const piece = chunk.slice(start, offset);\n start = offset += 2;\n // If empty object\n if (!piece.length) {\n continue;\n }\n try {\n const payload = JSON.parse(piece);\n if (payload) {\n this.emit(EStreamParserEvent.ParsedData, payload);\n continue;\n }\n }\n catch (error) {\n this.emit(EStreamParserEvent.ParseError, error);\n }\n }\n offset++;\n }\n this.currentMessage = chunk.slice(start, size);\n }\n /** Reset the currently stored message (f.e. on connection reset) */\n reset() {\n this.currentMessage = '';\n }\n}\nexports.default = TweetStreamParser;\nvar EStreamParserEvent;\n(function (EStreamParserEvent) {\n EStreamParserEvent[\"ParsedData\"] = \"parsed data\";\n EStreamParserEvent[\"ParseError\"] = \"parse error\";\n})(EStreamParserEvent = exports.EStreamParserEvent || (exports.EStreamParserEvent = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ETwitterStreamEvent = void 0;\nvar ETwitterStreamEvent;\n(function (ETwitterStreamEvent) {\n ETwitterStreamEvent[\"Connected\"] = \"connected\";\n ETwitterStreamEvent[\"ConnectError\"] = \"connect error\";\n ETwitterStreamEvent[\"ConnectionError\"] = \"connection error\";\n ETwitterStreamEvent[\"ConnectionClosed\"] = \"connection closed\";\n ETwitterStreamEvent[\"ConnectionLost\"] = \"connection lost\";\n ETwitterStreamEvent[\"ReconnectAttempt\"] = \"reconnect attempt\";\n ETwitterStreamEvent[\"Reconnected\"] = \"reconnected\";\n ETwitterStreamEvent[\"ReconnectError\"] = \"reconnect error\";\n ETwitterStreamEvent[\"ReconnectLimitExceeded\"] = \"reconnect limit exceeded\";\n ETwitterStreamEvent[\"DataKeepAlive\"] = \"data keep-alive\";\n ETwitterStreamEvent[\"Data\"] = \"data event content\";\n ETwitterStreamEvent[\"DataError\"] = \"data twitter error\";\n ETwitterStreamEvent[\"TweetParseError\"] = \"data tweet parse error\";\n ETwitterStreamEvent[\"Error\"] = \"stream error\";\n})(ETwitterStreamEvent = exports.ETwitterStreamEvent || (exports.ETwitterStreamEvent = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EApiV2ErrorCode = exports.EApiV1ErrorCode = exports.ApiResponseError = exports.ApiPartialResponseError = exports.ApiRequestError = exports.ETwitterApiError = void 0;\nvar ETwitterApiError;\n(function (ETwitterApiError) {\n ETwitterApiError[\"Request\"] = \"request\";\n ETwitterApiError[\"PartialResponse\"] = \"partial-response\";\n ETwitterApiError[\"Response\"] = \"response\";\n})(ETwitterApiError = exports.ETwitterApiError || (exports.ETwitterApiError = {}));\n/* ERRORS INSTANCES */\nclass ApiError extends Error {\n constructor() {\n super(...arguments);\n this.error = true;\n }\n}\nclass ApiRequestError extends ApiError {\n constructor(message, options) {\n super(message);\n this.type = ETwitterApiError.Request;\n Error.captureStackTrace(this, this.constructor);\n // Do not show on Node stack trace\n Object.defineProperty(this, '_options', { value: options });\n }\n get request() {\n return this._options.request;\n }\n get requestError() {\n return this._options.requestError;\n }\n toJSON() {\n return {\n type: this.type,\n error: this.requestError,\n };\n }\n}\nexports.ApiRequestError = ApiRequestError;\nclass ApiPartialResponseError extends ApiError {\n constructor(message, options) {\n super(message);\n this.type = ETwitterApiError.PartialResponse;\n Error.captureStackTrace(this, this.constructor);\n // Do not show on Node stack trace\n Object.defineProperty(this, '_options', { value: options });\n }\n get request() {\n return this._options.request;\n }\n get response() {\n return this._options.response;\n }\n get responseError() {\n return this._options.responseError;\n }\n get rawContent() {\n return this._options.rawContent;\n }\n toJSON() {\n return {\n type: this.type,\n error: this.responseError,\n };\n }\n}\nexports.ApiPartialResponseError = ApiPartialResponseError;\nclass ApiResponseError extends ApiError {\n constructor(message, options) {\n super(message);\n this.type = ETwitterApiError.Response;\n Error.captureStackTrace(this, this.constructor);\n // Do not show on Node stack trace\n Object.defineProperty(this, '_options', { value: options });\n this.code = options.code;\n this.headers = options.headers;\n this.rateLimit = options.rateLimit;\n this.data = options.data;\n }\n get request() {\n return this._options.request;\n }\n get response() {\n return this._options.response;\n }\n /** Check for presence of one of given v1/v2 error codes. */\n hasErrorCode(...codes) {\n const errors = this.errors;\n // No errors\n if (!(errors === null || errors === void 0 ? void 0 : errors.length)) {\n return false;\n }\n // v1 errors\n if ('code' in errors[0]) {\n const v1errors = errors;\n return v1errors.some(error => codes.includes(error.code));\n }\n // v2 error\n const v2error = this.data;\n return codes.includes(v2error.type);\n }\n get errors() {\n var _a;\n return (_a = this.data) === null || _a === void 0 ? void 0 : _a.errors;\n }\n get rateLimitError() {\n return this.code === 420 || this.code === 429;\n }\n get isAuthError() {\n if (this.code === 401) {\n return true;\n }\n return this.hasErrorCode(EApiV1ErrorCode.AuthTimestampInvalid, EApiV1ErrorCode.AuthenticationFail, EApiV1ErrorCode.BadAuthenticationData, EApiV1ErrorCode.InvalidOrExpiredToken);\n }\n toJSON() {\n return {\n type: this.type,\n code: this.code,\n error: this.data,\n rateLimit: this.rateLimit,\n headers: this.headers,\n };\n }\n}\nexports.ApiResponseError = ApiResponseError;\nvar EApiV1ErrorCode;\n(function (EApiV1ErrorCode) {\n // Location errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidCoordinates\"] = 3] = \"InvalidCoordinates\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoLocationFound\"] = 13] = \"NoLocationFound\";\n // Authentication failures\n EApiV1ErrorCode[EApiV1ErrorCode[\"AuthenticationFail\"] = 32] = \"AuthenticationFail\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidOrExpiredToken\"] = 89] = \"InvalidOrExpiredToken\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"UnableToVerifyCredentials\"] = 99] = \"UnableToVerifyCredentials\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"AuthTimestampInvalid\"] = 135] = \"AuthTimestampInvalid\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"BadAuthenticationData\"] = 215] = \"BadAuthenticationData\";\n // Resources not found or visible\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoUserMatch\"] = 17] = \"NoUserMatch\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"UserNotFound\"] = 50] = \"UserNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"ResourceNotFound\"] = 34] = \"ResourceNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetNotFound\"] = 144] = \"TweetNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetNotVisible\"] = 179] = \"TweetNotVisible\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NotAllowedResource\"] = 220] = \"NotAllowedResource\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"MediaIdNotFound\"] = 325] = \"MediaIdNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetNoLongerAvailable\"] = 421] = \"TweetNoLongerAvailable\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetViolatedRules\"] = 422] = \"TweetViolatedRules\";\n // Account errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"TargetUserSuspended\"] = 63] = \"TargetUserSuspended\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"YouAreSuspended\"] = 64] = \"YouAreSuspended\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"AccountUpdateFailed\"] = 120] = \"AccountUpdateFailed\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoSelfSpamReport\"] = 36] = \"NoSelfSpamReport\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoSelfMute\"] = 271] = \"NoSelfMute\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"AccountLocked\"] = 326] = \"AccountLocked\";\n // Application live errors / Twitter errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"RateLimitExceeded\"] = 88] = \"RateLimitExceeded\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoDMRightForApp\"] = 93] = \"NoDMRightForApp\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"OverCapacity\"] = 130] = \"OverCapacity\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InternalError\"] = 131] = \"InternalError\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TooManyFollowings\"] = 161] = \"TooManyFollowings\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetLimitExceeded\"] = 185] = \"TweetLimitExceeded\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"DuplicatedTweet\"] = 187] = \"DuplicatedTweet\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TooManySpamReports\"] = 205] = \"TooManySpamReports\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"RequestLooksLikeSpam\"] = 226] = \"RequestLooksLikeSpam\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoWriteRightForApp\"] = 261] = \"NoWriteRightForApp\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetActionsDisabled\"] = 425] = \"TweetActionsDisabled\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetRepliesRestricted\"] = 433] = \"TweetRepliesRestricted\";\n // Invalid request parameters\n EApiV1ErrorCode[EApiV1ErrorCode[\"NamedParameterMissing\"] = 38] = \"NamedParameterMissing\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidAttachmentUrl\"] = 44] = \"InvalidAttachmentUrl\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetTextTooLong\"] = 186] = \"TweetTextTooLong\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"MissingUrlParameter\"] = 195] = \"MissingUrlParameter\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoMultipleGifs\"] = 323] = \"NoMultipleGifs\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidMediaIds\"] = 324] = \"InvalidMediaIds\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidUrl\"] = 407] = \"InvalidUrl\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TooManyTweetAttachments\"] = 386] = \"TooManyTweetAttachments\";\n // Already sent/deleted item\n EApiV1ErrorCode[EApiV1ErrorCode[\"StatusAlreadyFavorited\"] = 139] = \"StatusAlreadyFavorited\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"FollowRequestAlreadySent\"] = 160] = \"FollowRequestAlreadySent\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"CannotUnmuteANonMutedAccount\"] = 272] = \"CannotUnmuteANonMutedAccount\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetAlreadyRetweeted\"] = 327] = \"TweetAlreadyRetweeted\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"ReplyToDeletedTweet\"] = 385] = \"ReplyToDeletedTweet\";\n // DM Errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"DMReceiverNotFollowingYou\"] = 150] = \"DMReceiverNotFollowingYou\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"UnableToSendDM\"] = 151] = \"UnableToSendDM\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"MustAllowDMFromAnyone\"] = 214] = \"MustAllowDMFromAnyone\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"CannotSendDMToThisUser\"] = 349] = \"CannotSendDMToThisUser\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"DMTextTooLong\"] = 354] = \"DMTextTooLong\";\n // Appication misconfiguration\n EApiV1ErrorCode[EApiV1ErrorCode[\"SubscriptionAlreadyExists\"] = 355] = \"SubscriptionAlreadyExists\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"CallbackUrlNotApproved\"] = 415] = \"CallbackUrlNotApproved\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"SuspendedApplication\"] = 416] = \"SuspendedApplication\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"OobOauthIsNotAllowed\"] = 417] = \"OobOauthIsNotAllowed\";\n})(EApiV1ErrorCode = exports.EApiV1ErrorCode || (exports.EApiV1ErrorCode = {}));\nvar EApiV2ErrorCode;\n(function (EApiV2ErrorCode) {\n // Request errors\n EApiV2ErrorCode[\"InvalidRequest\"] = \"https://api.twitter.com/2/problems/invalid-request\";\n EApiV2ErrorCode[\"ClientForbidden\"] = \"https://api.twitter.com/2/problems/client-forbidden\";\n EApiV2ErrorCode[\"UnsupportedAuthentication\"] = \"https://api.twitter.com/2/problems/unsupported-authentication\";\n // Stream rules errors\n EApiV2ErrorCode[\"InvalidRules\"] = \"https://api.twitter.com/2/problems/invalid-rules\";\n EApiV2ErrorCode[\"TooManyRules\"] = \"https://api.twitter.com/2/problems/rule-cap\";\n EApiV2ErrorCode[\"DuplicatedRules\"] = \"https://api.twitter.com/2/problems/duplicate-rules\";\n // Twitter errors\n EApiV2ErrorCode[\"RateLimitExceeded\"] = \"https://api.twitter.com/2/problems/usage-capped\";\n EApiV2ErrorCode[\"ConnectionError\"] = \"https://api.twitter.com/2/problems/streaming-connection\";\n EApiV2ErrorCode[\"ClientDisconnected\"] = \"https://api.twitter.com/2/problems/client-disconnected\";\n EApiV2ErrorCode[\"TwitterDisconnectedYou\"] = \"https://api.twitter.com/2/problems/operational-disconnect\";\n // Resource errors\n EApiV2ErrorCode[\"ResourceNotFound\"] = \"https://api.twitter.com/2/problems/resource-not-found\";\n EApiV2ErrorCode[\"ResourceUnauthorized\"] = \"https://api.twitter.com/2/problems/not-authorized-for-resource\";\n EApiV2ErrorCode[\"DisallowedResource\"] = \"https://api.twitter.com/2/problems/disallowed-resource\";\n})(EApiV2ErrorCode = exports.EApiV2ErrorCode || (exports.EApiV2ErrorCode = {}));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./v1\"), exports);\n__exportStar(require(\"./v2\"), exports);\n__exportStar(require(\"./errors.types\"), exports);\n__exportStar(require(\"./responses.types\"), exports);\n__exportStar(require(\"./client.types\"), exports);\n__exportStar(require(\"./auth.types\"), exports);\n__exportStar(require(\"./plugins\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiPluginResponseOverride = void 0;\nclass TwitterApiPluginResponseOverride {\n constructor(value) {\n this.value = value;\n }\n}\nexports.TwitterApiPluginResponseOverride = TwitterApiPluginResponseOverride;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client.plugins.types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EDirectMessageEventTypeV1 = void 0;\n// Creation of DMs\nvar EDirectMessageEventTypeV1;\n(function (EDirectMessageEventTypeV1) {\n EDirectMessageEventTypeV1[\"Create\"] = \"message_create\";\n EDirectMessageEventTypeV1[\"WelcomeCreate\"] = \"welcome_message\";\n})(EDirectMessageEventTypeV1 = exports.EDirectMessageEventTypeV1 || (exports.EDirectMessageEventTypeV1 = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./streaming.v1.types\"), exports);\n__exportStar(require(\"./tweet.v1.types\"), exports);\n__exportStar(require(\"./entities.v1.types\"), exports);\n__exportStar(require(\"./user.v1.types\"), exports);\n__exportStar(require(\"./dev-utilities.v1.types\"), exports);\n__exportStar(require(\"./geo.v1.types\"), exports);\n__exportStar(require(\"./trends.v1.types\"), exports);\n__exportStar(require(\"./dm.v1.types\"), exports);\n__exportStar(require(\"./list.v1.types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EUploadMimeType = void 0;\nvar EUploadMimeType;\n(function (EUploadMimeType) {\n EUploadMimeType[\"Jpeg\"] = \"image/jpeg\";\n EUploadMimeType[\"Mp4\"] = \"video/mp4\";\n EUploadMimeType[\"Gif\"] = \"image/gif\";\n EUploadMimeType[\"Png\"] = \"image/png\";\n EUploadMimeType[\"Srt\"] = \"text/plain\";\n EUploadMimeType[\"Webp\"] = \"image/webp\";\n})(EUploadMimeType = exports.EUploadMimeType || (exports.EUploadMimeType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./streaming.v2.types\"), exports);\n__exportStar(require(\"./tweet.v2.types\"), exports);\n__exportStar(require(\"./tweet.definition.v2\"), exports);\n__exportStar(require(\"./user.v2.types\"), exports);\n__exportStar(require(\"./spaces.v2.types\"), exports);\n__exportStar(require(\"./list.v2.types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\n// ---------------\n// -- Streaming --\n// ---------------\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiv1 = void 0;\nconst globals_1 = require(\"../globals\");\nconst dm_paginator_v1_1 = require(\"../paginators/dm.paginator.v1\");\nconst types_1 = require(\"../types\");\nconst client_v1_write_1 = __importDefault(require(\"./client.v1.write\"));\n/**\n * Twitter v1.1 API client with read/write/DMs rights.\n */\nclass TwitterApiv1 extends client_v1_write_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V1_1_PREFIX;\n }\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n /* Direct messages */\n // Part: Sending and receiving events\n /**\n * Publishes a new message_create event resulting in a Direct Message sent to a specified user from the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/new-event\n */\n sendDm({ recipient_id, custom_profile_id, ...params }) {\n const args = {\n event: {\n type: types_1.EDirectMessageEventTypeV1.Create,\n [types_1.EDirectMessageEventTypeV1.Create]: {\n target: { recipient_id },\n message_data: params,\n },\n },\n };\n if (custom_profile_id) {\n args.event[types_1.EDirectMessageEventTypeV1.Create].custom_profile_id = custom_profile_id;\n }\n return this.post('direct_messages/events/new.json', args, {\n forceBodyMode: 'json',\n });\n }\n /**\n * Returns a single Direct Message event by the given id.\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/get-event\n */\n getDmEvent(id) {\n return this.get('direct_messages/events/show.json', { id });\n }\n /**\n * Deletes the direct message specified in the required ID parameter.\n * The authenticating user must be the recipient of the specified direct message.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/delete-message-event\n */\n deleteDm(id) {\n return this.delete('direct_messages/events/destroy.json', { id });\n }\n /**\n * Returns all Direct Message events (both sent and received) within the last 30 days.\n * Sorted in reverse-chronological order.\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events\n */\n async listDmEvents(args = {}) {\n const queryParams = { ...args };\n const initialRq = await this.get('direct_messages/events/list.json', queryParams, { fullResponse: true });\n return new dm_paginator_v1_1.DmEventsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n // Part: Welcome messages (events)\n /**\n * Creates a new Welcome Message that will be stored and sent in the future from the authenticating user in defined circumstances.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/new-welcome-message\n */\n newWelcomeDm(name, data) {\n const args = {\n [types_1.EDirectMessageEventTypeV1.WelcomeCreate]: {\n name,\n message_data: data,\n },\n };\n return this.post('direct_messages/welcome_messages/new.json', args, {\n forceBodyMode: 'json',\n });\n }\n /**\n * Returns a Welcome Message by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/get-welcome-message\n */\n getWelcomeDm(id) {\n return this.get('direct_messages/welcome_messages/show.json', { id });\n }\n /**\n * Deletes a Welcome Message by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/delete-welcome-message\n */\n deleteWelcomeDm(id) {\n return this.delete('direct_messages/welcome_messages/destroy.json', { id });\n }\n /**\n * Updates a Welcome Message by the given ID.\n * Updates to the welcome_message object are atomic.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/update-welcome-message\n */\n updateWelcomeDm(id, data) {\n const args = { message_data: data };\n return this.put('direct_messages/welcome_messages/update.json', args, {\n forceBodyMode: 'json',\n query: { id },\n });\n }\n /**\n * Returns all Direct Message events (both sent and received) within the last 30 days.\n * Sorted in reverse-chronological order.\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events\n */\n async listWelcomeDms(args = {}) {\n const queryParams = { ...args };\n const initialRq = await this.get('direct_messages/welcome_messages/list.json', queryParams, { fullResponse: true });\n return new dm_paginator_v1_1.WelcomeDmV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n // Part: Welcome message (rules)\n /**\n * Creates a new Welcome Message Rule that determines which Welcome Message will be shown in a given conversation.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/new-welcome-message-rule\n */\n newWelcomeDmRule(welcomeMessageId) {\n return this.post('direct_messages/welcome_messages/rules/new.json', {\n welcome_message_rule: { welcome_message_id: welcomeMessageId },\n }, {\n forceBodyMode: 'json',\n });\n }\n /**\n * Returns a Welcome Message Rule by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/get-welcome-message-rule\n */\n getWelcomeDmRule(id) {\n return this.get('direct_messages/welcome_messages/rules/show.json', { id });\n }\n /**\n * Deletes a Welcome Message Rule by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/delete-welcome-message-rule\n */\n deleteWelcomeDmRule(id) {\n return this.delete('direct_messages/welcome_messages/rules/destroy.json', { id });\n }\n /**\n * Retrieves all welcome DM rules for this account.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/list-welcome-message-rules\n */\n async listWelcomeDmRules(args = {}) {\n const queryParams = { ...args };\n return this.get('direct_messages/welcome_messages/rules/list.json', queryParams);\n }\n /**\n * Set the current showed welcome message for logged account ; wrapper for Welcome DM rules.\n * Test if a rule already exists, delete if any, then create a rule for current message ID.\n *\n * If you don't have already a welcome message, create it with `.newWelcomeMessage`.\n */\n async setWelcomeDm(welcomeMessageId, deleteAssociatedWelcomeDmWhenDeletingRule = true) {\n var _a;\n const existingRules = await this.listWelcomeDmRules();\n if ((_a = existingRules.welcome_message_rules) === null || _a === void 0 ? void 0 : _a.length) {\n for (const rule of existingRules.welcome_message_rules) {\n await this.deleteWelcomeDmRule(rule.id);\n if (deleteAssociatedWelcomeDmWhenDeletingRule) {\n await this.deleteWelcomeDm(rule.welcome_message_id);\n }\n }\n }\n return this.newWelcomeDmRule(welcomeMessageId);\n }\n // Part: Read indicator\n /**\n * Marks a message as read in the recipient’s Direct Message conversation view with the sender.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-read-receipt\n */\n markDmAsRead(lastEventId, recipientId) {\n return this.post('direct_messages/mark_read.json', {\n last_read_event_id: lastEventId,\n recipient_id: recipientId,\n }, { forceBodyMode: 'url' });\n }\n /**\n * Displays a visual typing indicator in the recipient’s Direct Message conversation view with the sender.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-typing-indicator\n */\n indicateDmTyping(recipientId) {\n return this.post('direct_messages/indicate_typing.json', {\n recipient_id: recipientId,\n }, { forceBodyMode: 'url' });\n }\n // Part: Images\n /**\n * Get a single image attached to a direct message. TwitterApi client must be logged with OAuth 1.0a.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/message-attachments/guides/retrieving-media\n */\n async downloadDmImage(urlOrDm) {\n if (typeof urlOrDm !== 'string') {\n const attachment = urlOrDm[types_1.EDirectMessageEventTypeV1.Create].message_data.attachment;\n if (!attachment) {\n throw new Error('The given direct message doesn\\'t contain any attachment');\n }\n urlOrDm = attachment.media_url_https;\n }\n const data = await this.get(urlOrDm, undefined, { forceParseMode: 'buffer', prefix: '' });\n if (!data.length) {\n throw new Error('Image not found. Make sure you are logged with credentials able to access direct messages, and check the URL.');\n }\n return data;\n }\n}\nexports.TwitterApiv1 = TwitterApiv1;\nexports.default = TwitterApiv1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_subclient_1 = __importDefault(require(\"../client.subclient\"));\nconst globals_1 = require(\"../globals\");\nconst helpers_1 = require(\"../helpers\");\nconst client_v1_1 = __importDefault(require(\"../v1/client.v1\"));\nconst tweet_paginator_v1_1 = require(\"../paginators/tweet.paginator.v1\");\nconst mutes_paginator_v1_1 = require(\"../paginators/mutes.paginator.v1\");\nconst user_paginator_v1_1 = require(\"../paginators/user.paginator.v1\");\nconst list_paginator_v1_1 = require(\"../paginators/list.paginator.v1\");\n/**\n * Base Twitter v1 client with only read right.\n */\nclass TwitterApiv1ReadOnly extends client_subclient_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V1_1_PREFIX;\n }\n /* Tweets */\n /**\n * Returns a single Tweet, specified by the id parameter. The Tweet's author will also be embedded within the Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-show-id\n */\n singleTweet(tweetId, options = {}) {\n return this.get('statuses/show.json', { tweet_mode: 'extended', id: tweetId, ...options });\n }\n tweets(ids, options = {}) {\n return this.post('statuses/lookup.json', { tweet_mode: 'extended', id: ids, ...options });\n }\n /**\n * Returns a single Tweet, specified by either a Tweet web URL or the Tweet ID, in an oEmbed-compatible format.\n * The returned HTML snippet will be automatically recognized as an Embedded Tweet when Twitter's widget JavaScript is included on the page.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-oembed\n */\n oembedTweet(tweetId, options = {}) {\n return this.get('oembed', {\n url: `https://twitter.com/i/statuses/${tweetId}`,\n ...options,\n }, { prefix: 'https://publish.twitter.com/' });\n }\n /* Tweets timelines */\n /**\n * Returns a collection of the most recent Tweets and Retweets posted by the authenticating user and the users they follow.\n * The home timeline is central to how most users interact with the Twitter service.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-home_timeline\n */\n async homeTimeline(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('statuses/home_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.HomeTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the 20 most recent mentions (Tweets containing a users's @screen_name) for the authenticating user.\n * The timeline returned is the equivalent of the one seen when you view your mentions on twitter.com.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-mentions_timeline\n */\n async mentionTimeline(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('statuses/mentions_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.MentionTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a collection of the most recent Tweets posted by the user indicated by the user_id parameters.\n * User timelines belonging to protected users may only be requested when the authenticated user either \"owns\" the timeline or is an approved follower of the owner.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline\n */\n async userTimeline(userId, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n user_id: userId,\n ...options,\n };\n const initialRq = await this.get('statuses/user_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a collection of the most recent Tweets posted by the user indicated by the screen_name parameters.\n * User timelines belonging to protected users may only be requested when the authenticated user either \"owns\" the timeline or is an approved follower of the owner.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline\n */\n async userTimelineByUsername(username, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n screen_name: username,\n ...options,\n };\n const initialRq = await this.get('statuses/user_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the most recent Tweets liked by the authenticating or specified user, 20 tweets by default.\n * Note: favorites are now known as likes.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list\n */\n async favoriteTimeline(userId, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n user_id: userId,\n ...options,\n };\n const initialRq = await this.get('favorites/list.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserFavoritesV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the most recent Tweets liked by the authenticating or specified user, 20 tweets by default.\n * Note: favorites are now known as likes.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list\n */\n async favoriteTimelineByUsername(username, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n screen_name: username,\n ...options,\n };\n const initialRq = await this.get('favorites/list.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserFavoritesV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Users */\n /**\n * Returns a variety of information about the user specified by the required user_id or screen_name parameter.\n * The author's most recent Tweet will be returned inline when possible.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-show\n */\n user(user) {\n return this.get('users/show.json', { tweet_mode: 'extended', ...user });\n }\n /**\n * Returns fully-hydrated user objects for up to 100 users per request,\n * as specified by comma-separated values passed to the user_id and/or screen_name parameters.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-lookup\n */\n users(query) {\n return this.get('users/lookup.json', { tweet_mode: 'extended', ...query });\n }\n /**\n * Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful;\n * returns a 401 status code and an error message if not.\n * Use this method to test if supplied user credentials are valid.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials\n */\n verifyCredentials(options = {}) {\n return this.get('account/verify_credentials.json', options);\n }\n /**\n * Returns an array of user objects the authenticating user has muted.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-list\n */\n async listMutedUsers(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('mutes/users/list.json', queryParams, { fullResponse: true });\n return new mutes_paginator_v1_1.MuteUserListV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns an array of numeric user ids the authenticating user has muted.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-ids\n */\n async listMutedUserIds(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('mutes/users/ids.json', queryParams, { fullResponse: true });\n return new mutes_paginator_v1_1.MuteUserIdsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Provides a simple, relevance-based search interface to public user accounts on Twitter.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-search\n */\n async searchUsers(query, options = {}) {\n const queryParams = {\n q: query,\n tweet_mode: 'extended',\n page: 1,\n ...options,\n };\n const initialRq = await this.get('users/search.json', queryParams, { fullResponse: true });\n return new user_paginator_v1_1.UserSearchV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Friendship API */\n /**\n * Returns detailed information about the relationship between two arbitrary users.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show\n */\n friendship(sources) {\n return this.get('friendships/show.json', sources);\n }\n /**\n * Returns the relationships of the authenticating user to the comma-separated list of up to 100 screen_names or user_ids provided.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup\n */\n friendships(friendships) {\n return this.get('friendships/lookup.json', friendships);\n }\n /**\n * Returns a collection of user_ids that the currently authenticated user does not want to receive retweets from.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-no_retweets-ids\n */\n friendshipsNoRetweets() {\n return this.get('friendships/no_retweets/ids.json', { stringify_ids: true });\n }\n /**\n * Returns a collection of numeric IDs for every user who has a pending request to follow the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming\n */\n async friendshipsIncoming(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('friendships/incoming.json', queryParams, { fullResponse: true });\n return new user_paginator_v1_1.FriendshipsIncomingV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a collection of numeric IDs for every protected user for whom the authenticating user has a pending follow request.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-outgoing\n */\n async friendshipsOutgoing(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('friendships/outgoing.json', queryParams, { fullResponse: true });\n return new user_paginator_v1_1.FriendshipsOutgoingV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Account/user API */\n /**\n * Get current account settings for authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-settings\n */\n accountSettings() {\n return this.get('account/settings.json');\n }\n /**\n * Returns a map of the available size variations of the specified user's profile banner.\n * If the user has not uploaded a profile banner, a HTTP 404 will be served instead.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-users-profile_banner\n */\n userProfileBannerSizes(params) {\n return this.get('users/profile_banner.json', params);\n }\n /* Lists */\n /**\n * Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-show\n */\n list(options) {\n return this.get('lists/show.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Returns all lists the authenticating or specified user subscribes to, including their own.\n * If no user is given, the authenticating user is used.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-list\n */\n lists(options = {}) {\n return this.get('lists/list.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Returns the members of the specified list. Private list members will only be shown if the authenticated user owns the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members\n */\n async listMembers(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/members.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListMembersV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Check if the specified user is a member of the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show\n */\n listGetMember(options) {\n return this.get('lists/members/show.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Returns the lists the specified user has been added to.\n * If user_id or screen_name are not provided, the memberships for the authenticating user are returned.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-memberships\n */\n async listMemberships(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/memberships.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListMembershipsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the lists owned by the specified Twitter user. Private lists will only be shown if the authenticated user is also the owner of the lists.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-ownerships\n */\n async listOwnerships(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/ownerships.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListOwnershipsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a timeline of tweets authored by members of the specified list. Retweets are included by default.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses\n */\n async listStatuses(options) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/statuses.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.ListTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the subscribers of the specified list. Private list subscribers will only be shown if the authenticated user owns the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers\n */\n async listSubscribers(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/subscribers.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListSubscribersV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Check if the specified user is a subscriber of the specified list. Returns the user if they are a subscriber.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers-show\n */\n listGetSubscriber(options) {\n return this.get('lists/subscribers/show.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Obtain a collection of the lists the specified user is subscribed to, 20 lists per page by default.\n * Does not include the user's own lists.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscriptions\n */\n async listSubscriptions(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/subscriptions.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListSubscriptionsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Media upload API */\n /**\n * The STATUS command (this method) is used to periodically poll for updates of media processing operation.\n * After the STATUS command response returns succeeded, you can move on to the next step which is usually create Tweet with media_id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/get-media-upload-status\n */\n mediaInfo(mediaId) {\n return this.get('media/upload.json', {\n command: 'STATUS',\n media_id: mediaId,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n }\n filterStream({ autoConnect, ...params } = {}) {\n const parameters = {};\n for (const [key, value] of Object.entries(params)) {\n if (key === 'follow' || key === 'track') {\n parameters[key] = value.toString();\n }\n else if (key === 'locations') {\n const locations = value;\n parameters.locations = (0, helpers_1.arrayWrap)(locations).map(loc => `${loc.lng},${loc.lat}`).join(',');\n }\n else {\n parameters[key] = value;\n }\n }\n const streamClient = this.stream;\n return streamClient.postStream('statuses/filter.json', parameters, { autoConnect });\n }\n sampleStream({ autoConnect, ...params } = {}) {\n const streamClient = this.stream;\n return streamClient.getStream('statuses/sample.json', params, { autoConnect });\n }\n /**\n * Create a client that is prefixed with `https//stream.twitter.com` instead of classic API URL.\n */\n get stream() {\n const copiedClient = new client_v1_1.default(this);\n copiedClient.setPrefix(globals_1.API_V1_1_STREAM_PREFIX);\n return copiedClient;\n }\n /* Trends API */\n /**\n * Returns the top 50 trending topics for a specific id, if trending information is available for it.\n * Note: The id parameter for this endpoint is the \"where on earth identifier\" or WOEID, which is a legacy identifier created by Yahoo and has been deprecated.\n * https://developer.twitter.com/en/docs/twitter-api/v1/trends/trends-for-location/api-reference/get-trends-place\n */\n trendsByPlace(woeId, options = {}) {\n return this.get('trends/place.json', { id: woeId, ...options });\n }\n /**\n * Returns the locations that Twitter has trending topic information for.\n * The response is an array of \"locations\" that encode the location's WOEID\n * and some other human-readable information such as a canonical name and country the location belongs in.\n * https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-available\n */\n trendsAvailable() {\n return this.get('trends/available.json');\n }\n /**\n * Returns the locations that Twitter has trending topic information for, closest to a specified location.\n * https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-closest\n */\n trendsClosest(lat, long) {\n return this.get('trends/closest.json', { lat, long });\n }\n /* Geo API */\n /**\n * Returns all the information about a known place.\n * https://developer.twitter.com/en/docs/twitter-api/v1/geo/place-information/api-reference/get-geo-id-place_id\n */\n geoPlace(placeId) {\n return this.get('geo/id/:place_id.json', undefined, { params: { place_id: placeId } });\n }\n /**\n * Search for places that can be attached to a Tweet via POST statuses/update.\n * This request will return a list of all the valid places that can be used as the place_id when updating a status.\n * https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-search\n */\n geoSearch(options) {\n return this.get('geo/search.json', options);\n }\n /**\n * Given a latitude and a longitude, searches for up to 20 places that can be used as a place_id when updating a status.\n * This request is an informative call and will deliver generalized results about geography.\n * https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-reverse_geocode\n */\n geoReverseGeoCode(options) {\n return this.get('geo/reverse_geocode.json', options);\n }\n /* Developer utilities */\n /**\n * Returns the current rate limits for methods belonging to the specified resource families.\n * Each API resource belongs to a \"resource family\" which is indicated in its method documentation.\n * The method's resource family can be determined from the first component of the path after the resource version.\n * https://developer.twitter.com/en/docs/twitter-api/v1/developer-utilities/rate-limit-status/api-reference/get-application-rate_limit_status\n */\n rateLimitStatuses(...resources) {\n return this.get('application/rate_limit_status.json', { resources });\n }\n /**\n * Returns the list of languages supported by Twitter along with the language code supported by Twitter.\n * https://developer.twitter.com/en/docs/twitter-api/v1/developer-utilities/supported-languages/api-reference/get-help-languages\n */\n supportedLanguages() {\n return this.get('help/languages.json');\n }\n}\nexports.default = TwitterApiv1ReadOnly;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst globals_1 = require(\"../globals\");\nconst client_v1_read_1 = __importDefault(require(\"./client.v1.read\"));\nconst types_1 = require(\"../types\");\nconst fs = __importStar(require(\"fs\"));\nconst media_helpers_v1_1 = require(\"./media-helpers.v1\");\nconst helpers_1 = require(\"../helpers\");\nconst UPLOAD_ENDPOINT = 'media/upload.json';\n/**\n * Base Twitter v1 client with read/write rights.\n */\nclass TwitterApiv1ReadWrite extends client_v1_read_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V1_1_PREFIX;\n }\n /**\n * Get a client with only read rights.\n */\n get readOnly() {\n return this;\n }\n /* Tweet API */\n /**\n * Post a new tweet.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n tweet(status, payload = {}) {\n const queryParams = {\n status,\n tweet_mode: 'extended',\n ...payload,\n };\n return this.post('statuses/update.json', queryParams);\n }\n /**\n * Quote an existing tweet.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n async quote(status, quotingStatusId, payload = {}) {\n const url = 'https://twitter.com/i/statuses/' + quotingStatusId;\n return this.tweet(status, { ...payload, attachment_url: url });\n }\n /**\n * Post a series of tweets.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n async tweetThread(tweets) {\n const postedTweets = [];\n for (const tweet of tweets) {\n // Retrieve the last sent tweet\n const lastTweet = postedTweets.length ? postedTweets[postedTweets.length - 1] : null;\n // Build the tweet query params\n const queryParams = { ...(typeof tweet === 'string' ? ({ status: tweet }) : tweet) };\n // Reply to an existing tweet if needed\n const inReplyToId = lastTweet ? lastTweet.id_str : queryParams.in_reply_to_status_id;\n const status = queryParams.status;\n if (inReplyToId) {\n postedTweets.push(await this.reply(status, inReplyToId, queryParams));\n }\n else {\n postedTweets.push(await this.tweet(status, queryParams));\n }\n }\n return postedTweets;\n }\n /**\n * Reply to an existing tweet. Shortcut to `.tweet` with tweaked parameters.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n reply(status, in_reply_to_status_id, payload = {}) {\n return this.tweet(status, {\n auto_populate_reply_metadata: true,\n in_reply_to_status_id,\n ...payload,\n });\n }\n /**\n * Delete an existing tweet belonging to you.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-destroy-id\n */\n deleteTweet(tweetId) {\n return this.post('statuses/destroy/:id.json', { tweet_mode: 'extended' }, { params: { id: tweetId } });\n }\n /* User API */\n /**\n * Report the specified user as a spam account to Twitter.\n * Additionally, optionally performs the equivalent of POST blocks/create on behalf of the authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-users-report_spam\n */\n reportUserAsSpam(options) {\n return this.post('users/report_spam.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Turn on/off Retweets and device notifications from the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update\n */\n updateFriendship(options) {\n return this.post('friendships/update.json', options);\n }\n /* Account API */\n /**\n * Update current account settings for authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-settings\n */\n updateAccountSettings(options) {\n return this.post('account/settings.json', options);\n }\n /**\n * Sets some values that users are able to set under the \"Account\" tab of their settings page.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile\n */\n updateAccountProfile(options) {\n return this.post('account/update_profile.json', options);\n }\n /**\n * Uploads a profile banner on behalf of the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_banner\n */\n async updateAccountProfileBanner(file, options = {}) {\n const queryParams = {\n banner: await (0, media_helpers_v1_1.readFileIntoBuffer)(file),\n ...options,\n };\n return this.post('account/update_profile_banner.json', queryParams, { forceBodyMode: 'form-data' });\n }\n /**\n * Updates the authenticating user's profile image.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_image\n */\n async updateAccountProfileImage(file, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n image: await (0, media_helpers_v1_1.readFileIntoBuffer)(file),\n ...options,\n };\n return this.post('account/update_profile_image.json', queryParams, { forceBodyMode: 'form-data' });\n }\n /**\n * Removes the uploaded profile banner for the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner\n */\n removeAccountProfileBanner() {\n return this.post('account/remove_profile_banner.json');\n }\n /* Lists */\n /**\n * Creates a new list for the authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-create\n */\n createList(options) {\n return this.post('lists/create.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Updates the specified list. The authenticated user must own the list to be able to update it.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-update\n */\n updateList(options) {\n return this.post('lists/update.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Deletes the specified list. The authenticated user must own the list to be able to destroy it.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy\n */\n removeList(options) {\n return this.post('lists/destroy.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Adds multiple members to a list, by specifying a comma-separated list of member ids or screen names.\n * If you add a single `user_id` or `screen_name`, it will target `lists/members/create.json`, otherwise\n * it will target `lists/members/create_all.json`.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all\n */\n addListMembers(options) {\n const hasMultiple = (options.user_id && (0, helpers_1.hasMultipleItems)(options.user_id)) || (options.screen_name && (0, helpers_1.hasMultipleItems)(options.screen_name));\n const endpoint = hasMultiple ? 'lists/members/create_all.json' : 'lists/members/create.json';\n return this.post(endpoint, options);\n }\n /**\n * Removes multiple members to a list, by specifying a comma-separated list of member ids or screen names.\n * If you add a single `user_id` or `screen_name`, it will target `lists/members/destroy.json`, otherwise\n * it will target `lists/members/destroy_all.json`.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all\n */\n removeListMembers(options) {\n const hasMultiple = (options.user_id && (0, helpers_1.hasMultipleItems)(options.user_id)) || (options.screen_name && (0, helpers_1.hasMultipleItems)(options.screen_name));\n const endpoint = hasMultiple ? 'lists/members/destroy_all.json' : 'lists/members/destroy.json';\n return this.post(endpoint, options);\n }\n /**\n * Subscribes the authenticated user to the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-create\n */\n subscribeToList(options) {\n return this.post('lists/subscribers/create.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Unsubscribes the authenticated user of the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-destroy\n */\n unsubscribeOfList(options) {\n return this.post('lists/subscribers/destroy.json', { tweet_mode: 'extended', ...options });\n }\n /* Media upload API */\n /**\n * This endpoint can be used to provide additional information about the uploaded media_id.\n * This feature is currently only supported for images and GIFs.\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-metadata-create\n */\n createMediaMetadata(mediaId, metadata) {\n return this.post('media/metadata/create.json', { media_id: mediaId, ...metadata }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX, forceBodyMode: 'json' });\n }\n /**\n * Use this endpoint to associate uploaded subtitles to an uploaded video. You can associate subtitles to video before or after Tweeting.\n * **To obtain subtitle media ID, you must upload each subtitle file separately using `.uploadMedia()` method.**\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-create\n */\n createMediaSubtitles(mediaId, subtitles) {\n return this.post('media/subtitles/create.json', { media_id: mediaId, media_category: 'TweetVideo', subtitle_info: { subtitles } }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX, forceBodyMode: 'json' });\n }\n /**\n * Use this endpoint to dissociate subtitles from a video and delete the subtitles. You can dissociate subtitles from a video before or after Tweeting.\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-delete\n */\n deleteMediaSubtitles(mediaId, ...languages) {\n return this.post('media/subtitles/delete.json', {\n media_id: mediaId,\n media_category: 'TweetVideo',\n subtitle_info: { subtitles: languages.map(lang => ({ language_code: lang })) },\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX, forceBodyMode: 'json' });\n }\n /**\n * Upload a media (JPG/PNG/GIF/MP4/WEBP) or subtitle (SRT) to Twitter and return the media_id to use in tweet/DM send.\n *\n * @param file If `string`, filename is supposed.\n * A `Buffer` is a raw file.\n * `fs.promises.FileHandle` or `number` are file pointers.\n *\n * @param options.type File type (Enum 'jpg' | 'longmp4' | 'mp4' | 'png' | 'gif' | 'srt' | 'webp').\n * If filename is given, it could be guessed with file extension, otherwise this parameter is mandatory.\n * If type is not part of the enum, it will be used as mime type.\n *\n * Type `longmp4` is **required** is you try to upload a video higher than 140 seconds.\n *\n * @param options.chunkLength Maximum chunk length sent to Twitter. Default goes to 1 MB.\n *\n * @param options.additionalOwners Other user IDs allowed to use the returned media_id. Default goes to none.\n *\n * @param options.maxConcurrentUploads Maximum uploaded chunks in the same time. Default goes to 3.\n *\n * @param options.target Target type `tweet` or `dm`. Defaults to `tweet`.\n * You must specify it if you send a media to use in DMs.\n */\n async uploadMedia(file, options = {}) {\n var _a;\n const chunkLength = (_a = options.chunkLength) !== null && _a !== void 0 ? _a : (1024 * 1024);\n const { fileHandle, mediaCategory, fileSize, mimeType } = await this.getUploadMediaRequirements(file, options);\n // Get the file handle (if not buffer)\n try {\n // Finally! We can send INIT message.\n const mediaData = await this.post(UPLOAD_ENDPOINT, {\n command: 'INIT',\n total_bytes: fileSize,\n media_type: mimeType,\n media_category: mediaCategory,\n additional_owners: options.additionalOwners,\n shared: options.shared ? true : undefined,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n // Upload the media chunk by chunk\n await this.mediaChunkedUpload(fileHandle, chunkLength, mediaData.media_id_string, options.maxConcurrentUploads);\n // Finalize media\n const fullMediaData = await this.post(UPLOAD_ENDPOINT, {\n command: 'FINALIZE',\n media_id: mediaData.media_id_string,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n if (fullMediaData.processing_info && fullMediaData.processing_info.state !== 'succeeded') {\n // Must wait if video is still computed\n await this.awaitForMediaProcessingCompletion(fullMediaData);\n }\n // Video is ready, return media_id\n return fullMediaData.media_id_string;\n }\n finally {\n // Close file if any\n if (typeof file === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n fs.close(file, () => { });\n }\n else if (typeof fileHandle === 'object' && !(fileHandle instanceof Buffer)) {\n fileHandle.close();\n }\n }\n }\n async awaitForMediaProcessingCompletion(fullMediaData) {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n fullMediaData = await this.mediaInfo(fullMediaData.media_id_string);\n const { processing_info } = fullMediaData;\n if (!processing_info || processing_info.state === 'succeeded') {\n // Ok, completed!\n return;\n }\n if (processing_info.state === 'failed') {\n if (processing_info.error) {\n const { name, message } = processing_info.error;\n throw new Error(`Failed to process media: ${name} - ${message}.`);\n }\n throw new Error('Failed to process the media.');\n }\n if (processing_info.check_after_secs) {\n // Await for given seconds\n await (0, media_helpers_v1_1.sleepSecs)(processing_info.check_after_secs);\n }\n else {\n // No info; Await for 5 seconds\n await (0, media_helpers_v1_1.sleepSecs)(5);\n }\n }\n }\n async getUploadMediaRequirements(file, { mimeType, type, target, longVideo } = {}) {\n // Get the file handle (if not buffer)\n let fileHandle;\n try {\n fileHandle = await (0, media_helpers_v1_1.getFileHandle)(file);\n // Get the mimetype\n const realMimeType = (0, media_helpers_v1_1.getMimeType)(file, type, mimeType);\n // Get the media category\n let mediaCategory;\n // If explicit longmp4 OR explicit MIME type and not DM target\n if (realMimeType === types_1.EUploadMimeType.Mp4 && ((!mimeType && !type && target !== 'dm') || longVideo)) {\n mediaCategory = 'amplify_video';\n }\n else {\n mediaCategory = (0, media_helpers_v1_1.getMediaCategoryByMime)(realMimeType, target !== null && target !== void 0 ? target : 'tweet');\n }\n return {\n fileHandle,\n mediaCategory,\n fileSize: await (0, media_helpers_v1_1.getFileSizeFromFileHandle)(fileHandle),\n mimeType: realMimeType,\n };\n }\n catch (e) {\n // Close file if any\n if (typeof file === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n fs.close(file, () => { });\n }\n else if (typeof fileHandle === 'object' && !(fileHandle instanceof Buffer)) {\n fileHandle.close();\n }\n throw e;\n }\n }\n async mediaChunkedUpload(fileHandle, chunkLength, mediaId, maxConcurrentUploads = 3) {\n // Send chunk by chunk\n let chunkIndex = 0;\n if (maxConcurrentUploads < 1) {\n throw new RangeError('Bad maxConcurrentUploads parameter.');\n }\n // Creating a buffer for doing file stuff (if we don't have one)\n const buffer = fileHandle instanceof Buffer ? undefined : Buffer.alloc(chunkLength);\n // Sliced/filled buffer returned for each part\n let readBuffer;\n // Needed to know when we should stop reading the file\n let nread;\n // Needed to use the buffer object (file handles always \"remembers\" file position)\n let offset = 0;\n [readBuffer, nread] = await (0, media_helpers_v1_1.readNextPartOf)(fileHandle, chunkLength, offset, buffer);\n offset += nread;\n // Handle max concurrent uploads\n const currentUploads = new Set();\n // Read buffer until file is completely read\n while (nread) {\n const mediaBufferPart = readBuffer.slice(0, nread);\n // Sent part if part has something inside\n if (mediaBufferPart.length) {\n const request = this.post(UPLOAD_ENDPOINT, {\n command: 'APPEND',\n media_id: mediaId,\n segment_index: chunkIndex,\n media: mediaBufferPart,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n currentUploads.add(request);\n request.then(() => {\n currentUploads.delete(request);\n });\n chunkIndex++;\n }\n if (currentUploads.size >= maxConcurrentUploads) {\n // Await for first promise to be finished\n await Promise.race(currentUploads);\n }\n [readBuffer, nread] = await (0, media_helpers_v1_1.readNextPartOf)(fileHandle, chunkLength, offset, buffer);\n offset += nread;\n }\n await Promise.all([...currentUploads]);\n }\n}\nexports.default = TwitterApiv1ReadWrite;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readNextPartOf = exports.sleepSecs = exports.getMediaCategoryByMime = exports.getMimeType = exports.getFileSizeFromFileHandle = exports.getFileHandle = exports.readFileIntoBuffer = void 0;\nconst fs = __importStar(require(\"fs\"));\nconst helpers_1 = require(\"../helpers\");\nconst types_1 = require(\"../types\");\nasync function readFileIntoBuffer(file) {\n const handle = await getFileHandle(file);\n if (typeof handle === 'number') {\n return new Promise((resolve, reject) => {\n fs.readFile(handle, (err, data) => {\n if (err) {\n return reject(err);\n }\n resolve(data);\n });\n });\n }\n else if (handle instanceof Buffer) {\n return handle;\n }\n else {\n return handle.readFile();\n }\n}\nexports.readFileIntoBuffer = readFileIntoBuffer;\nfunction getFileHandle(file) {\n if (typeof file === 'string') {\n return fs.promises.open(file, 'r');\n }\n else if (typeof file === 'number') {\n return file;\n }\n else if (typeof file === 'object' && !(file instanceof Buffer)) {\n return file;\n }\n else if (!(file instanceof Buffer)) {\n throw new Error('Given file is not valid, please check its type.');\n }\n else {\n return file;\n }\n}\nexports.getFileHandle = getFileHandle;\nasync function getFileSizeFromFileHandle(fileHandle) {\n // Get the file size\n if (typeof fileHandle === 'number') {\n const stats = await new Promise((resolve, reject) => {\n fs.fstat(fileHandle, (err, stats) => {\n if (err)\n reject(err);\n resolve(stats);\n });\n });\n return stats.size;\n }\n else if (fileHandle instanceof Buffer) {\n return fileHandle.length;\n }\n else {\n return (await fileHandle.stat()).size;\n }\n}\nexports.getFileSizeFromFileHandle = getFileSizeFromFileHandle;\nfunction getMimeType(file, type, mimeType) {\n if (typeof mimeType === 'string') {\n return mimeType;\n }\n else if (typeof file === 'string' && !type) {\n return getMimeByName(file);\n }\n else if (typeof type === 'string') {\n return getMimeByType(type);\n }\n throw new Error('You must specify type if file is a file handle or Buffer.');\n}\nexports.getMimeType = getMimeType;\nfunction getMimeByName(name) {\n if (name.endsWith('.jpeg') || name.endsWith('.jpg'))\n return types_1.EUploadMimeType.Jpeg;\n if (name.endsWith('.png'))\n return types_1.EUploadMimeType.Png;\n if (name.endsWith('.webp'))\n return types_1.EUploadMimeType.Webp;\n if (name.endsWith('.gif'))\n return types_1.EUploadMimeType.Gif;\n if (name.endsWith('.mpeg4') || name.endsWith('.mp4'))\n return types_1.EUploadMimeType.Mp4;\n if (name.endsWith('.srt'))\n return types_1.EUploadMimeType.Srt;\n (0, helpers_1.safeDeprecationWarning)({\n instance: 'TwitterApiv1ReadWrite',\n method: 'uploadMedia',\n problem: `options.mimeType is missing and filename couldn't help to resolve MIME type, so it will fallback to image/jpeg`,\n resolution: `If you except to give filenames without extensions, please specify explicitlty the MIME type using options.mimeType`,\n });\n return types_1.EUploadMimeType.Jpeg;\n}\nfunction getMimeByType(type) {\n (0, helpers_1.safeDeprecationWarning)({\n instance: 'TwitterApiv1ReadWrite',\n method: 'uploadMedia',\n problem: `you're using options.type`,\n resolution: `Remove options.type argument and migrate to options.mimeType which takes the real MIME type. ` +\n `If you're using type=longmp4, add options.longVideo alongside of mimeType=EUploadMimeType.Mp4`,\n });\n if (type === 'gif')\n return types_1.EUploadMimeType.Gif;\n if (type === 'jpg')\n return types_1.EUploadMimeType.Jpeg;\n if (type === 'png')\n return types_1.EUploadMimeType.Png;\n if (type === 'webp')\n return types_1.EUploadMimeType.Webp;\n if (type === 'srt')\n return types_1.EUploadMimeType.Srt;\n if (type === 'mp4' || type === 'longmp4')\n return types_1.EUploadMimeType.Mp4;\n return type;\n}\nfunction getMediaCategoryByMime(name, target) {\n if (name === types_1.EUploadMimeType.Mp4)\n return target === 'tweet' ? 'TweetVideo' : 'DmVideo';\n if (name === types_1.EUploadMimeType.Gif)\n return target === 'tweet' ? 'TweetGif' : 'DmGif';\n if (name === types_1.EUploadMimeType.Srt)\n return 'Subtitles';\n else\n return target === 'tweet' ? 'TweetImage' : 'DmImage';\n}\nexports.getMediaCategoryByMime = getMediaCategoryByMime;\nfunction sleepSecs(seconds) {\n return new Promise(resolve => setTimeout(resolve, seconds * 1000));\n}\nexports.sleepSecs = sleepSecs;\nasync function readNextPartOf(file, chunkLength, bufferOffset = 0, buffer) {\n if (file instanceof Buffer) {\n const rt = file.slice(bufferOffset, bufferOffset + chunkLength);\n return [rt, rt.length];\n }\n if (!buffer) {\n throw new Error('Well, we will need a buffer to store file content.');\n }\n let bytesRead;\n if (typeof file === 'number') {\n bytesRead = await new Promise((resolve, reject) => {\n fs.read(file, buffer, 0, chunkLength, bufferOffset, (err, nread) => {\n if (err)\n reject(err);\n resolve(nread);\n });\n });\n }\n else {\n const res = await file.read(buffer, 0, chunkLength, bufferOffset);\n bytesRead = res.bytesRead;\n }\n return [buffer, bytesRead];\n}\nexports.readNextPartOf = readNextPartOf;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiv2Labs = void 0;\nconst globals_1 = require(\"../globals\");\nconst client_v2_labs_write_1 = __importDefault(require(\"./client.v2.labs.write\"));\n/**\n * Twitter v2 labs client with all rights (read/write/DMs)\n */\nclass TwitterApiv2Labs extends client_v2_labs_write_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_LABS_PREFIX;\n }\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n}\nexports.TwitterApiv2Labs = TwitterApiv2Labs;\nexports.default = TwitterApiv2Labs;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_subclient_1 = __importDefault(require(\"../client.subclient\"));\nconst globals_1 = require(\"../globals\");\n/**\n * Base Twitter v2 labs client with only read right.\n */\nclass TwitterApiv2LabsReadOnly extends client_subclient_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_LABS_PREFIX;\n }\n}\nexports.default = TwitterApiv2LabsReadOnly;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst globals_1 = require(\"../globals\");\nconst client_v2_labs_read_1 = __importDefault(require(\"./client.v2.labs.read\"));\n/**\n * Base Twitter v2 labs client with read/write rights.\n */\nclass TwitterApiv2LabsReadWrite extends client_v2_labs_read_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_LABS_PREFIX;\n }\n /**\n * Get a client with only read rights.\n */\n get readOnly() {\n return this;\n }\n}\nexports.default = TwitterApiv2LabsReadWrite;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiv2 = void 0;\nconst globals_1 = require(\"../globals\");\nconst client_v2_write_1 = __importDefault(require(\"./client.v2.write\"));\nconst client_v2_labs_1 = __importDefault(require(\"../v2-labs/client.v2.labs\"));\n/**\n * Twitter v2 client with all rights (read/write/DMs)\n */\nclass TwitterApiv2 extends client_v2_write_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_PREFIX;\n }\n /* Sub-clients */\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n /**\n * Get a client for v2 labs endpoints.\n */\n get labs() {\n if (this._labs)\n return this._labs;\n return this._labs = new client_v2_labs_1.default(this);\n }\n}\nexports.TwitterApiv2 = TwitterApiv2;\nexports.default = TwitterApiv2;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_subclient_1 = __importDefault(require(\"../client.subclient\"));\nconst globals_1 = require(\"../globals\");\nconst paginators_1 = require(\"../paginators\");\nconst client_v2_labs_read_1 = __importDefault(require(\"../v2-labs/client.v2.labs.read\"));\nconst user_paginator_v2_1 = require(\"../paginators/user.paginator.v2\");\nconst helpers_1 = require(\"../helpers\");\n/**\n * Base Twitter v2 client with only read right.\n */\nclass TwitterApiv2ReadOnly extends client_subclient_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_PREFIX;\n }\n /* Sub-clients */\n /**\n * Get a client for v2 labs endpoints.\n */\n get labs() {\n if (this._labs)\n return this._labs;\n return this._labs = new client_v2_labs_read_1.default(this);\n }\n async search(queryOrOptions, options = {}) {\n const query = typeof queryOrOptions === 'string' ? queryOrOptions : undefined;\n const realOptions = typeof queryOrOptions === 'object' && queryOrOptions !== null ? queryOrOptions : options;\n const queryParams = { ...realOptions, query };\n const initialRq = await this.get('tweets/search/recent', queryParams, { fullResponse: true });\n return new paginators_1.TweetSearchRecentV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * The full-archive search endpoint returns the complete history of public Tweets matching a search query;\n * since the first Tweet was created March 26, 2006.\n *\n * This endpoint is only available to those users who have been approved for the Academic Research product track.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-all\n */\n async searchAll(query, options = {}) {\n const queryParams = { ...options, query };\n const initialRq = await this.get('tweets/search/all', queryParams, { fullResponse: true });\n return new paginators_1.TweetSearchAllV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a variety of information about a single Tweet specified by the requested ID.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets-id\n *\n * OAuth2 scope: `users.read`, `tweet.read`\n */\n singleTweet(tweetId, options = {}) {\n return this.get('tweets/:id', options, { params: { id: tweetId } });\n }\n /**\n * Returns a variety of information about tweets specified by list of IDs.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets\n *\n * OAuth2 scope: `users.read`, `tweet.read`\n */\n tweets(tweetIds, options = {}) {\n return this.get('tweets', { ids: tweetIds, ...options });\n }\n /**\n * The recent Tweet counts endpoint returns count of Tweets from the last seven days that match a search query.\n * OAuth2 Bearer auth only.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-recent\n */\n tweetCountRecent(query, options = {}) {\n return this.get('tweets/counts/recent', { query, ...options });\n }\n /**\n * This endpoint is only available to those users who have been approved for the Academic Research product track.\n * The full-archive search endpoint returns the complete history of public Tweets matching a search query;\n * since the first Tweet was created March 26, 2006.\n * OAuth2 Bearer auth only.\n * **This endpoint has pagination, yet it is not supported by bundled paginators. Use `next_token` to fetch next page.**\n * https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-all\n */\n tweetCountAll(query, options = {}) {\n return this.get('tweets/counts/all', { query, ...options });\n }\n async tweetRetweetedBy(tweetId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const initialRq = await this.get('tweets/:id/retweeted_by', parameters, {\n fullResponse: true,\n params: { id: tweetId },\n });\n if (!asPaginator) {\n return initialRq.data;\n }\n return new user_paginator_v2_1.TweetRetweetersUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: { id: tweetId },\n });\n }\n async tweetLikedBy(tweetId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const initialRq = await this.get('tweets/:id/liking_users', parameters, {\n fullResponse: true,\n params: { id: tweetId },\n });\n if (!asPaginator) {\n return initialRq.data;\n }\n return new user_paginator_v2_1.TweetLikingUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: { id: tweetId },\n });\n }\n /**\n * Allows you to retrieve a collection of the most recent Tweets and Retweets posted by you and users you follow, also known as home timeline.\n * This endpoint returns up to the last 3200 Tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-reverse-chronological\n *\n * OAuth 2 scopes: `tweet.read` `users.read`\n */\n async homeTimeline(options = {}) {\n const meUser = await this.getCurrentUserV2Object();\n const initialRq = await this.get('users/:id/timelines/reverse_chronological', options, {\n fullResponse: true,\n params: { id: meUser.data.id },\n });\n return new paginators_1.TweetHomeTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: meUser.data.id },\n });\n }\n /**\n * Returns Tweets composed by a single user, specified by the requested user ID.\n * By default, the most recent ten Tweets are returned per request.\n * Using pagination, the most recent 3,200 Tweets can be retrieved.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-tweets\n */\n async userTimeline(userId, options = {}) {\n const initialRq = await this.get('users/:id/tweets', options, {\n fullResponse: true,\n params: { id: userId },\n });\n return new paginators_1.TweetUserTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: userId },\n });\n }\n /**\n * Returns Tweets mentioning a single user specified by the requested user ID.\n * By default, the most recent ten Tweets are returned per request.\n * Using pagination, up to the most recent 800 Tweets can be retrieved.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-mentions\n */\n async userMentionTimeline(userId, options = {}) {\n const initialRq = await this.get('users/:id/mentions', options, {\n fullResponse: true,\n params: { id: userId },\n });\n return new paginators_1.TweetUserMentionTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: userId },\n });\n }\n /**\n * Returns Quote Tweets for a Tweet specified by the requested Tweet ID.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/quote-tweets/api-reference/get-tweets-id-quote_tweets\n *\n * OAuth2 scopes: `users.read` `tweet.read`\n */\n async quotes(tweetId, options = {}) {\n const initialRq = await this.get('tweets/:id/quote_tweets', options, {\n fullResponse: true,\n params: { id: tweetId },\n });\n return new paginators_1.QuotedTweetsTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: tweetId },\n });\n }\n /* Bookmarks */\n /**\n * Allows you to get information about a authenticated user’s 800 most recent bookmarked Tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/get-users-id-bookmarks\n *\n * OAuth2 scopes: `users.read` `tweet.read` `bookmark.read`\n */\n async bookmarks(options = {}) {\n const user = await this.getCurrentUserV2Object();\n const initialRq = await this.get('users/:id/bookmarks', options, {\n fullResponse: true,\n params: { id: user.data.id },\n });\n return new paginators_1.TweetBookmarksTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: user.data.id },\n });\n }\n /* Users */\n /**\n * Returns information about an authorized user.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me\n *\n * OAuth2 scopes: `tweet.read` & `users.read`\n */\n me(options = {}) {\n return this.get('users/me', options);\n }\n /**\n * Returns a variety of information about a single user specified by the requested ID.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-id\n */\n user(userId, options = {}) {\n return this.get('users/:id', options, { params: { id: userId } });\n }\n /**\n * Returns a variety of information about one or more users specified by the requested IDs.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users\n */\n users(userIds, options = {}) {\n const ids = Array.isArray(userIds) ? userIds.join(',') : userIds;\n return this.get('users', { ...options, ids });\n }\n /**\n * Returns a variety of information about a single user specified by their username.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by-username-username\n */\n userByUsername(username, options = {}) {\n return this.get('users/by/username/:username', options, { params: { username } });\n }\n /**\n * Returns a variety of information about one or more users specified by their usernames.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by\n *\n * OAuth2 scope: `users.read`, `tweet.read`\n */\n usersByUsernames(usernames, options = {}) {\n usernames = Array.isArray(usernames) ? usernames.join(',') : usernames;\n return this.get('users/by', { ...options, usernames });\n }\n async followers(userId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const params = { id: userId };\n if (!asPaginator) {\n return this.get('users/:id/followers', parameters, { params });\n }\n const initialRq = await this.get('users/:id/followers', parameters, { fullResponse: true, params });\n return new user_paginator_v2_1.UserFollowersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: params,\n });\n }\n async following(userId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const params = { id: userId };\n if (!asPaginator) {\n return this.get('users/:id/following', parameters, { params });\n }\n const initialRq = await this.get('users/:id/following', parameters, { fullResponse: true, params });\n return new user_paginator_v2_1.UserFollowingV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: params,\n });\n }\n /**\n * Allows you to get information about a user’s liked Tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/get-users-id-liked_tweets\n */\n async userLikedTweets(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/liked_tweets', options, { fullResponse: true, params });\n return new paginators_1.TweetV2UserLikedTweetsPaginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are blocked by the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/get-users-blocking\n */\n async userBlockingUsers(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/blocking', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserBlockingUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are muted by the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/get-users-muting\n */\n async userMutingUsers(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/muting', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserMutingUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /* Lists */\n /**\n * Returns the details of a specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-lists-id\n */\n list(id, options = {}) {\n return this.get('lists/:id', options, { params: { id } });\n }\n /**\n * Returns all Lists owned by the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-users-id-owned_lists\n */\n async listsOwned(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/owned_lists', options, { fullResponse: true, params });\n return new paginators_1.UserOwnedListsV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns all Lists a specified user is a member of.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-users-id-list_memberships\n */\n async listMemberships(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/list_memberships', options, { fullResponse: true, params });\n return new paginators_1.UserListMembershipsV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns all Lists a specified user follows.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-users-id-followed_lists\n */\n async listFollowed(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/followed_lists', options, { fullResponse: true, params });\n return new paginators_1.UserListFollowedV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of Tweets from the specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-tweets/api-reference/get-lists-id-tweets\n */\n async listTweets(listId, options = {}) {\n const params = { id: listId };\n const initialRq = await this.get('lists/:id/tweets', options, { fullResponse: true, params });\n return new paginators_1.TweetV2ListTweetsPaginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are members of the specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-lists-id-members\n */\n async listMembers(listId, options = {}) {\n const params = { id: listId };\n const initialRq = await this.get('lists/:id/members', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserListMembersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are followers of the specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-lists-id-followers\n */\n async listFollowers(listId, options = {}) {\n const params = { id: listId };\n const initialRq = await this.get('lists/:id/followers', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserListFollowersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /* Spaces */\n /**\n * Get a single space by ID.\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n space(spaceId, options = {}) {\n return this.get('spaces/:id', options, { params: { id: spaceId } });\n }\n /**\n * Get spaces using their IDs.\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n spaces(spaceIds, options = {}) {\n return this.get('spaces', { ids: spaceIds, ...options });\n }\n /**\n * Get spaces using their creator user ID(s). (no pagination available)\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-by-creator-ids\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n spacesByCreators(creatorIds, options = {}) {\n return this.get('spaces/by/creator_ids', { user_ids: creatorIds, ...options });\n }\n /**\n * Search through spaces using multiple params. (no pagination available)\n * https://developer.twitter.com/en/docs/twitter-api/spaces/search/api-reference/get-spaces-search\n */\n searchSpaces(options) {\n return this.get('spaces/search', options);\n }\n /**\n * Returns a list of user who purchased a ticket to the requested Space.\n * You must authenticate the request using the Access Token of the creator of the requested Space.\n *\n * **OAuth 2.0 Access Token required**\n *\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id-buyers\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n spaceBuyers(spaceId, options = {}) {\n return this.get('spaces/:id/buyers', options, { params: { id: spaceId } });\n }\n searchStream({ autoConnect, ...options } = {}) {\n return this.getStream('tweets/search/stream', options, { payloadIsError: helpers_1.isTweetStreamV2ErrorPayload, autoConnect });\n }\n /**\n * Return a list of rules currently active on the streaming endpoint, either as a list or individually.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream-rules\n */\n streamRules(options = {}) {\n return this.get('tweets/search/stream/rules', options);\n }\n updateStreamRules(options, query = {}) {\n return this.post('tweets/search/stream/rules', options, { query });\n }\n sampleStream({ autoConnect, ...options } = {}) {\n return this.getStream('tweets/sample/stream', options, { payloadIsError: helpers_1.isTweetStreamV2ErrorPayload, autoConnect });\n }\n /* Batch compliance */\n /**\n * Returns a list of recent compliance jobs.\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs\n */\n complianceJobs(options) {\n return this.get('compliance/jobs', options);\n }\n /**\n * Get a single compliance job with the specified ID.\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs-id\n */\n complianceJob(jobId) {\n return this.get('compliance/jobs/:id', undefined, { params: { id: jobId } });\n }\n /**\n * Creates a new compliance job for Tweet IDs or user IDs, send your file, await result and parse it into an array.\n * You can run one batch job at a time. Returns the created job, but **not the job result!**.\n *\n * You can obtain the result (**after job is completed**) with `.complianceJobResult`.\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/post-compliance-jobs\n */\n async sendComplianceJob(jobParams) {\n const job = await this.post('compliance/jobs', { type: jobParams.type, name: jobParams.name });\n // Send the IDs\n const rawIdsBody = jobParams.ids instanceof Buffer ? jobParams.ids : Buffer.from(jobParams.ids.join('\\n'));\n // Upload the IDs\n await this.put(job.data.upload_url, rawIdsBody, {\n forceBodyMode: 'raw',\n enableAuth: false,\n headers: { 'Content-Type': 'text/plain' },\n prefix: '',\n });\n return job;\n }\n /**\n * Get the result of a running or completed job, obtained through `.complianceJob`, `.complianceJobs` or `.sendComplianceJob`.\n * If job is still running (`in_progress`), it will await until job is completed. **This could be quite long!**\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/post-compliance-jobs\n */\n async complianceJobResult(job) {\n let runningJob = job;\n while (runningJob.status !== 'complete') {\n if (runningJob.status === 'expired' || runningJob.status === 'failed') {\n throw new Error('Job failed to be completed.');\n }\n await new Promise(resolve => setTimeout(resolve, 3500));\n runningJob = (await this.complianceJob(job.id)).data;\n }\n // Download and parse result\n const result = await this.get(job.download_url, undefined, {\n enableAuth: false,\n prefix: '',\n });\n return result\n .trim()\n .split('\\n')\n .filter(line => line)\n .map(line => JSON.parse(line));\n }\n}\nexports.default = TwitterApiv2ReadOnly;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst globals_1 = require(\"../globals\");\nconst client_v2_read_1 = __importDefault(require(\"./client.v2.read\"));\nconst client_v2_labs_write_1 = __importDefault(require(\"../v2-labs/client.v2.labs.write\"));\n/**\n * Base Twitter v2 client with read/write rights.\n */\nclass TwitterApiv2ReadWrite extends client_v2_read_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_PREFIX;\n }\n /* Sub-clients */\n /**\n * Get a client with only read rights.\n */\n get readOnly() {\n return this;\n }\n /**\n * Get a client for v2 labs endpoints.\n */\n get labs() {\n if (this._labs)\n return this._labs;\n return this._labs = new client_v2_labs_write_1.default(this);\n }\n /* Tweets */\n /**\n * Hides or unhides a reply to a Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/hide-replies/api-reference/put-tweets-id-hidden\n */\n hideReply(tweetId, makeHidden) {\n return this.put('tweets/:id/hidden', { hidden: makeHidden }, { params: { id: tweetId } });\n }\n /**\n * Causes the user ID identified in the path parameter to Like the target Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/post-users-user_id-likes\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n like(loggedUserId, targetTweetId) {\n return this.post('users/:id/likes', { tweet_id: targetTweetId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user or authenticated user ID to unlike a Tweet.\n * The request succeeds with no action when the user sends a request to a user they're not liking the Tweet or have already unliked the Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/delete-users-id-likes-tweet_id\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unlike(loggedUserId, targetTweetId) {\n return this.delete('users/:id/likes/:tweet_id', undefined, {\n params: { id: loggedUserId, tweet_id: targetTweetId },\n });\n }\n /**\n * Causes the user ID identified in the path parameter to Retweet the target Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/post-users-id-retweets\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n retweet(loggedUserId, targetTweetId) {\n return this.post('users/:id/retweets', { tweet_id: targetTweetId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user or authenticated user ID to remove the Retweet of a Tweet.\n * The request succeeds with no action when the user sends a request to a user they're not Retweeting the Tweet or have already removed the Retweet of.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/delete-users-id-retweets-tweet_id\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unretweet(loggedUserId, targetTweetId) {\n return this.delete('users/:id/retweets/:tweet_id', undefined, {\n params: { id: loggedUserId, tweet_id: targetTweetId },\n });\n }\n tweet(status, payload = {}) {\n if (typeof status === 'object') {\n payload = status;\n }\n else {\n payload = { text: status, ...payload };\n }\n return this.post('tweets', payload);\n }\n /**\n * Reply to a Tweet on behalf of an authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets\n */\n reply(status, toTweetId, payload = {}) {\n var _a;\n const reply = { in_reply_to_tweet_id: toTweetId, ...(_a = payload.reply) !== null && _a !== void 0 ? _a : {} };\n return this.post('tweets', { text: status, ...payload, reply });\n }\n /**\n * Quote an existing Tweet on behalf of an authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets\n */\n quote(status, quotedTweetId, payload = {}) {\n return this.tweet(status, { ...payload, quote_tweet_id: quotedTweetId });\n }\n /**\n * Post a series of tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets\n */\n async tweetThread(tweets) {\n var _a, _b;\n const postedTweets = [];\n for (const tweet of tweets) {\n // Retrieve the last sent tweet\n const lastTweet = postedTweets.length ? postedTweets[postedTweets.length - 1] : null;\n // Build the tweet query params\n const queryParams = { ...(typeof tweet === 'string' ? ({ text: tweet }) : tweet) };\n // Reply to an existing tweet if needed\n const inReplyToId = lastTweet ? lastTweet.data.id : (_a = queryParams.reply) === null || _a === void 0 ? void 0 : _a.in_reply_to_tweet_id;\n const status = (_b = queryParams.text) !== null && _b !== void 0 ? _b : '';\n if (inReplyToId) {\n postedTweets.push(await this.reply(status, inReplyToId, queryParams));\n }\n else {\n postedTweets.push(await this.tweet(status, queryParams));\n }\n }\n return postedTweets;\n }\n /**\n * Allows a user or authenticated user ID to delete a Tweet\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/delete-tweets-id\n */\n deleteTweet(tweetId) {\n return this.delete('tweets/:id', undefined, {\n params: {\n id: tweetId,\n },\n });\n }\n /* Bookmarks */\n /**\n * Causes the user ID of an authenticated user identified in the path parameter to Bookmark the target Tweet provided in the request body.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/post-users-id-bookmarks\n *\n * OAuth2 scopes: `users.read` `tweet.read` `bookmark.write`\n */\n async bookmark(tweetId) {\n const user = await this.getCurrentUserV2Object();\n return this.post('users/:id/bookmarks', { tweet_id: tweetId }, { params: { id: user.data.id } });\n }\n /**\n * Allows a user or authenticated user ID to remove a Bookmark of a Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/delete-users-id-bookmarks-tweet_id\n *\n * OAuth2 scopes: `users.read` `tweet.read` `bookmark.write`\n */\n async deleteBookmark(tweetId) {\n const user = await this.getCurrentUserV2Object();\n return this.delete('users/:id/bookmarks/:tweet_id', undefined, { params: { id: user.data.id, tweet_id: tweetId } });\n }\n /* Users */\n /**\n * Allows a user ID to follow another user.\n * If the target user does not have public Tweets, this endpoint will send a follow request.\n * https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/post-users-source_user_id-following\n *\n * OAuth2 scope: `follows.write`\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n follow(loggedUserId, targetUserId) {\n return this.post('users/:id/following', { target_user_id: targetUserId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user ID to unfollow another user.\n * https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/delete-users-source_id-following\n *\n * OAuth2 scope: `follows.write`\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unfollow(loggedUserId, targetUserId) {\n return this.delete('users/:source_user_id/following/:target_user_id', undefined, {\n params: { source_user_id: loggedUserId, target_user_id: targetUserId },\n });\n }\n /**\n * Causes the user (in the path) to block the target user.\n * The user (in the path) must match the user context authorizing the request.\n * https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/post-users-user_id-blocking\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n block(loggedUserId, targetUserId) {\n return this.post('users/:id/blocking', { target_user_id: targetUserId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user or authenticated user ID to unblock another user.\n * https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/delete-users-user_id-blocking\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unblock(loggedUserId, targetUserId) {\n return this.delete('users/:source_user_id/blocking/:target_user_id', undefined, {\n params: { source_user_id: loggedUserId, target_user_id: targetUserId },\n });\n }\n /**\n * Allows an authenticated user ID to mute the target user.\n * https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/post-users-user_id-muting\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n mute(loggedUserId, targetUserId) {\n return this.post('users/:id/muting', { target_user_id: targetUserId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows an authenticated user ID to unmute the target user.\n * The request succeeds with no action when the user sends a request to a user they're not muting or have already unmuted.\n * https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/delete-users-user_id-muting\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unmute(loggedUserId, targetUserId) {\n return this.delete('users/:source_user_id/muting/:target_user_id', undefined, {\n params: { source_user_id: loggedUserId, target_user_id: targetUserId },\n });\n }\n /* Lists */\n /**\n * Creates a new list for the authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-lists\n */\n createList(options) {\n return this.post('lists', options);\n }\n /**\n * Updates the specified list. The authenticated user must own the list to be able to update it.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/put-lists-id\n */\n updateList(listId, options = {}) {\n return this.put('lists/:id', options, { params: { id: listId } });\n }\n /**\n * Deletes the specified list. The authenticated user must own the list to be able to destroy it.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-lists-id\n */\n removeList(listId) {\n return this.delete('lists/:id', undefined, { params: { id: listId } });\n }\n /**\n * Adds a member to a list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-lists-id-members\n */\n addListMember(listId, userId) {\n return this.post('lists/:id/members', { user_id: userId }, { params: { id: listId } });\n }\n /**\n * Remember a member to a list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-lists-id-members-user_id\n */\n removeListMember(listId, userId) {\n return this.delete('lists/:id/members/:user_id', undefined, { params: { id: listId, user_id: userId } });\n }\n /**\n * Subscribes the authenticated user to the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-users-id-followed-lists\n */\n subscribeToList(loggedUserId, listId) {\n return this.post('users/:id/followed_lists', { list_id: listId }, { params: { id: loggedUserId } });\n }\n /**\n * Unsubscribes the authenticated user to the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-users-id-followed-lists-list_id\n */\n unsubscribeOfList(loggedUserId, listId) {\n return this.delete('users/:id/followed_lists/:list_id', undefined, { params: { id: loggedUserId, list_id: listId } });\n }\n /**\n * Enables the authenticated user to pin a List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-users-id-pinned-lists\n */\n pinList(loggedUserId, listId) {\n return this.post('users/:id/pinned_lists', { list_id: listId }, { params: { id: loggedUserId } });\n }\n /**\n * Enables the authenticated user to unpin a List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-users-id-pinned-lists-list_id\n */\n unpinList(loggedUserId, listId) {\n return this.delete('users/:id/pinned_lists/:list_id', undefined, { params: { id: loggedUserId, list_id: listId } });\n }\n}\nexports.default = TwitterApiv2ReadWrite;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterV2IncludesHelper = void 0;\n/**\n * Provide helpers for `.includes` of a v2 API result.\n * Needed expansions for a method to work are specified (*`like this`*).\n */\nclass TwitterV2IncludesHelper {\n constructor(result) {\n this.result = result;\n }\n /* Tweets */\n get tweets() {\n return TwitterV2IncludesHelper.tweets(this.result);\n }\n static tweets(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.tweets) !== null && _b !== void 0 ? _b : [];\n }\n tweetById(id) {\n return TwitterV2IncludesHelper.tweetById(this.result, id);\n }\n static tweetById(result, id) {\n return this.tweets(result).find(tweet => tweet.id === id);\n }\n /** Retweet associated with the given tweet (*`referenced_tweets.id`*) */\n retweet(tweet) {\n return TwitterV2IncludesHelper.retweet(this.result, tweet);\n }\n /** Retweet associated with the given tweet (*`referenced_tweets.id`*) */\n static retweet(result, tweet) {\n var _a;\n const retweetIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])\n .filter(ref => ref.type === 'retweeted')\n .map(ref => ref.id);\n return this.tweets(result).find(t => retweetIds.includes(t.id));\n }\n /** Quoted tweet associated with the given tweet (*`referenced_tweets.id`*) */\n quote(tweet) {\n return TwitterV2IncludesHelper.quote(this.result, tweet);\n }\n /** Quoted tweet associated with the given tweet (*`referenced_tweets.id`*) */\n static quote(result, tweet) {\n var _a;\n const quoteIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])\n .filter(ref => ref.type === 'quoted')\n .map(ref => ref.id);\n return this.tweets(result).find(t => quoteIds.includes(t.id));\n }\n /** Tweet whose has been answered by the given tweet (*`referenced_tweets.id`*) */\n repliedTo(tweet) {\n return TwitterV2IncludesHelper.repliedTo(this.result, tweet);\n }\n /** Tweet whose has been answered by the given tweet (*`referenced_tweets.id`*) */\n static repliedTo(result, tweet) {\n var _a;\n const repliesIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])\n .filter(ref => ref.type === 'replied_to')\n .map(ref => ref.id);\n return this.tweets(result).find(t => repliesIds.includes(t.id));\n }\n /** Tweet author user object of the given tweet (*`author_id`* or *`referenced_tweets.id.author_id`*) */\n author(tweet) {\n return TwitterV2IncludesHelper.author(this.result, tweet);\n }\n /** Tweet author user object of the given tweet (*`author_id`* or *`referenced_tweets.id.author_id`*) */\n static author(result, tweet) {\n const authorId = tweet.author_id;\n return authorId ? this.users(result).find(u => u.id === authorId) : undefined;\n }\n /** Tweet author user object of the tweet answered by the given tweet (*`in_reply_to_user_id`*) */\n repliedToAuthor(tweet) {\n return TwitterV2IncludesHelper.repliedToAuthor(this.result, tweet);\n }\n /** Tweet author user object of the tweet answered by the given tweet (*`in_reply_to_user_id`*) */\n static repliedToAuthor(result, tweet) {\n const inReplyUserId = tweet.in_reply_to_user_id;\n return inReplyUserId ? this.users(result).find(u => u.id === inReplyUserId) : undefined;\n }\n /* Users */\n get users() {\n return TwitterV2IncludesHelper.users(this.result);\n }\n static users(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.users) !== null && _b !== void 0 ? _b : [];\n }\n userById(id) {\n return TwitterV2IncludesHelper.userById(this.result, id);\n }\n static userById(result, id) {\n return this.users(result).find(u => u.id === id);\n }\n /** Pinned tweet of the given user (*`pinned_tweet_id`*) */\n pinnedTweet(user) {\n return TwitterV2IncludesHelper.pinnedTweet(this.result, user);\n }\n /** Pinned tweet of the given user (*`pinned_tweet_id`*) */\n static pinnedTweet(result, user) {\n return user.pinned_tweet_id ? this.tweets(result).find(t => t.id === user.pinned_tweet_id) : undefined;\n }\n /* Medias */\n get media() {\n return TwitterV2IncludesHelper.media(this.result);\n }\n static media(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.media) !== null && _b !== void 0 ? _b : [];\n }\n /** Medias associated with the given tweet (*`attachments.media_keys`*) */\n medias(tweet) {\n return TwitterV2IncludesHelper.medias(this.result, tweet);\n }\n /** Medias associated with the given tweet (*`attachments.media_keys`*) */\n static medias(result, tweet) {\n var _a, _b;\n const keys = (_b = (_a = tweet.attachments) === null || _a === void 0 ? void 0 : _a.media_keys) !== null && _b !== void 0 ? _b : [];\n return this.media(result).filter(m => keys.includes(m.media_key));\n }\n /* Polls */\n get polls() {\n return TwitterV2IncludesHelper.polls(this.result);\n }\n static polls(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.polls) !== null && _b !== void 0 ? _b : [];\n }\n /** Poll associated with the given tweet (*`attachments.poll_ids`*) */\n poll(tweet) {\n return TwitterV2IncludesHelper.poll(this.result, tweet);\n }\n /** Poll associated with the given tweet (*`attachments.poll_ids`*) */\n static poll(result, tweet) {\n var _a, _b;\n const pollIds = (_b = (_a = tweet.attachments) === null || _a === void 0 ? void 0 : _a.poll_ids) !== null && _b !== void 0 ? _b : [];\n if (pollIds.length) {\n const pollId = pollIds[0];\n return this.polls(result).find(p => p.id === pollId);\n }\n return undefined;\n }\n /* Places */\n get places() {\n return TwitterV2IncludesHelper.places(this.result);\n }\n static places(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.places) !== null && _b !== void 0 ? _b : [];\n }\n /** Place associated with the given tweet (*`geo.place_id`*) */\n place(tweet) {\n return TwitterV2IncludesHelper.place(this.result, tweet);\n }\n /** Place associated with the given tweet (*`geo.place_id`*) */\n static place(result, tweet) {\n var _a;\n const placeId = (_a = tweet.geo) === null || _a === void 0 ? void 0 : _a.place_id;\n return placeId ? this.places(result).find(p => p.id === placeId) : undefined;\n }\n /* Lists */\n /** List owner of the given list (*`owner_id`*) */\n listOwner(list) {\n return TwitterV2IncludesHelper.listOwner(this.result, list);\n }\n /** List owner of the given list (*`owner_id`*) */\n static listOwner(result, list) {\n const creatorId = list.owner_id;\n return creatorId ? this.users(result).find(p => p.id === creatorId) : undefined;\n }\n /* Spaces */\n /** Creator of the given space (*`creator_id`*) */\n spaceCreator(space) {\n return TwitterV2IncludesHelper.spaceCreator(this.result, space);\n }\n /** Creator of the given space (*`creator_id`*) */\n static spaceCreator(result, space) {\n const creatorId = space.creator_id;\n return creatorId ? this.users(result).find(p => p.id === creatorId) : undefined;\n }\n /** Current hosts of the given space (*`host_ids`*) */\n spaceHosts(space) {\n return TwitterV2IncludesHelper.spaceHosts(this.result, space);\n }\n /** Current hosts of the given space (*`host_ids`*) */\n static spaceHosts(result, space) {\n var _a;\n const hostIds = (_a = space.host_ids) !== null && _a !== void 0 ? _a : [];\n return this.users(result).filter(u => hostIds.includes(u.id));\n }\n /** Current speakers of the given space (*`speaker_ids`*) */\n spaceSpeakers(space) {\n return TwitterV2IncludesHelper.spaceSpeakers(this.result, space);\n }\n /** Current speakers of the given space (*`speaker_ids`*) */\n static spaceSpeakers(result, space) {\n var _a;\n const speakerIds = (_a = space.speaker_ids) !== null && _a !== void 0 ? _a : [];\n return this.users(result).filter(u => speakerIds.includes(u.id));\n }\n /** Current invited users of the given space (*`invited_user_ids`*) */\n spaceInvitedUsers(space) {\n return TwitterV2IncludesHelper.spaceInvitedUsers(this.result, space);\n }\n /** Current invited users of the given space (*`invited_user_ids`*) */\n static spaceInvitedUsers(result, space) {\n var _a;\n const invitedUserIds = (_a = space.invited_user_ids) !== null && _a !== void 0 ? _a : [];\n return this.users(result).filter(u => invitedUserIds.includes(u.id));\n }\n}\nexports.TwitterV2IncludesHelper = TwitterV2IncludesHelper;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('md5').update(bytes).digest();\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\n\nfunction rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n _crypto.default.randomFillSync(rnds8Pool);\n\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('sha1').update(bytes).digest();\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;","module.exports = require(\"assert\");","module.exports = require(\"crypto\");","module.exports = require(\"events\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"net\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"tls\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\nif (typeof __webpack_require__ !== 'undefined') __webpack_require__.ab = __dirname + \"/\";","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(3109);\n",""],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"index.js","mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/GA;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChBA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACRA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxBA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACXA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACrBA;AACA;;;;;;;;;ACDA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;;;;;;;;;ACJA;AACA;;;;;;;;;ACDA;AACA;AACA;;;;;;;;;ACFA;AACA;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACzmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACzbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7BA;AACA;;;;AEDA;AACA;AACA;AACA","sources":["../webpack://tweet/./lib/main.js","../webpack://tweet/./lib/tweet.js","../webpack://tweet/./lib/upload-media.js","../webpack://tweet/./node_modules/@actions/core/lib/command.js","../webpack://tweet/./node_modules/@actions/core/lib/core.js","../webpack://tweet/./node_modules/@actions/core/lib/file-command.js","../webpack://tweet/./node_modules/@actions/core/lib/oidc-utils.js","../webpack://tweet/./node_modules/@actions/core/lib/path-utils.js","../webpack://tweet/./node_modules/@actions/core/lib/summary.js","../webpack://tweet/./node_modules/@actions/core/lib/utils.js","../webpack://tweet/./node_modules/@actions/http-client/lib/auth.js","../webpack://tweet/./node_modules/@actions/http-client/lib/index.js","../webpack://tweet/./node_modules/@actions/http-client/lib/proxy.js","../webpack://tweet/./node_modules/dotenv/config.js","../webpack://tweet/./node_modules/dotenv/lib/cli-options.js","../webpack://tweet/./node_modules/dotenv/lib/env-options.js","../webpack://tweet/./node_modules/dotenv/lib/main.js","../webpack://tweet/./node_modules/tunnel/index.js","../webpack://tweet/./node_modules/tunnel/lib/tunnel.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/form-data.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/oauth1.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/oauth2.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/request-handler.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/request-maker.mixin.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client-mixins/request-param.helper.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client.base.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client.subclient.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client/readonly.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/client/readwrite.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/globals.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/helpers.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/TwitterPaginator.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/dm.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/followers.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/friends.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/list.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/list.paginator.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/mutes.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/tweet.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/tweet.paginator.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/user.paginator.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/user.paginator.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/paginators/v2.paginator.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/plugins/helpers.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/settings.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/stream/TweetStream.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/stream/TweetStreamEventCombiner.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/stream/TweetStreamParser.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/auth.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/client.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/errors.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/plugins/client.plugins.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/plugins/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/responses.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/dev-utilities.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/dm.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/entities.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/geo.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/list.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/streaming.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/trends.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/tweet.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v1/user.v1.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/index.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/list.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/spaces.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/streaming.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/tweet.definition.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/tweet.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/types/v2/user.v2.types.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/client.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/client.v1.read.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/client.v1.write.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v1/media-helpers.v1.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2-labs/client.v2.labs.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2-labs/client.v2.labs.read.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2-labs/client.v2.labs.write.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/client.v2.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/client.v2.read.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/client.v2.write.js","../webpack://tweet/./node_modules/twitter-api-v2/dist/v2/includes.v2.helper.js","../webpack://tweet/./node_modules/uuid/dist/index.js","../webpack://tweet/./node_modules/uuid/dist/md5.js","../webpack://tweet/./node_modules/uuid/dist/nil.js","../webpack://tweet/./node_modules/uuid/dist/parse.js","../webpack://tweet/./node_modules/uuid/dist/regex.js","../webpack://tweet/./node_modules/uuid/dist/rng.js","../webpack://tweet/./node_modules/uuid/dist/sha1.js","../webpack://tweet/./node_modules/uuid/dist/stringify.js","../webpack://tweet/./node_modules/uuid/dist/v1.js","../webpack://tweet/./node_modules/uuid/dist/v3.js","../webpack://tweet/./node_modules/uuid/dist/v35.js","../webpack://tweet/./node_modules/uuid/dist/v4.js","../webpack://tweet/./node_modules/uuid/dist/v5.js","../webpack://tweet/./node_modules/uuid/dist/validate.js","../webpack://tweet/./node_modules/uuid/dist/version.js","../webpack://tweet/external node-commonjs \"assert\"","../webpack://tweet/external node-commonjs \"crypto\"","../webpack://tweet/external node-commonjs \"events\"","../webpack://tweet/external node-commonjs \"fs\"","../webpack://tweet/external node-commonjs \"http\"","../webpack://tweet/external node-commonjs \"https\"","../webpack://tweet/external node-commonjs \"net\"","../webpack://tweet/external node-commonjs \"os\"","../webpack://tweet/external node-commonjs \"path\"","../webpack://tweet/external node-commonjs \"tls\"","../webpack://tweet/external node-commonjs \"util\"","../webpack://tweet/external node-commonjs \"zlib\"","../webpack://tweet/webpack/bootstrap","../webpack://tweet/webpack/runtime/compat","../webpack://tweet/webpack/before-startup","../webpack://tweet/webpack/startup","../webpack://tweet/webpack/after-startup"],"sourcesContent":["\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"dotenv/config\");\nconst core = __importStar(require(\"@actions/core\"));\nconst path = __importStar(require(\"path\"));\nconst tweet_1 = require(\"./tweet\");\nconst upload_media_1 = require(\"./upload-media\");\nfunction run() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const mediaPaths = core.getInput('media_paths');\n const mediaIds = yield (0, upload_media_1.uploadMedia)(mediaPaths\n .split('\\n')\n .filter(x => x !== '')\n .map(mediaPath => path.join(process.cwd(), mediaPath)));\n core.debug(`Media IDs: ${mediaIds.join(', ')}`);\n const inReplyToStatusId = core.getInput('in_reply_to_status_id');\n const response = yield (0, tweet_1.tweet)(core.getInput('status'), mediaIds, inReplyToStatusId);\n core.setOutput('response', JSON.stringify(response));\n }\n catch (error) {\n if (error instanceof Error)\n core.setFailed(error.message);\n }\n });\n}\nrun();\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tweet = void 0;\nconst twitter_api_v2_1 = __importDefault(require(\"twitter-api-v2\"));\nfunction tweet(status, mediaIds = [], inReplyToStatusId = '') {\n return __awaiter(this, void 0, void 0, function* () {\n const appKey = process.env.CONSUMER_API_KEY;\n const appSecret = process.env.CONSUMER_API_SECRET_KEY;\n const accessToken = process.env.ACCESS_TOKEN;\n const accessSecret = process.env.ACCESS_TOKEN_SECRET;\n const client = new twitter_api_v2_1.default({\n appKey,\n appSecret,\n accessToken,\n accessSecret\n }).v1;\n const parameters = {};\n if (mediaIds.length > 0) {\n parameters['media_ids'] = mediaIds.join(',');\n }\n if (inReplyToStatusId !== '') {\n parameters['in_reply_to_status_id'] = inReplyToStatusId;\n }\n return yield client.tweet(status, parameters);\n });\n}\nexports.tweet = tweet;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uploadMedia = void 0;\nconst twitter_api_v2_1 = __importDefault(require(\"twitter-api-v2\"));\nconst fs = __importStar(require(\"fs\"));\nconst core = __importStar(require(\"@actions/core\"));\nfunction uploadMedia(mediaPaths) {\n return __awaiter(this, void 0, void 0, function* () {\n core.debug(JSON.stringify(mediaPaths));\n for (const path of mediaPaths) {\n if (!fs.existsSync(path)) {\n throw new Error(`${path} not exists`);\n }\n }\n const appKey = process.env.CONSUMER_API_KEY;\n const appSecret = process.env.CONSUMER_API_SECRET_KEY;\n const accessToken = process.env.ACCESS_TOKEN;\n const accessSecret = process.env.ACCESS_TOKEN_SECRET;\n const client = new twitter_api_v2_1.default({\n appKey,\n appSecret,\n accessToken,\n accessSecret\n }).v1;\n const mediaIdsPromise = mediaPaths.map((path) => __awaiter(this, void 0, void 0, function* () {\n return yield client.uploadMedia(path);\n }));\n return yield Promise.all(mediaIdsPromise);\n });\n}\nexports.uploadMedia = uploadMedia;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.issue = exports.issueCommand = void 0;\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\nconst oidc_utils_1 = require(\"./oidc-utils\");\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));\n }\n command_1.issueCommand('set-env', { name }, convertedVal);\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueFileCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input.\n * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.\n * Returns an empty string if the value is not defined.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n if (options && options.trimWhitespace === false) {\n return val;\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Gets the values of an multiline input. Each value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string[]\n *\n */\nfunction getMultilineInput(name, options) {\n const inputs = getInput(name, options)\n .split('\\n')\n .filter(x => x !== '');\n if (options && options.trimWhitespace === false) {\n return inputs;\n }\n return inputs.map(input => input.trim());\n}\nexports.getMultilineInput = getMultilineInput;\n/**\n * Gets the input value of the boolean type in the YAML 1.2 \"core schema\" specification.\n * Support boolean input list: `true | True | TRUE | false | False | FALSE` .\n * The return value is also in boolean type.\n * ref: https://yaml.org/spec/1.2/spec.html#id2804923\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns boolean\n */\nfunction getBooleanInput(name, options) {\n const trueValue = ['true', 'True', 'TRUE'];\n const falseValue = ['false', 'False', 'FALSE'];\n const val = getInput(name, options);\n if (trueValue.includes(val))\n return true;\n if (falseValue.includes(val))\n return false;\n throw new TypeError(`Input does not meet YAML 1.2 \"Core Schema\" specification: ${name}\\n` +\n `Support boolean input list: \\`true | True | TRUE | false | False | FALSE\\``);\n}\nexports.getBooleanInput = getBooleanInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n const filePath = process.env['GITHUB_OUTPUT'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));\n }\n process.stdout.write(os.EOL);\n command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction error(message, properties = {}) {\n command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds a warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction warning(message, properties = {}) {\n command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Adds a notice issue\n * @param message notice issue message. Errors will be converted to string via toString()\n * @param properties optional properties to add to the annotation.\n */\nfunction notice(message, properties = {}) {\n command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);\n}\nexports.notice = notice;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n const filePath = process.env['GITHUB_STATE'] || '';\n if (filePath) {\n return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value));\n }\n command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value));\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\nfunction getIDToken(aud) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield oidc_utils_1.OidcClient.getIDToken(aud);\n });\n}\nexports.getIDToken = getIDToken;\n/**\n * Summary exports\n */\nvar summary_1 = require(\"./summary\");\nObject.defineProperty(exports, \"summary\", { enumerable: true, get: function () { return summary_1.summary; } });\n/**\n * @deprecated use core.summary\n */\nvar summary_2 = require(\"./summary\");\nObject.defineProperty(exports, \"markdownSummary\", { enumerable: true, get: function () { return summary_2.markdownSummary; } });\n/**\n * Path exports\n */\nvar path_utils_1 = require(\"./path-utils\");\nObject.defineProperty(exports, \"toPosixPath\", { enumerable: true, get: function () { return path_utils_1.toPosixPath; } });\nObject.defineProperty(exports, \"toWin32Path\", { enumerable: true, get: function () { return path_utils_1.toWin32Path; } });\nObject.defineProperty(exports, \"toPlatformPath\", { enumerable: true, get: function () { return path_utils_1.toPlatformPath; } });\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.prepareKeyValueMessage = exports.issueFileCommand = void 0;\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst uuid_1 = require(\"uuid\");\nconst utils_1 = require(\"./utils\");\nfunction issueFileCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueFileCommand = issueFileCommand;\nfunction prepareKeyValueMessage(key, value) {\n const delimiter = `ghadelimiter_${uuid_1.v4()}`;\n const convertedValue = utils_1.toCommandValue(value);\n // These should realistically never happen, but just in case someone finds a\n // way to exploit uuid generation let's not allow keys or values that contain\n // the delimiter.\n if (key.includes(delimiter)) {\n throw new Error(`Unexpected input: name should not contain the delimiter \"${delimiter}\"`);\n }\n if (convertedValue.includes(delimiter)) {\n throw new Error(`Unexpected input: value should not contain the delimiter \"${delimiter}\"`);\n }\n return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;\n}\nexports.prepareKeyValueMessage = prepareKeyValueMessage;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OidcClient = void 0;\nconst http_client_1 = require(\"@actions/http-client\");\nconst auth_1 = require(\"@actions/http-client/lib/auth\");\nconst core_1 = require(\"./core\");\nclass OidcClient {\n static createHttpClient(allowRetry = true, maxRetry = 10) {\n const requestOptions = {\n allowRetries: allowRetry,\n maxRetries: maxRetry\n };\n return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);\n }\n static getRequestToken() {\n const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];\n if (!token) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');\n }\n return token;\n }\n static getIDTokenUrl() {\n const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];\n if (!runtimeUrl) {\n throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');\n }\n return runtimeUrl;\n }\n static getCall(id_token_url) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const httpclient = OidcClient.createHttpClient();\n const res = yield httpclient\n .getJson(id_token_url)\n .catch(error => {\n throw new Error(`Failed to get ID Token. \\n \n Error Code : ${error.statusCode}\\n \n Error Message: ${error.result.message}`);\n });\n const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;\n if (!id_token) {\n throw new Error('Response json body do not have ID Token field');\n }\n return id_token;\n });\n }\n static getIDToken(audience) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n // New ID Token is requested from action service\n let id_token_url = OidcClient.getIDTokenUrl();\n if (audience) {\n const encodedAudience = encodeURIComponent(audience);\n id_token_url = `${id_token_url}&audience=${encodedAudience}`;\n }\n core_1.debug(`ID token url is ${id_token_url}`);\n const id_token = yield OidcClient.getCall(id_token_url);\n core_1.setSecret(id_token);\n return id_token;\n }\n catch (error) {\n throw new Error(`Error message: ${error.message}`);\n }\n });\n }\n}\nexports.OidcClient = OidcClient;\n//# sourceMappingURL=oidc-utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;\nconst path = __importStar(require(\"path\"));\n/**\n * toPosixPath converts the given path to the posix form. On Windows, \\\\ will be\n * replaced with /.\n *\n * @param pth. Path to transform.\n * @return string Posix path.\n */\nfunction toPosixPath(pth) {\n return pth.replace(/[\\\\]/g, '/');\n}\nexports.toPosixPath = toPosixPath;\n/**\n * toWin32Path converts the given path to the win32 form. On Linux, / will be\n * replaced with \\\\.\n *\n * @param pth. Path to transform.\n * @return string Win32 path.\n */\nfunction toWin32Path(pth) {\n return pth.replace(/[/]/g, '\\\\');\n}\nexports.toWin32Path = toWin32Path;\n/**\n * toPlatformPath converts the given path to a platform-specific path. It does\n * this by replacing instances of / and \\ with the platform-specific path\n * separator.\n *\n * @param pth The path to platformize.\n * @return string The platform-specific path.\n */\nfunction toPlatformPath(pth) {\n return pth.replace(/[/\\\\]/g, path.sep);\n}\nexports.toPlatformPath = toPlatformPath;\n//# sourceMappingURL=path-utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;\nconst os_1 = require(\"os\");\nconst fs_1 = require(\"fs\");\nconst { access, appendFile, writeFile } = fs_1.promises;\nexports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';\nexports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';\nclass Summary {\n constructor() {\n this._buffer = '';\n }\n /**\n * Finds the summary file path from the environment, rejects if env var is not found or file does not exist\n * Also checks r/w permissions.\n *\n * @returns step summary file path\n */\n filePath() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._filePath) {\n return this._filePath;\n }\n const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];\n if (!pathFromEnv) {\n throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);\n }\n try {\n yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);\n }\n catch (_a) {\n throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);\n }\n this._filePath = pathFromEnv;\n return this._filePath;\n });\n }\n /**\n * Wraps content in an HTML tag, adding any HTML attributes\n *\n * @param {string} tag HTML tag to wrap\n * @param {string | null} content content within the tag\n * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add\n *\n * @returns {string} content wrapped in HTML element\n */\n wrap(tag, content, attrs = {}) {\n const htmlAttrs = Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${value}\"`)\n .join('');\n if (!content) {\n return `<${tag}${htmlAttrs}>`;\n }\n return `<${tag}${htmlAttrs}>${content}`;\n }\n /**\n * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.\n *\n * @param {SummaryWriteOptions} [options] (optional) options for write operation\n *\n * @returns {Promise} summary instance\n */\n write(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);\n const filePath = yield this.filePath();\n const writeFunc = overwrite ? writeFile : appendFile;\n yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });\n return this.emptyBuffer();\n });\n }\n /**\n * Clears the summary buffer and wipes the summary file\n *\n * @returns {Summary} summary instance\n */\n clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.emptyBuffer().write({ overwrite: true });\n });\n }\n /**\n * Returns the current summary buffer as a string\n *\n * @returns {string} string of summary buffer\n */\n stringify() {\n return this._buffer;\n }\n /**\n * If the summary buffer is empty\n *\n * @returns {boolen} true if the buffer is empty\n */\n isEmptyBuffer() {\n return this._buffer.length === 0;\n }\n /**\n * Resets the summary buffer without writing to summary file\n *\n * @returns {Summary} summary instance\n */\n emptyBuffer() {\n this._buffer = '';\n return this;\n }\n /**\n * Adds raw text to the summary buffer\n *\n * @param {string} text content to add\n * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)\n *\n * @returns {Summary} summary instance\n */\n addRaw(text, addEOL = false) {\n this._buffer += text;\n return addEOL ? this.addEOL() : this;\n }\n /**\n * Adds the operating system-specific end-of-line marker to the buffer\n *\n * @returns {Summary} summary instance\n */\n addEOL() {\n return this.addRaw(os_1.EOL);\n }\n /**\n * Adds an HTML codeblock to the summary buffer\n *\n * @param {string} code content to render within fenced code block\n * @param {string} lang (optional) language to syntax highlight code\n *\n * @returns {Summary} summary instance\n */\n addCodeBlock(code, lang) {\n const attrs = Object.assign({}, (lang && { lang }));\n const element = this.wrap('pre', this.wrap('code', code), attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML list to the summary buffer\n *\n * @param {string[]} items list of items to render\n * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)\n *\n * @returns {Summary} summary instance\n */\n addList(items, ordered = false) {\n const tag = ordered ? 'ol' : 'ul';\n const listItems = items.map(item => this.wrap('li', item)).join('');\n const element = this.wrap(tag, listItems);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML table to the summary buffer\n *\n * @param {SummaryTableCell[]} rows table rows\n *\n * @returns {Summary} summary instance\n */\n addTable(rows) {\n const tableBody = rows\n .map(row => {\n const cells = row\n .map(cell => {\n if (typeof cell === 'string') {\n return this.wrap('td', cell);\n }\n const { header, data, colspan, rowspan } = cell;\n const tag = header ? 'th' : 'td';\n const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));\n return this.wrap(tag, data, attrs);\n })\n .join('');\n return this.wrap('tr', cells);\n })\n .join('');\n const element = this.wrap('table', tableBody);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds a collapsable HTML details element to the summary buffer\n *\n * @param {string} label text for the closed state\n * @param {string} content collapsable content\n *\n * @returns {Summary} summary instance\n */\n addDetails(label, content) {\n const element = this.wrap('details', this.wrap('summary', label) + content);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML image tag to the summary buffer\n *\n * @param {string} src path to the image you to embed\n * @param {string} alt text description of the image\n * @param {SummaryImageOptions} options (optional) addition image attributes\n *\n * @returns {Summary} summary instance\n */\n addImage(src, alt, options) {\n const { width, height } = options || {};\n const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));\n const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML section heading element\n *\n * @param {string} text heading text\n * @param {number | string} [level=1] (optional) the heading level, default: 1\n *\n * @returns {Summary} summary instance\n */\n addHeading(text, level) {\n const tag = `h${level}`;\n const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)\n ? tag\n : 'h1';\n const element = this.wrap(allowedTag, text);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML thematic break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addSeparator() {\n const element = this.wrap('hr', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML line break (
) to the summary buffer\n *\n * @returns {Summary} summary instance\n */\n addBreak() {\n const element = this.wrap('br', null);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML blockquote to the summary buffer\n *\n * @param {string} text quote text\n * @param {string} cite (optional) citation url\n *\n * @returns {Summary} summary instance\n */\n addQuote(text, cite) {\n const attrs = Object.assign({}, (cite && { cite }));\n const element = this.wrap('blockquote', text, attrs);\n return this.addRaw(element).addEOL();\n }\n /**\n * Adds an HTML anchor tag to the summary buffer\n *\n * @param {string} text link text/content\n * @param {string} href hyperlink\n *\n * @returns {Summary} summary instance\n */\n addLink(text, href) {\n const element = this.wrap('a', text, { href });\n return this.addRaw(element).addEOL();\n }\n}\nconst _summary = new Summary();\n/**\n * @deprecated use `core.summary`\n */\nexports.markdownSummary = _summary;\nexports.summary = _summary;\n//# sourceMappingURL=summary.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCommandProperties = exports.toCommandValue = void 0;\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n/**\n *\n * @param annotationProperties\n * @returns The command properties to send with the actual annotation command\n * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646\n */\nfunction toCommandProperties(annotationProperties) {\n if (!Object.keys(annotationProperties).length) {\n return {};\n }\n return {\n title: annotationProperties.title,\n file: annotationProperties.file,\n line: annotationProperties.startLine,\n endLine: annotationProperties.endLine,\n col: annotationProperties.startColumn,\n endColumn: annotationProperties.endColumn\n };\n}\nexports.toCommandProperties = toCommandProperties;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;\nclass BasicCredentialHandler {\n constructor(username, password) {\n this.username = username;\n this.password = password;\n }\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BasicCredentialHandler = BasicCredentialHandler;\nclass BearerCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Bearer ${this.token}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.BearerCredentialHandler = BearerCredentialHandler;\nclass PersonalAccessTokenCredentialHandler {\n constructor(token) {\n this.token = token;\n }\n // currently implements pre-authorization\n // TODO: support preAuth = false where it hooks on 401\n prepareRequest(options) {\n if (!options.headers) {\n throw Error('The request has no headers');\n }\n options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;\n }\n // This handler cannot handle 401\n canHandleAuthentication() {\n return false;\n }\n handleAuthentication() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('not implemented');\n });\n }\n}\nexports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;\n//# sourceMappingURL=auth.js.map","\"use strict\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;\nconst http = __importStar(require(\"http\"));\nconst https = __importStar(require(\"https\"));\nconst pm = __importStar(require(\"./proxy\"));\nconst tunnel = __importStar(require(\"tunnel\"));\nvar HttpCodes;\n(function (HttpCodes) {\n HttpCodes[HttpCodes[\"OK\"] = 200] = \"OK\";\n HttpCodes[HttpCodes[\"MultipleChoices\"] = 300] = \"MultipleChoices\";\n HttpCodes[HttpCodes[\"MovedPermanently\"] = 301] = \"MovedPermanently\";\n HttpCodes[HttpCodes[\"ResourceMoved\"] = 302] = \"ResourceMoved\";\n HttpCodes[HttpCodes[\"SeeOther\"] = 303] = \"SeeOther\";\n HttpCodes[HttpCodes[\"NotModified\"] = 304] = \"NotModified\";\n HttpCodes[HttpCodes[\"UseProxy\"] = 305] = \"UseProxy\";\n HttpCodes[HttpCodes[\"SwitchProxy\"] = 306] = \"SwitchProxy\";\n HttpCodes[HttpCodes[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n HttpCodes[HttpCodes[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n HttpCodes[HttpCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpCodes[HttpCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpCodes[HttpCodes[\"PaymentRequired\"] = 402] = \"PaymentRequired\";\n HttpCodes[HttpCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpCodes[HttpCodes[\"NotFound\"] = 404] = \"NotFound\";\n HttpCodes[HttpCodes[\"MethodNotAllowed\"] = 405] = \"MethodNotAllowed\";\n HttpCodes[HttpCodes[\"NotAcceptable\"] = 406] = \"NotAcceptable\";\n HttpCodes[HttpCodes[\"ProxyAuthenticationRequired\"] = 407] = \"ProxyAuthenticationRequired\";\n HttpCodes[HttpCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpCodes[HttpCodes[\"Conflict\"] = 409] = \"Conflict\";\n HttpCodes[HttpCodes[\"Gone\"] = 410] = \"Gone\";\n HttpCodes[HttpCodes[\"TooManyRequests\"] = 429] = \"TooManyRequests\";\n HttpCodes[HttpCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n HttpCodes[HttpCodes[\"NotImplemented\"] = 501] = \"NotImplemented\";\n HttpCodes[HttpCodes[\"BadGateway\"] = 502] = \"BadGateway\";\n HttpCodes[HttpCodes[\"ServiceUnavailable\"] = 503] = \"ServiceUnavailable\";\n HttpCodes[HttpCodes[\"GatewayTimeout\"] = 504] = \"GatewayTimeout\";\n})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));\nvar Headers;\n(function (Headers) {\n Headers[\"Accept\"] = \"accept\";\n Headers[\"ContentType\"] = \"content-type\";\n})(Headers = exports.Headers || (exports.Headers = {}));\nvar MediaTypes;\n(function (MediaTypes) {\n MediaTypes[\"ApplicationJson\"] = \"application/json\";\n})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));\n/**\n * Returns the proxy URL, depending upon the supplied url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\nfunction getProxyUrl(serverUrl) {\n const proxyUrl = pm.getProxyUrl(new URL(serverUrl));\n return proxyUrl ? proxyUrl.href : '';\n}\nexports.getProxyUrl = getProxyUrl;\nconst HttpRedirectCodes = [\n HttpCodes.MovedPermanently,\n HttpCodes.ResourceMoved,\n HttpCodes.SeeOther,\n HttpCodes.TemporaryRedirect,\n HttpCodes.PermanentRedirect\n];\nconst HttpResponseRetryCodes = [\n HttpCodes.BadGateway,\n HttpCodes.ServiceUnavailable,\n HttpCodes.GatewayTimeout\n];\nconst RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];\nconst ExponentialBackoffCeiling = 10;\nconst ExponentialBackoffTimeSlice = 5;\nclass HttpClientError extends Error {\n constructor(message, statusCode) {\n super(message);\n this.name = 'HttpClientError';\n this.statusCode = statusCode;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n}\nexports.HttpClientError = HttpClientError;\nclass HttpClientResponse {\n constructor(message) {\n this.message = message;\n }\n readBody() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let output = Buffer.alloc(0);\n this.message.on('data', (chunk) => {\n output = Buffer.concat([output, chunk]);\n });\n this.message.on('end', () => {\n resolve(output.toString());\n });\n }));\n });\n }\n}\nexports.HttpClientResponse = HttpClientResponse;\nfunction isHttps(requestUrl) {\n const parsedUrl = new URL(requestUrl);\n return parsedUrl.protocol === 'https:';\n}\nexports.isHttps = isHttps;\nclass HttpClient {\n constructor(userAgent, handlers, requestOptions) {\n this._ignoreSslError = false;\n this._allowRedirects = true;\n this._allowRedirectDowngrade = false;\n this._maxRedirects = 50;\n this._allowRetries = false;\n this._maxRetries = 1;\n this._keepAlive = false;\n this._disposed = false;\n this.userAgent = userAgent;\n this.handlers = handlers || [];\n this.requestOptions = requestOptions;\n if (requestOptions) {\n if (requestOptions.ignoreSslError != null) {\n this._ignoreSslError = requestOptions.ignoreSslError;\n }\n this._socketTimeout = requestOptions.socketTimeout;\n if (requestOptions.allowRedirects != null) {\n this._allowRedirects = requestOptions.allowRedirects;\n }\n if (requestOptions.allowRedirectDowngrade != null) {\n this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;\n }\n if (requestOptions.maxRedirects != null) {\n this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);\n }\n if (requestOptions.keepAlive != null) {\n this._keepAlive = requestOptions.keepAlive;\n }\n if (requestOptions.allowRetries != null) {\n this._allowRetries = requestOptions.allowRetries;\n }\n if (requestOptions.maxRetries != null) {\n this._maxRetries = requestOptions.maxRetries;\n }\n }\n }\n options(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});\n });\n }\n get(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('GET', requestUrl, null, additionalHeaders || {});\n });\n }\n del(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('DELETE', requestUrl, null, additionalHeaders || {});\n });\n }\n post(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('POST', requestUrl, data, additionalHeaders || {});\n });\n }\n patch(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PATCH', requestUrl, data, additionalHeaders || {});\n });\n }\n put(requestUrl, data, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('PUT', requestUrl, data, additionalHeaders || {});\n });\n }\n head(requestUrl, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request('HEAD', requestUrl, null, additionalHeaders || {});\n });\n }\n sendStream(verb, requestUrl, stream, additionalHeaders) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.request(verb, requestUrl, stream, additionalHeaders);\n });\n }\n /**\n * Gets a typed object from an endpoint\n * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise\n */\n getJson(requestUrl, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n const res = yield this.get(requestUrl, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n postJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.post(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n putJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.put(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n patchJson(requestUrl, obj, additionalHeaders = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = JSON.stringify(obj, null, 2);\n additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);\n additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);\n const res = yield this.patch(requestUrl, data, additionalHeaders);\n return this._processResponse(res, this.requestOptions);\n });\n }\n /**\n * Makes a raw http request.\n * All other methods such as get, post, patch, and request ultimately call this.\n * Prefer get, del, post and patch\n */\n request(verb, requestUrl, data, headers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._disposed) {\n throw new Error('Client has already been disposed.');\n }\n const parsedUrl = new URL(requestUrl);\n let info = this._prepareRequest(verb, parsedUrl, headers);\n // Only perform retries on reads since writes may not be idempotent.\n const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)\n ? this._maxRetries + 1\n : 1;\n let numTries = 0;\n let response;\n do {\n response = yield this.requestRaw(info, data);\n // Check if it's an authentication challenge\n if (response &&\n response.message &&\n response.message.statusCode === HttpCodes.Unauthorized) {\n let authenticationHandler;\n for (const handler of this.handlers) {\n if (handler.canHandleAuthentication(response)) {\n authenticationHandler = handler;\n break;\n }\n }\n if (authenticationHandler) {\n return authenticationHandler.handleAuthentication(this, info, data);\n }\n else {\n // We have received an unauthorized response but have no handlers to handle it.\n // Let the response return to the caller.\n return response;\n }\n }\n let redirectsRemaining = this._maxRedirects;\n while (response.message.statusCode &&\n HttpRedirectCodes.includes(response.message.statusCode) &&\n this._allowRedirects &&\n redirectsRemaining > 0) {\n const redirectUrl = response.message.headers['location'];\n if (!redirectUrl) {\n // if there's no location to redirect to, we won't\n break;\n }\n const parsedRedirectUrl = new URL(redirectUrl);\n if (parsedUrl.protocol === 'https:' &&\n parsedUrl.protocol !== parsedRedirectUrl.protocol &&\n !this._allowRedirectDowngrade) {\n throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');\n }\n // we need to finish reading the response before reassigning response\n // which will leak the open socket.\n yield response.readBody();\n // strip authorization header if redirected to a different hostname\n if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {\n for (const header in headers) {\n // header names are case insensitive\n if (header.toLowerCase() === 'authorization') {\n delete headers[header];\n }\n }\n }\n // let's make the request with the new redirectUrl\n info = this._prepareRequest(verb, parsedRedirectUrl, headers);\n response = yield this.requestRaw(info, data);\n redirectsRemaining--;\n }\n if (!response.message.statusCode ||\n !HttpResponseRetryCodes.includes(response.message.statusCode)) {\n // If not a retry code, return immediately instead of retrying\n return response;\n }\n numTries += 1;\n if (numTries < maxTries) {\n yield response.readBody();\n yield this._performExponentialBackoff(numTries);\n }\n } while (numTries < maxTries);\n return response;\n });\n }\n /**\n * Needs to be called if keepAlive is set to true in request options.\n */\n dispose() {\n if (this._agent) {\n this._agent.destroy();\n }\n this._disposed = true;\n }\n /**\n * Raw request.\n * @param info\n * @param data\n */\n requestRaw(info, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n function callbackForResult(err, res) {\n if (err) {\n reject(err);\n }\n else if (!res) {\n // If `err` is not passed, then `res` must be passed.\n reject(new Error('Unknown error'));\n }\n else {\n resolve(res);\n }\n }\n this.requestRawWithCallback(info, data, callbackForResult);\n });\n });\n }\n /**\n * Raw request with callback.\n * @param info\n * @param data\n * @param onResult\n */\n requestRawWithCallback(info, data, onResult) {\n if (typeof data === 'string') {\n if (!info.options.headers) {\n info.options.headers = {};\n }\n info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');\n }\n let callbackCalled = false;\n function handleResult(err, res) {\n if (!callbackCalled) {\n callbackCalled = true;\n onResult(err, res);\n }\n }\n const req = info.httpModule.request(info.options, (msg) => {\n const res = new HttpClientResponse(msg);\n handleResult(undefined, res);\n });\n let socket;\n req.on('socket', sock => {\n socket = sock;\n });\n // If we ever get disconnected, we want the socket to timeout eventually\n req.setTimeout(this._socketTimeout || 3 * 60000, () => {\n if (socket) {\n socket.end();\n }\n handleResult(new Error(`Request timeout: ${info.options.path}`));\n });\n req.on('error', function (err) {\n // err has statusCode property\n // res should have headers\n handleResult(err);\n });\n if (data && typeof data === 'string') {\n req.write(data, 'utf8');\n }\n if (data && typeof data !== 'string') {\n data.on('close', function () {\n req.end();\n });\n data.pipe(req);\n }\n else {\n req.end();\n }\n }\n /**\n * Gets an http agent. This function is useful when you need an http agent that handles\n * routing through a proxy server - depending upon the url and proxy environment variables.\n * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com\n */\n getAgent(serverUrl) {\n const parsedUrl = new URL(serverUrl);\n return this._getAgent(parsedUrl);\n }\n _prepareRequest(method, requestUrl, headers) {\n const info = {};\n info.parsedUrl = requestUrl;\n const usingSsl = info.parsedUrl.protocol === 'https:';\n info.httpModule = usingSsl ? https : http;\n const defaultPort = usingSsl ? 443 : 80;\n info.options = {};\n info.options.host = info.parsedUrl.hostname;\n info.options.port = info.parsedUrl.port\n ? parseInt(info.parsedUrl.port)\n : defaultPort;\n info.options.path =\n (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');\n info.options.method = method;\n info.options.headers = this._mergeHeaders(headers);\n if (this.userAgent != null) {\n info.options.headers['user-agent'] = this.userAgent;\n }\n info.options.agent = this._getAgent(info.parsedUrl);\n // gives handlers an opportunity to participate\n if (this.handlers) {\n for (const handler of this.handlers) {\n handler.prepareRequest(info.options);\n }\n }\n return info;\n }\n _mergeHeaders(headers) {\n if (this.requestOptions && this.requestOptions.headers) {\n return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));\n }\n return lowercaseKeys(headers || {});\n }\n _getExistingOrDefaultHeader(additionalHeaders, header, _default) {\n let clientHeader;\n if (this.requestOptions && this.requestOptions.headers) {\n clientHeader = lowercaseKeys(this.requestOptions.headers)[header];\n }\n return additionalHeaders[header] || clientHeader || _default;\n }\n _getAgent(parsedUrl) {\n let agent;\n const proxyUrl = pm.getProxyUrl(parsedUrl);\n const useProxy = proxyUrl && proxyUrl.hostname;\n if (this._keepAlive && useProxy) {\n agent = this._proxyAgent;\n }\n if (this._keepAlive && !useProxy) {\n agent = this._agent;\n }\n // if agent is already assigned use that agent.\n if (agent) {\n return agent;\n }\n const usingSsl = parsedUrl.protocol === 'https:';\n let maxSockets = 100;\n if (this.requestOptions) {\n maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;\n }\n // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.\n if (proxyUrl && proxyUrl.hostname) {\n const agentOptions = {\n maxSockets,\n keepAlive: this._keepAlive,\n proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {\n proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`\n })), { host: proxyUrl.hostname, port: proxyUrl.port })\n };\n let tunnelAgent;\n const overHttps = proxyUrl.protocol === 'https:';\n if (usingSsl) {\n tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;\n }\n else {\n tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;\n }\n agent = tunnelAgent(agentOptions);\n this._proxyAgent = agent;\n }\n // if reusing agent across request and tunneling agent isn't assigned create a new agent\n if (this._keepAlive && !agent) {\n const options = { keepAlive: this._keepAlive, maxSockets };\n agent = usingSsl ? new https.Agent(options) : new http.Agent(options);\n this._agent = agent;\n }\n // if not using private agent and tunnel agent isn't setup then use global agent\n if (!agent) {\n agent = usingSsl ? https.globalAgent : http.globalAgent;\n }\n if (usingSsl && this._ignoreSslError) {\n // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process\n // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options\n // we have to cast it to any and change it directly\n agent.options = Object.assign(agent.options || {}, {\n rejectUnauthorized: false\n });\n }\n return agent;\n }\n _performExponentialBackoff(retryNumber) {\n return __awaiter(this, void 0, void 0, function* () {\n retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);\n const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);\n return new Promise(resolve => setTimeout(() => resolve(), ms));\n });\n }\n _processResponse(res, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const statusCode = res.message.statusCode || 0;\n const response = {\n statusCode,\n result: null,\n headers: {}\n };\n // not found leads to null obj returned\n if (statusCode === HttpCodes.NotFound) {\n resolve(response);\n }\n // get the result from the body\n function dateTimeDeserializer(key, value) {\n if (typeof value === 'string') {\n const a = new Date(value);\n if (!isNaN(a.valueOf())) {\n return a;\n }\n }\n return value;\n }\n let obj;\n let contents;\n try {\n contents = yield res.readBody();\n if (contents && contents.length > 0) {\n if (options && options.deserializeDates) {\n obj = JSON.parse(contents, dateTimeDeserializer);\n }\n else {\n obj = JSON.parse(contents);\n }\n response.result = obj;\n }\n response.headers = res.message.headers;\n }\n catch (err) {\n // Invalid resource (contents not json); leaving result obj null\n }\n // note that 3xx redirects are handled by the http layer.\n if (statusCode > 299) {\n let msg;\n // if exception/error in body, attempt to get better error\n if (obj && obj.message) {\n msg = obj.message;\n }\n else if (contents && contents.length > 0) {\n // it may be the case that the exception is in the body message as string\n msg = contents;\n }\n else {\n msg = `Failed request: (${statusCode})`;\n }\n const err = new HttpClientError(msg, statusCode);\n err.result = response.result;\n reject(err);\n }\n else {\n resolve(response);\n }\n }));\n });\n }\n}\nexports.HttpClient = HttpClient;\nconst lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkBypass = exports.getProxyUrl = void 0;\nfunction getProxyUrl(reqUrl) {\n const usingSsl = reqUrl.protocol === 'https:';\n if (checkBypass(reqUrl)) {\n return undefined;\n }\n const proxyVar = (() => {\n if (usingSsl) {\n return process.env['https_proxy'] || process.env['HTTPS_PROXY'];\n }\n else {\n return process.env['http_proxy'] || process.env['HTTP_PROXY'];\n }\n })();\n if (proxyVar) {\n return new URL(proxyVar);\n }\n else {\n return undefined;\n }\n}\nexports.getProxyUrl = getProxyUrl;\nfunction checkBypass(reqUrl) {\n if (!reqUrl.hostname) {\n return false;\n }\n const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';\n if (!noProxy) {\n return false;\n }\n // Determine the request port\n let reqPort;\n if (reqUrl.port) {\n reqPort = Number(reqUrl.port);\n }\n else if (reqUrl.protocol === 'http:') {\n reqPort = 80;\n }\n else if (reqUrl.protocol === 'https:') {\n reqPort = 443;\n }\n // Format the request hostname and hostname with port\n const upperReqHosts = [reqUrl.hostname.toUpperCase()];\n if (typeof reqPort === 'number') {\n upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);\n }\n // Compare request host against noproxy\n for (const upperNoProxyItem of noProxy\n .split(',')\n .map(x => x.trim().toUpperCase())\n .filter(x => x)) {\n if (upperReqHosts.some(x => x === upperNoProxyItem)) {\n return true;\n }\n }\n return false;\n}\nexports.checkBypass = checkBypass;\n//# sourceMappingURL=proxy.js.map","(function () {\n require('./lib/main').config(\n Object.assign(\n {},\n require('./lib/env-options'),\n require('./lib/cli-options')(process.argv)\n )\n )\n})()\n","const re = /^dotenv_config_(encoding|path|debug|override)=(.+)$/\n\nmodule.exports = function optionMatcher (args) {\n return args.reduce(function (acc, cur) {\n const matches = cur.match(re)\n if (matches) {\n acc[matches[1]] = matches[2]\n }\n return acc\n }, {})\n}\n","// ../config.js accepts options via environment variables\nconst options = {}\n\nif (process.env.DOTENV_CONFIG_ENCODING != null) {\n options.encoding = process.env.DOTENV_CONFIG_ENCODING\n}\n\nif (process.env.DOTENV_CONFIG_PATH != null) {\n options.path = process.env.DOTENV_CONFIG_PATH\n}\n\nif (process.env.DOTENV_CONFIG_DEBUG != null) {\n options.debug = process.env.DOTENV_CONFIG_DEBUG\n}\n\nif (process.env.DOTENV_CONFIG_OVERRIDE != null) {\n options.override = process.env.DOTENV_CONFIG_OVERRIDE\n}\n\nmodule.exports = options\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parser src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n let dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (options) {\n if (options.path != null) {\n dotenvPath = _resolveHome(options.path)\n }\n if (options.encoding != null) {\n encoding = options.encoding\n }\n }\n\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(dotenvPath, { encoding }))\n\n Object.keys(parsed).forEach(function (key) {\n if (!Object.prototype.hasOwnProperty.call(process.env, key)) {\n process.env[key] = parsed[key]\n } else {\n if (override === true) {\n process.env[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _log(`\"${key}\" is already defined in \\`process.env\\` and WAS overwritten`)\n } else {\n _log(`\"${key}\" is already defined in \\`process.env\\` and was NOT overwritten`)\n }\n }\n }\n })\n\n return { parsed }\n } catch (e) {\n if (debug) {\n _log(`Failed to load ${dotenvPath} ${e.message}`)\n }\n\n return { error: e }\n }\n}\n\nconst DotenvModule = {\n config,\n parse\n}\n\nmodule.exports.config = DotenvModule.config\nmodule.exports.parse = DotenvModule.parse\nmodule.exports = DotenvModule\n","module.exports = require('./lib/tunnel');\n","'use strict';\n\nvar net = require('net');\nvar tls = require('tls');\nvar http = require('http');\nvar https = require('https');\nvar events = require('events');\nvar assert = require('assert');\nvar util = require('util');\n\n\nexports.httpOverHttp = httpOverHttp;\nexports.httpsOverHttp = httpsOverHttp;\nexports.httpOverHttps = httpOverHttps;\nexports.httpsOverHttps = httpsOverHttps;\n\n\nfunction httpOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n return agent;\n}\n\nfunction httpsOverHttp(options) {\n var agent = new TunnelingAgent(options);\n agent.request = http.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\nfunction httpOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n return agent;\n}\n\nfunction httpsOverHttps(options) {\n var agent = new TunnelingAgent(options);\n agent.request = https.request;\n agent.createSocket = createSecureSocket;\n agent.defaultPort = 443;\n return agent;\n}\n\n\nfunction TunnelingAgent(options) {\n var self = this;\n self.options = options || {};\n self.proxyOptions = self.options.proxy || {};\n self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;\n self.requests = [];\n self.sockets = [];\n\n self.on('free', function onFree(socket, host, port, localAddress) {\n var options = toOptions(host, port, localAddress);\n for (var i = 0, len = self.requests.length; i < len; ++i) {\n var pending = self.requests[i];\n if (pending.host === options.host && pending.port === options.port) {\n // Detect the request to connect same origin server,\n // reuse the connection.\n self.requests.splice(i, 1);\n pending.request.onSocket(socket);\n return;\n }\n }\n socket.destroy();\n self.removeSocket(socket);\n });\n}\nutil.inherits(TunnelingAgent, events.EventEmitter);\n\nTunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {\n var self = this;\n var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));\n\n if (self.sockets.length >= this.maxSockets) {\n // We are over limit so we'll add it to the queue.\n self.requests.push(options);\n return;\n }\n\n // If we are under maxSockets create a new one.\n self.createSocket(options, function(socket) {\n socket.on('free', onFree);\n socket.on('close', onCloseOrRemove);\n socket.on('agentRemove', onCloseOrRemove);\n req.onSocket(socket);\n\n function onFree() {\n self.emit('free', socket, options);\n }\n\n function onCloseOrRemove(err) {\n self.removeSocket(socket);\n socket.removeListener('free', onFree);\n socket.removeListener('close', onCloseOrRemove);\n socket.removeListener('agentRemove', onCloseOrRemove);\n }\n });\n};\n\nTunnelingAgent.prototype.createSocket = function createSocket(options, cb) {\n var self = this;\n var placeholder = {};\n self.sockets.push(placeholder);\n\n var connectOptions = mergeOptions({}, self.proxyOptions, {\n method: 'CONNECT',\n path: options.host + ':' + options.port,\n agent: false,\n headers: {\n host: options.host + ':' + options.port\n }\n });\n if (options.localAddress) {\n connectOptions.localAddress = options.localAddress;\n }\n if (connectOptions.proxyAuth) {\n connectOptions.headers = connectOptions.headers || {};\n connectOptions.headers['Proxy-Authorization'] = 'Basic ' +\n new Buffer(connectOptions.proxyAuth).toString('base64');\n }\n\n debug('making CONNECT request');\n var connectReq = self.request(connectOptions);\n connectReq.useChunkedEncodingByDefault = false; // for v0.6\n connectReq.once('response', onResponse); // for v0.6\n connectReq.once('upgrade', onUpgrade); // for v0.6\n connectReq.once('connect', onConnect); // for v0.7 or later\n connectReq.once('error', onError);\n connectReq.end();\n\n function onResponse(res) {\n // Very hacky. This is necessary to avoid http-parser leaks.\n res.upgrade = true;\n }\n\n function onUpgrade(res, socket, head) {\n // Hacky.\n process.nextTick(function() {\n onConnect(res, socket, head);\n });\n }\n\n function onConnect(res, socket, head) {\n connectReq.removeAllListeners();\n socket.removeAllListeners();\n\n if (res.statusCode !== 200) {\n debug('tunneling socket could not be established, statusCode=%d',\n res.statusCode);\n socket.destroy();\n var error = new Error('tunneling socket could not be established, ' +\n 'statusCode=' + res.statusCode);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n if (head.length > 0) {\n debug('got illegal response body from proxy');\n socket.destroy();\n var error = new Error('got illegal response body from proxy');\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n return;\n }\n debug('tunneling connection has established');\n self.sockets[self.sockets.indexOf(placeholder)] = socket;\n return cb(socket);\n }\n\n function onError(cause) {\n connectReq.removeAllListeners();\n\n debug('tunneling socket could not be established, cause=%s\\n',\n cause.message, cause.stack);\n var error = new Error('tunneling socket could not be established, ' +\n 'cause=' + cause.message);\n error.code = 'ECONNRESET';\n options.request.emit('error', error);\n self.removeSocket(placeholder);\n }\n};\n\nTunnelingAgent.prototype.removeSocket = function removeSocket(socket) {\n var pos = this.sockets.indexOf(socket)\n if (pos === -1) {\n return;\n }\n this.sockets.splice(pos, 1);\n\n var pending = this.requests.shift();\n if (pending) {\n // If we have pending requests and a socket gets closed a new one\n // needs to be created to take over in the pool for the one that closed.\n this.createSocket(pending, function(socket) {\n pending.request.onSocket(socket);\n });\n }\n};\n\nfunction createSecureSocket(options, cb) {\n var self = this;\n TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {\n var hostHeader = options.request.getHeader('host');\n var tlsOptions = mergeOptions({}, self.options, {\n socket: socket,\n servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host\n });\n\n // 0 is dummy port for v0.6\n var secureSocket = tls.connect(0, tlsOptions);\n self.sockets[self.sockets.indexOf(socket)] = secureSocket;\n cb(secureSocket);\n });\n}\n\n\nfunction toOptions(host, port, localAddress) {\n if (typeof host === 'string') { // since v0.10\n return {\n host: host,\n port: port,\n localAddress: localAddress\n };\n }\n return host; // for v0.11 or later\n}\n\nfunction mergeOptions(target) {\n for (var i = 1, len = arguments.length; i < len; ++i) {\n var overrides = arguments[i];\n if (typeof overrides === 'object') {\n var keys = Object.keys(overrides);\n for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {\n var k = keys[j];\n if (overrides[k] !== undefined) {\n target[k] = overrides[k];\n }\n }\n }\n }\n return target;\n}\n\n\nvar debug;\nif (process.env.NODE_DEBUG && /\\btunnel\\b/.test(process.env.NODE_DEBUG)) {\n debug = function() {\n var args = Array.prototype.slice.call(arguments);\n if (typeof args[0] === 'string') {\n args[0] = 'TUNNEL: ' + args[0];\n } else {\n args.unshift('TUNNEL:');\n }\n console.error.apply(console, args);\n }\n} else {\n debug = function() {};\n}\nexports.debug = debug; // for test\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FormDataHelper = void 0;\nconst helpers_1 = require(\"../helpers\");\n// This class is partially inspired by https://github.com/form-data/form-data/blob/master/lib/form_data.js\n// All credits to their authors.\nclass FormDataHelper {\n constructor() {\n this._boundary = '';\n this._chunks = [];\n }\n bodyAppend(...values) {\n const allAsBuffer = values.map(val => val instanceof Buffer ? val : Buffer.from(val));\n this._chunks.push(...allAsBuffer);\n }\n append(field, value, contentType) {\n const convertedValue = value instanceof Buffer ? value : value.toString();\n const header = this.getMultipartHeader(field, convertedValue, contentType);\n this.bodyAppend(header, convertedValue, FormDataHelper.LINE_BREAK);\n }\n getHeaders() {\n return {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary(),\n };\n }\n /** Length of form-data (including footer length). */\n getLength() {\n return this._chunks.reduce((acc, cur) => acc + cur.length, this.getMultipartFooter().length);\n }\n getBuffer() {\n const allChunks = [...this._chunks, this.getMultipartFooter()];\n const totalBuffer = Buffer.alloc(this.getLength());\n let i = 0;\n for (const chunk of allChunks) {\n for (let j = 0; j < chunk.length; i++, j++) {\n totalBuffer[i] = chunk[j];\n }\n }\n return totalBuffer;\n }\n getBoundary() {\n if (!this._boundary) {\n this.generateBoundary();\n }\n return this._boundary;\n }\n generateBoundary() {\n // This generates a 50 character boundary similar to those used by Firefox.\n let boundary = '--------------------------';\n for (let i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n this._boundary = boundary;\n }\n getMultipartHeader(field, value, contentType) {\n // In this lib no need to guess more the content type, octet stream is ok of buffers\n if (!contentType) {\n contentType = value instanceof Buffer ? FormDataHelper.DEFAULT_CONTENT_TYPE : '';\n }\n const headers = {\n 'Content-Disposition': ['form-data', `name=\"${field}\"`],\n 'Content-Type': contentType,\n };\n let contents = '';\n for (const [prop, header] of Object.entries(headers)) {\n // skip nullish headers.\n if (!header.length) {\n continue;\n }\n contents += prop + ': ' + (0, helpers_1.arrayWrap)(header).join('; ') + FormDataHelper.LINE_BREAK;\n }\n return '--' + this.getBoundary() + FormDataHelper.LINE_BREAK + contents + FormDataHelper.LINE_BREAK;\n }\n getMultipartFooter() {\n if (this._footerChunk) {\n return this._footerChunk;\n }\n return this._footerChunk = Buffer.from('--' + this.getBoundary() + '--' + FormDataHelper.LINE_BREAK);\n }\n}\nexports.FormDataHelper = FormDataHelper;\nFormDataHelper.LINE_BREAK = '\\r\\n';\nFormDataHelper.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OAuth1Helper = void 0;\nconst crypto = __importStar(require(\"crypto\"));\nclass OAuth1Helper {\n constructor(options) {\n this.nonceLength = 32;\n this.consumerKeys = options.consumerKeys;\n }\n static percentEncode(str) {\n return encodeURIComponent(str)\n .replace(/!/g, '%21')\n .replace(/\\*/g, '%2A')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29');\n }\n hash(base, key) {\n return crypto\n .createHmac('sha1', key)\n .update(base)\n .digest('base64');\n }\n authorize(request, accessTokens = {}) {\n const oauthInfo = {\n oauth_consumer_key: this.consumerKeys.key,\n oauth_nonce: this.getNonce(),\n oauth_signature_method: 'HMAC-SHA1',\n oauth_timestamp: this.getTimestamp(),\n oauth_version: '1.0',\n };\n if (accessTokens.key !== undefined) {\n oauthInfo.oauth_token = accessTokens.key;\n }\n if (!request.data) {\n request.data = {};\n }\n oauthInfo.oauth_signature = this.getSignature(request, accessTokens.secret, oauthInfo);\n return oauthInfo;\n }\n toHeader(oauthInfo) {\n const sorted = sortObject(oauthInfo);\n let header_value = 'OAuth ';\n for (const element of sorted) {\n if (element.key.indexOf('oauth_') !== 0) {\n continue;\n }\n header_value += OAuth1Helper.percentEncode(element.key) + '=\"' + OAuth1Helper.percentEncode(element.value) + '\",';\n }\n return {\n // Remove the last ,\n Authorization: header_value.slice(0, header_value.length - 1),\n };\n }\n getNonce() {\n const wordCharacters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n let result = '';\n for (let i = 0; i < this.nonceLength; i++) {\n result += wordCharacters[Math.trunc(Math.random() * wordCharacters.length)];\n }\n return result;\n }\n getTimestamp() {\n return Math.trunc(new Date().getTime() / 1000);\n }\n getSignature(request, tokenSecret, oauthInfo) {\n return this.hash(this.getBaseString(request, oauthInfo), this.getSigningKey(tokenSecret));\n }\n getSigningKey(tokenSecret) {\n return OAuth1Helper.percentEncode(this.consumerKeys.secret) + '&' + OAuth1Helper.percentEncode(tokenSecret || '');\n }\n getBaseString(request, oauthInfo) {\n return request.method.toUpperCase() + '&'\n + OAuth1Helper.percentEncode(this.getBaseUrl(request.url)) + '&'\n + OAuth1Helper.percentEncode(this.getParameterString(request, oauthInfo));\n }\n getParameterString(request, oauthInfo) {\n const baseStringData = sortObject(percentEncodeData(mergeObject(oauthInfo, mergeObject(request.data, deParamUrl(request.url)))));\n let dataStr = '';\n for (const { key, value } of baseStringData) {\n // check if the value is an array\n // this means that this key has multiple values\n if (value && Array.isArray(value)) {\n // sort the array first\n value.sort();\n let valString = '';\n // serialize all values for this key: e.g. formkey=formvalue1&formkey=formvalue2\n value.forEach((item, i) => {\n valString += key + '=' + item;\n if (i < value.length) {\n valString += '&';\n }\n });\n dataStr += valString;\n }\n else {\n dataStr += key + '=' + value + '&';\n }\n }\n // Remove the last character\n return dataStr.slice(0, dataStr.length - 1);\n }\n getBaseUrl(url) {\n return url.split('?')[0];\n }\n}\nexports.OAuth1Helper = OAuth1Helper;\nexports.default = OAuth1Helper;\n// Helper functions //\nfunction mergeObject(obj1, obj2) {\n return {\n ...obj1 || {},\n ...obj2 || {},\n };\n}\nfunction sortObject(data) {\n return Object.keys(data)\n .sort()\n .map(key => ({ key, value: data[key] }));\n}\nfunction deParam(string) {\n const splitted = string.split('&');\n const data = {};\n for (const coupleKeyValue of splitted) {\n const [key, value = ''] = coupleKeyValue.split('=');\n // check if the key already exists\n // this can occur if the QS part of the url contains duplicate keys like this: ?formkey=formvalue1&formkey=formvalue2\n if (data[key]) {\n // the key exists already\n if (!Array.isArray(data[key])) {\n // replace the value with an array containing the already present value\n data[key] = [data[key]];\n }\n // and add the new found value to it\n data[key].push(decodeURIComponent(value));\n }\n else {\n // it doesn't exist, just put the found value in the data object\n data[key] = decodeURIComponent(value);\n }\n }\n return data;\n}\nfunction deParamUrl(url) {\n const tmp = url.split('?');\n if (tmp.length === 1)\n return {};\n return deParam(tmp[1]);\n}\nfunction percentEncodeData(data) {\n const result = {};\n for (const key in data) {\n let value = data[key];\n // check if the value is an array\n if (value && Array.isArray(value)) {\n value = value.map(v => OAuth1Helper.percentEncode(v));\n }\n else {\n value = OAuth1Helper.percentEncode(value);\n }\n result[OAuth1Helper.percentEncode(key)] = value;\n }\n return result;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OAuth2Helper = void 0;\nconst crypto = __importStar(require(\"crypto\"));\nclass OAuth2Helper {\n static getCodeVerifier() {\n return this.generateRandomString(128);\n }\n static getCodeChallengeFromVerifier(verifier) {\n return this.escapeBase64Url(crypto\n .createHash('sha256')\n .update(verifier)\n .digest('base64'));\n }\n static getAuthHeader(clientId, clientSecret) {\n const key = encodeURIComponent(clientId) + ':' + encodeURIComponent(clientSecret);\n return Buffer.from(key).toString('base64');\n }\n static generateRandomString(length) {\n let text = '';\n const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n for (let i = 0; i < length; i++) {\n text += possible[Math.floor(Math.random() * possible.length)];\n }\n return text;\n }\n static escapeBase64Url(string) {\n return string.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n }\n}\nexports.OAuth2Helper = OAuth2Helper;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestHandlerHelper = void 0;\nconst https_1 = require(\"https\");\nconst settings_1 = require(\"../settings\");\nconst TweetStream_1 = __importDefault(require(\"../stream/TweetStream\"));\nconst types_1 = require(\"../types\");\nconst zlib = __importStar(require(\"zlib\"));\nclass RequestHandlerHelper {\n constructor(requestData) {\n this.requestData = requestData;\n this.requestErrorHandled = false;\n this.responseData = [];\n }\n /* Request helpers */\n get hrefPathname() {\n const url = this.requestData.url;\n return url.hostname + url.pathname;\n }\n isCompressionDisabled() {\n return !this.requestData.compression || this.requestData.compression === 'identity';\n }\n isFormEncodedEndpoint() {\n return this.requestData.url.href.startsWith('https://api.twitter.com/oauth/');\n }\n /* Error helpers */\n createRequestError(error) {\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log('Request error:', error);\n }\n return new types_1.ApiRequestError('Request failed.', {\n request: this.req,\n error,\n });\n }\n createPartialResponseError(error, abortClose) {\n const res = this.res;\n let message = `Request failed with partial response with HTTP code ${res.statusCode}`;\n if (abortClose) {\n message += ' (connection abruptly closed)';\n }\n else {\n message += ' (parse error)';\n }\n return new types_1.ApiPartialResponseError(message, {\n request: this.req,\n response: this.res,\n responseError: error,\n rawContent: Buffer.concat(this.responseData).toString(),\n });\n }\n formatV1Errors(errors) {\n return errors\n .map(({ code, message }) => `${message} (Twitter code ${code})`)\n .join(', ');\n }\n formatV2Error(error) {\n return `${error.title}: ${error.detail} (see ${error.type})`;\n }\n createResponseError({ res, data, rateLimit, code }) {\n var _a;\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log(`Request failed with code ${code}, data:`, data);\n settings_1.TwitterApiV2Settings.logger.log('Response headers:', res.headers);\n }\n // Errors formatting.\n let errorString = `Request failed with code ${code}`;\n if ((_a = data === null || data === void 0 ? void 0 : data.errors) === null || _a === void 0 ? void 0 : _a.length) {\n const errors = data.errors;\n if ('code' in errors[0]) {\n errorString += ' - ' + this.formatV1Errors(errors);\n }\n else {\n errorString += ' - ' + this.formatV2Error(data);\n }\n }\n return new types_1.ApiResponseError(errorString, {\n code,\n data,\n headers: res.headers,\n request: this.req,\n response: res,\n rateLimit,\n });\n }\n /* Response helpers */\n getResponseDataStream(res) {\n if (this.isCompressionDisabled()) {\n return res;\n }\n const contentEncoding = (res.headers['content-encoding'] || 'identity').trim().toLowerCase();\n if (contentEncoding === 'br') {\n const brotli = zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n });\n res.pipe(brotli);\n return brotli;\n }\n if (contentEncoding === 'gzip') {\n const gunzip = zlib.createGunzip({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n res.pipe(gunzip);\n return gunzip;\n }\n if (contentEncoding === 'deflate') {\n const inflate = zlib.createInflate({\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n res.pipe(inflate);\n return inflate;\n }\n return res;\n }\n detectResponseType(res) {\n var _a, _b;\n // Auto parse if server responds with JSON body\n if (((_a = res.headers['content-type']) === null || _a === void 0 ? void 0 : _a.includes('application/json')) || ((_b = res.headers['content-type']) === null || _b === void 0 ? void 0 : _b.includes('application/problem+json'))) {\n return 'json';\n }\n // f-e oauth token endpoints\n else if (this.isFormEncodedEndpoint()) {\n return 'url';\n }\n return 'text';\n }\n getParsedResponse(res) {\n const data = this.responseData;\n const mode = this.requestData.forceParseMode || this.detectResponseType(res);\n if (mode === 'buffer') {\n return Buffer.concat(data);\n }\n else if (mode === 'text') {\n return Buffer.concat(data).toString();\n }\n else if (mode === 'json') {\n const asText = Buffer.concat(data).toString();\n return asText.length ? JSON.parse(asText) : undefined;\n }\n else if (mode === 'url') {\n const asText = Buffer.concat(data).toString();\n const formEntries = {};\n for (const [item, value] of new URLSearchParams(asText)) {\n formEntries[item] = value;\n }\n return formEntries;\n }\n else {\n // mode === 'none'\n return undefined;\n }\n }\n getRateLimitFromResponse(res) {\n let rateLimit = undefined;\n if (res.headers['x-rate-limit-limit']) {\n rateLimit = {\n limit: Number(res.headers['x-rate-limit-limit']),\n remaining: Number(res.headers['x-rate-limit-remaining']),\n reset: Number(res.headers['x-rate-limit-reset']),\n };\n if (this.requestData.rateLimitSaver) {\n this.requestData.rateLimitSaver(rateLimit);\n }\n }\n return rateLimit;\n }\n /* Request event handlers */\n onSocketEventHandler(reject, socket) {\n socket.on('close', this.onSocketCloseHandler.bind(this, reject));\n }\n onSocketCloseHandler(reject) {\n this.req.removeAllListeners('timeout');\n const res = this.res;\n if (res) {\n // Response ok, res.close/res.end can handle request ending\n return;\n }\n if (!this.requestErrorHandled) {\n return reject(this.createRequestError(new Error('Socket closed without any information.')));\n }\n // else: other situation\n }\n requestErrorHandler(reject, requestError) {\n var _a, _b;\n (_b = (_a = this.requestData).requestEventDebugHandler) === null || _b === void 0 ? void 0 : _b.call(_a, 'request-error', { requestError });\n this.requestErrorHandled = true;\n reject(this.createRequestError(requestError));\n }\n timeoutErrorHandler() {\n this.requestErrorHandled = true;\n this.req.destroy(new Error('Request timeout.'));\n }\n /* Response event handlers */\n classicResponseHandler(resolve, reject, res) {\n this.res = res;\n const dataStream = this.getResponseDataStream(res);\n // Register the response data\n dataStream.on('data', chunk => this.responseData.push(chunk));\n dataStream.on('end', this.onResponseEndHandler.bind(this, resolve, reject));\n dataStream.on('close', this.onResponseCloseHandler.bind(this, resolve, reject));\n // Debug handlers\n if (this.requestData.requestEventDebugHandler) {\n this.requestData.requestEventDebugHandler('response', { res });\n res.on('aborted', error => this.requestData.requestEventDebugHandler('response-aborted', { error }));\n res.on('error', error => this.requestData.requestEventDebugHandler('response-error', { error }));\n res.on('close', () => this.requestData.requestEventDebugHandler('response-close', { data: this.responseData }));\n res.on('end', () => this.requestData.requestEventDebugHandler('response-end'));\n }\n }\n onResponseEndHandler(resolve, reject) {\n const rateLimit = this.getRateLimitFromResponse(this.res);\n let data;\n try {\n data = this.getParsedResponse(this.res);\n }\n catch (e) {\n reject(this.createPartialResponseError(e, false));\n return;\n }\n // Handle bad error codes\n const code = this.res.statusCode;\n if (code >= 400) {\n reject(this.createResponseError({ data, res: this.res, rateLimit, code }));\n return;\n }\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log(`[${this.requestData.options.method} ${this.hrefPathname}]: Request succeeds with code ${this.res.statusCode}`);\n settings_1.TwitterApiV2Settings.logger.log('Response body:', data);\n }\n resolve({\n data,\n headers: this.res.headers,\n rateLimit,\n });\n }\n onResponseCloseHandler(resolve, reject) {\n const res = this.res;\n if (res.aborted) {\n // Try to parse the request (?)\n try {\n this.getParsedResponse(this.res);\n // Ok, try to resolve normally the request\n return this.onResponseEndHandler(resolve, reject);\n }\n catch (e) {\n // Parse error, just drop with content\n return reject(this.createPartialResponseError(e, true));\n }\n }\n if (!res.complete) {\n return reject(this.createPartialResponseError(new Error('Response has been interrupted before response could be parsed.'), true));\n }\n // else: end has been called\n }\n streamResponseHandler(resolve, reject, res) {\n const code = res.statusCode;\n if (code < 400) {\n if (settings_1.TwitterApiV2Settings.debug) {\n settings_1.TwitterApiV2Settings.logger.log(`[${this.requestData.options.method} ${this.hrefPathname}]: Request succeeds with code ${res.statusCode} (starting stream)`);\n }\n const dataStream = this.getResponseDataStream(res);\n // HTTP code ok, consume stream\n resolve({ req: this.req, res: dataStream, originalResponse: res, requestData: this.requestData });\n }\n else {\n // Handle response normally, can only rejects\n this.classicResponseHandler(() => undefined, reject, res);\n }\n }\n /* Wrappers for request lifecycle */\n debugRequest() {\n const url = this.requestData.url;\n settings_1.TwitterApiV2Settings.logger.log(`[${this.requestData.options.method} ${this.hrefPathname}]`, this.requestData.options);\n if (url.search) {\n settings_1.TwitterApiV2Settings.logger.log('Request parameters:', [...url.searchParams.entries()].map(([key, value]) => `${key}: ${value}`));\n }\n if (this.requestData.body) {\n settings_1.TwitterApiV2Settings.logger.log('Request body:', this.requestData.body);\n }\n }\n buildRequest() {\n var _a;\n const url = this.requestData.url;\n const auth = url.username ? `${url.username}:${url.password}` : undefined;\n const headers = (_a = this.requestData.options.headers) !== null && _a !== void 0 ? _a : {};\n if (this.requestData.compression === true || this.requestData.compression === 'brotli') {\n headers['accept-encoding'] = 'br;q=1.0, gzip;q=0.8, deflate;q=0.5, *;q=0.1';\n }\n else if (this.requestData.compression === 'gzip') {\n headers['accept-encoding'] = 'gzip;q=1, deflate;q=0.5, *;q=0.1';\n }\n else if (this.requestData.compression === 'deflate') {\n headers['accept-encoding'] = 'deflate;q=1, *;q=0.1';\n }\n if (settings_1.TwitterApiV2Settings.debug) {\n this.debugRequest();\n }\n this.req = (0, https_1.request)({\n ...this.requestData.options,\n // Define URL params manually, addresses dependencies error https://github.com/PLhery/node-twitter-api-v2/issues/94\n host: url.hostname,\n port: url.port || undefined,\n path: url.pathname + url.search,\n protocol: url.protocol,\n auth,\n headers,\n });\n }\n registerRequestEventDebugHandlers(req) {\n req.on('close', () => this.requestData.requestEventDebugHandler('close'));\n req.on('abort', () => this.requestData.requestEventDebugHandler('abort'));\n req.on('socket', socket => {\n this.requestData.requestEventDebugHandler('socket', { socket });\n socket.on('error', error => this.requestData.requestEventDebugHandler('socket-error', { socket, error }));\n socket.on('connect', () => this.requestData.requestEventDebugHandler('socket-connect', { socket }));\n socket.on('close', withError => this.requestData.requestEventDebugHandler('socket-close', { socket, withError }));\n socket.on('end', () => this.requestData.requestEventDebugHandler('socket-end', { socket }));\n socket.on('lookup', (...data) => this.requestData.requestEventDebugHandler('socket-lookup', { socket, data }));\n socket.on('timeout', () => this.requestData.requestEventDebugHandler('socket-timeout', { socket }));\n });\n }\n makeRequest() {\n this.buildRequest();\n return new Promise((resolve, reject) => {\n const req = this.req;\n // Handle request errors\n req.on('error', this.requestErrorHandler.bind(this, reject));\n req.on('socket', this.onSocketEventHandler.bind(this, reject));\n req.on('response', this.classicResponseHandler.bind(this, resolve, reject));\n if (this.requestData.options.timeout) {\n req.on('timeout', this.timeoutErrorHandler.bind(this));\n }\n // Debug handlers\n if (this.requestData.requestEventDebugHandler) {\n this.registerRequestEventDebugHandlers(req);\n }\n if (this.requestData.body) {\n req.write(this.requestData.body);\n }\n req.end();\n });\n }\n async makeRequestAsStream() {\n const { req, res, requestData, originalResponse } = await this.makeRequestAndResolveWhenReady();\n return new TweetStream_1.default(requestData, { req, res, originalResponse });\n }\n makeRequestAndResolveWhenReady() {\n this.buildRequest();\n return new Promise((resolve, reject) => {\n const req = this.req;\n // Handle request errors\n req.on('error', this.requestErrorHandler.bind(this, reject));\n req.on('response', this.streamResponseHandler.bind(this, resolve, reject));\n if (this.requestData.body) {\n req.write(this.requestData.body);\n }\n req.end();\n });\n }\n}\nexports.RequestHandlerHelper = RequestHandlerHelper;\nexports.default = RequestHandlerHelper;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientRequestMaker = void 0;\nconst types_1 = require(\"../types\");\nconst TweetStream_1 = __importDefault(require(\"../stream/TweetStream\"));\nconst helpers_1 = require(\"../plugins/helpers\");\nconst helpers_2 = require(\"../helpers\");\nconst oauth1_helper_1 = __importDefault(require(\"./oauth1.helper\"));\nconst request_handler_helper_1 = __importDefault(require(\"./request-handler.helper\"));\nconst request_param_helper_1 = __importDefault(require(\"./request-param.helper\"));\nconst oauth2_helper_1 = require(\"./oauth2.helper\");\nclass ClientRequestMaker {\n constructor(settings) {\n this.rateLimits = {};\n this.clientSettings = {};\n if (settings) {\n this.clientSettings = settings;\n }\n }\n /** @deprecated - Switch to `@twitter-api-v2/plugin-rate-limit` */\n getRateLimits() {\n return this.rateLimits;\n }\n saveRateLimit(originalUrl, rateLimit) {\n this.rateLimits[originalUrl] = rateLimit;\n }\n /** Send a new request and returns a wrapped `Promise`. */\n async send(requestParams) {\n var _a, _b, _c, _d, _e;\n // Pre-request config hooks\n if ((_a = this.clientSettings.plugins) === null || _a === void 0 ? void 0 : _a.length) {\n const possibleResponse = await this.applyPreRequestConfigHooks(requestParams);\n if (possibleResponse) {\n return possibleResponse;\n }\n }\n const args = this.getHttpRequestArgs(requestParams);\n const options = {\n method: args.method,\n headers: args.headers,\n timeout: requestParams.timeout,\n agent: this.clientSettings.httpAgent,\n };\n const enableRateLimitSave = requestParams.enableRateLimitSave !== false;\n if (args.body) {\n request_param_helper_1.default.setBodyLengthHeader(options, args.body);\n }\n // Pre-request hooks\n if ((_b = this.clientSettings.plugins) === null || _b === void 0 ? void 0 : _b.length) {\n await this.applyPreRequestHooks(requestParams, args, options);\n }\n let request = new request_handler_helper_1.default({\n url: args.url,\n options,\n body: args.body,\n rateLimitSaver: enableRateLimitSave ? this.saveRateLimit.bind(this, args.rawUrl) : undefined,\n requestEventDebugHandler: requestParams.requestEventDebugHandler,\n compression: (_d = (_c = requestParams.compression) !== null && _c !== void 0 ? _c : this.clientSettings.compression) !== null && _d !== void 0 ? _d : true,\n forceParseMode: requestParams.forceParseMode,\n })\n .makeRequest();\n if ((0, helpers_1.hasRequestErrorPlugins)(this)) {\n request = this.applyResponseErrorHooks(requestParams, args, options, request);\n }\n const response = await request;\n // Post-request hooks\n if ((_e = this.clientSettings.plugins) === null || _e === void 0 ? void 0 : _e.length) {\n const responseOverride = await this.applyPostRequestHooks(requestParams, args, options, response);\n if (responseOverride) {\n return responseOverride.value;\n }\n }\n return response;\n }\n sendStream(requestParams) {\n var _a, _b;\n // Pre-request hooks\n if (this.clientSettings.plugins) {\n this.applyPreStreamRequestConfigHooks(requestParams);\n }\n const args = this.getHttpRequestArgs(requestParams);\n const options = {\n method: args.method,\n headers: args.headers,\n agent: this.clientSettings.httpAgent,\n };\n const enableRateLimitSave = requestParams.enableRateLimitSave !== false;\n const enableAutoConnect = requestParams.autoConnect !== false;\n if (args.body) {\n request_param_helper_1.default.setBodyLengthHeader(options, args.body);\n }\n const requestData = {\n url: args.url,\n options,\n body: args.body,\n rateLimitSaver: enableRateLimitSave ? this.saveRateLimit.bind(this, args.rawUrl) : undefined,\n payloadIsError: requestParams.payloadIsError,\n compression: (_b = (_a = requestParams.compression) !== null && _a !== void 0 ? _a : this.clientSettings.compression) !== null && _b !== void 0 ? _b : true,\n };\n const stream = new TweetStream_1.default(requestData);\n if (!enableAutoConnect) {\n return stream;\n }\n return stream.connect();\n }\n /* Token helpers */\n initializeToken(token) {\n if (typeof token === 'string') {\n this.bearerToken = token;\n }\n else if (typeof token === 'object' && 'appKey' in token) {\n this.consumerToken = token.appKey;\n this.consumerSecret = token.appSecret;\n if (token.accessToken && token.accessSecret) {\n this.accessToken = token.accessToken;\n this.accessSecret = token.accessSecret;\n }\n this._oauth = this.buildOAuth();\n }\n else if (typeof token === 'object' && 'username' in token) {\n const key = encodeURIComponent(token.username) + ':' + encodeURIComponent(token.password);\n this.basicToken = Buffer.from(key).toString('base64');\n }\n else if (typeof token === 'object' && 'clientId' in token) {\n this.clientId = token.clientId;\n this.clientSecret = token.clientSecret;\n }\n }\n getActiveTokens() {\n if (this.bearerToken) {\n return {\n type: 'oauth2',\n bearerToken: this.bearerToken,\n };\n }\n else if (this.basicToken) {\n return {\n type: 'basic',\n token: this.basicToken,\n };\n }\n else if (this.consumerSecret && this._oauth) {\n return {\n type: 'oauth-1.0a',\n appKey: this.consumerToken,\n appSecret: this.consumerSecret,\n accessToken: this.accessToken,\n accessSecret: this.accessSecret,\n };\n }\n else if (this.clientId) {\n return {\n type: 'oauth2-user',\n clientId: this.clientId,\n };\n }\n return { type: 'none' };\n }\n buildOAuth() {\n if (!this.consumerSecret || !this.consumerToken)\n throw new Error('Invalid consumer tokens');\n return new oauth1_helper_1.default({\n consumerKeys: { key: this.consumerToken, secret: this.consumerSecret },\n });\n }\n getOAuthAccessTokens() {\n if (!this.accessSecret || !this.accessToken)\n return;\n return {\n key: this.accessToken,\n secret: this.accessSecret,\n };\n }\n /* Plugin helpers */\n getPlugins() {\n var _a;\n return (_a = this.clientSettings.plugins) !== null && _a !== void 0 ? _a : [];\n }\n hasPlugins() {\n var _a;\n return !!((_a = this.clientSettings.plugins) === null || _a === void 0 ? void 0 : _a.length);\n }\n async applyPluginMethod(method, args) {\n var _a;\n let returnValue;\n for (const plugin of this.getPlugins()) {\n const value = await ((_a = plugin[method]) === null || _a === void 0 ? void 0 : _a.call(plugin, args));\n if (value && value instanceof types_1.TwitterApiPluginResponseOverride) {\n returnValue = value;\n }\n }\n return returnValue;\n }\n /* Request helpers */\n writeAuthHeaders({ headers, bodyInSignature, url, method, query, body }) {\n headers = { ...headers };\n if (this.bearerToken) {\n headers.Authorization = 'Bearer ' + this.bearerToken;\n }\n else if (this.basicToken) {\n // Basic auth, to request a bearer token\n headers.Authorization = 'Basic ' + this.basicToken;\n }\n else if (this.clientId && this.clientSecret) {\n // Basic auth with clientId + clientSecret\n headers.Authorization = 'Basic ' + oauth2_helper_1.OAuth2Helper.getAuthHeader(this.clientId, this.clientSecret);\n }\n else if (this.consumerSecret && this._oauth) {\n // Merge query and body\n const data = bodyInSignature ? request_param_helper_1.default.mergeQueryAndBodyForOAuth(query, body) : query;\n const auth = this._oauth.authorize({\n url: url.toString(),\n method,\n data,\n }, this.getOAuthAccessTokens());\n headers = { ...headers, ...this._oauth.toHeader(auth) };\n }\n return headers;\n }\n getUrlObjectFromUrlString(url) {\n // Add protocol to URL if needed\n if (!url.startsWith('http')) {\n url = 'https://' + url;\n }\n // Convert URL to object that will receive all URL modifications\n return new URL(url);\n }\n getHttpRequestArgs({ url: stringUrl, method, query: rawQuery = {}, body: rawBody = {}, headers, forceBodyMode, enableAuth, params, }) {\n let body = undefined;\n method = method.toUpperCase();\n headers = headers !== null && headers !== void 0 ? headers : {};\n // Add user agent header (Twitter recommends it)\n if (!headers['x-user-agent']) {\n headers['x-user-agent'] = 'Node.twitter-api-v2';\n }\n const url = this.getUrlObjectFromUrlString(stringUrl);\n // URL without query string to save as endpoint name\n const rawUrl = url.origin + url.pathname;\n // Apply URL parameters\n if (params) {\n request_param_helper_1.default.applyRequestParametersToUrl(url, params);\n }\n // Build a URL without anything in QS, and QSP in query\n const query = request_param_helper_1.default.formatQueryToString(rawQuery);\n request_param_helper_1.default.moveUrlQueryParamsIntoObject(url, query);\n // Delete undefined parameters\n if (!(rawBody instanceof Buffer)) {\n (0, helpers_2.trimUndefinedProperties)(rawBody);\n }\n // OAuth signature should not include parameters when using multipart.\n const bodyType = forceBodyMode !== null && forceBodyMode !== void 0 ? forceBodyMode : request_param_helper_1.default.autoDetectBodyType(url);\n // If undefined or true, enable auth by headers\n if (enableAuth !== false) {\n // OAuth needs body signature only if body is URL encoded.\n const bodyInSignature = ClientRequestMaker.BODY_METHODS.has(method) && bodyType === 'url';\n headers = this.writeAuthHeaders({ headers, bodyInSignature, method, query, url, body: rawBody });\n }\n if (ClientRequestMaker.BODY_METHODS.has(method)) {\n body = request_param_helper_1.default.constructBodyParams(rawBody, headers, bodyType) || undefined;\n }\n request_param_helper_1.default.addQueryParamsToUrl(url, query);\n return {\n rawUrl,\n url,\n method,\n headers,\n body,\n };\n }\n /* Plugin helpers */\n async applyPreRequestConfigHooks(requestParams) {\n var _a;\n const url = this.getUrlObjectFromUrlString(requestParams.url);\n for (const plugin of this.getPlugins()) {\n const result = await ((_a = plugin.onBeforeRequestConfig) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n client: this,\n url,\n params: requestParams,\n }));\n if (result) {\n return result;\n }\n }\n }\n applyPreStreamRequestConfigHooks(requestParams) {\n var _a;\n const url = this.getUrlObjectFromUrlString(requestParams.url);\n for (const plugin of this.getPlugins()) {\n (_a = plugin.onBeforeStreamRequestConfig) === null || _a === void 0 ? void 0 : _a.call(plugin, {\n client: this,\n url,\n params: requestParams,\n });\n }\n }\n async applyPreRequestHooks(requestParams, computedParams, requestOptions) {\n await this.applyPluginMethod('onBeforeRequest', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n });\n }\n async applyPostRequestHooks(requestParams, computedParams, requestOptions, response) {\n return await this.applyPluginMethod('onAfterRequest', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n response,\n });\n }\n applyResponseErrorHooks(requestParams, computedParams, requestOptions, promise) {\n return promise.catch(helpers_1.applyResponseHooks.bind(this, requestParams, computedParams, requestOptions));\n }\n}\nexports.ClientRequestMaker = ClientRequestMaker;\nClientRequestMaker.BODY_METHODS = new Set(['POST', 'PUT', 'PATCH']);\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestParamHelpers = void 0;\nconst form_data_helper_1 = require(\"./form-data.helper\");\nconst oauth1_helper_1 = __importDefault(require(\"./oauth1.helper\"));\n/* Helpers functions that are specific to this class but do not depends on instance */\nclass RequestParamHelpers {\n static formatQueryToString(query) {\n const formattedQuery = {};\n for (const prop in query) {\n if (typeof query[prop] === 'string') {\n formattedQuery[prop] = query[prop];\n }\n else if (typeof query[prop] !== 'undefined') {\n formattedQuery[prop] = String(query[prop]);\n }\n }\n return formattedQuery;\n }\n static autoDetectBodyType(url) {\n if (url.pathname.startsWith('/2/') || url.pathname.startsWith('/labs/2/')) {\n // oauth2 takes url encoded\n if (url.password.startsWith('/2/oauth2')) {\n return 'url';\n }\n // Twitter API v2 has JSON-encoded requests for everything else\n return 'json';\n }\n if (url.hostname === 'upload.twitter.com') {\n if (url.pathname === '/1.1/media/upload.json') {\n return 'form-data';\n }\n // json except for media/upload command, that is form-data.\n return 'json';\n }\n const endpoint = url.pathname.split('/1.1/', 2)[1];\n if (this.JSON_1_1_ENDPOINTS.has(endpoint)) {\n return 'json';\n }\n return 'url';\n }\n static addQueryParamsToUrl(url, query) {\n const queryEntries = Object.entries(query);\n if (queryEntries.length) {\n let search = '';\n for (const [key, value] of queryEntries) {\n search += (search.length ? '&' : '?') + `${oauth1_helper_1.default.percentEncode(key)}=${oauth1_helper_1.default.percentEncode(value)}`;\n }\n url.search = search;\n }\n }\n static constructBodyParams(body, headers, mode) {\n if (body instanceof Buffer) {\n return body;\n }\n if (mode === 'json') {\n if (!headers['content-type']) {\n headers['content-type'] = 'application/json;charset=UTF-8';\n }\n return JSON.stringify(body);\n }\n else if (mode === 'url') {\n if (!headers['content-type']) {\n headers['content-type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n if (Object.keys(body).length) {\n return new URLSearchParams(body)\n .toString()\n .replace(/\\*/g, '%2A'); // URLSearchParams doesnt encode '*', but Twitter wants it encoded.\n }\n return '';\n }\n else if (mode === 'raw') {\n throw new Error('You can only use raw body mode with Buffers. To give a string, use Buffer.from(str).');\n }\n else {\n const form = new form_data_helper_1.FormDataHelper();\n for (const parameter in body) {\n form.append(parameter, body[parameter]);\n }\n if (!headers['content-type']) {\n const formHeaders = form.getHeaders();\n headers['content-type'] = formHeaders['content-type'];\n }\n return form.getBuffer();\n }\n }\n static setBodyLengthHeader(options, body) {\n var _a;\n options.headers = (_a = options.headers) !== null && _a !== void 0 ? _a : {};\n if (typeof body === 'string') {\n options.headers['content-length'] = Buffer.byteLength(body);\n }\n else {\n options.headers['content-length'] = body.length;\n }\n }\n static isOAuthSerializable(item) {\n return !(item instanceof Buffer);\n }\n static mergeQueryAndBodyForOAuth(query, body) {\n const parameters = {};\n for (const prop in query) {\n parameters[prop] = query[prop];\n }\n if (this.isOAuthSerializable(body)) {\n for (const prop in body) {\n const bodyProp = body[prop];\n if (this.isOAuthSerializable(bodyProp)) {\n parameters[prop] = typeof bodyProp === 'object' && bodyProp !== null && 'toString' in bodyProp\n ? bodyProp.toString()\n : bodyProp;\n }\n }\n }\n return parameters;\n }\n static moveUrlQueryParamsIntoObject(url, query) {\n for (const [param, value] of url.searchParams) {\n query[param] = value;\n }\n // Remove the query string\n url.search = '';\n return url;\n }\n /**\n * Replace URL parameters available in pathname, like `:id`, with data given in `parameters`:\n * `https://twitter.com/:id.json` + `{ id: '20' }` => `https://twitter.com/20.json`\n */\n static applyRequestParametersToUrl(url, parameters) {\n url.pathname = url.pathname.replace(/:([A-Z_-]+)/ig, (fullMatch, paramName) => {\n if (parameters[paramName] !== undefined) {\n return String(parameters[paramName]);\n }\n return fullMatch;\n });\n return url;\n }\n}\nexports.RequestParamHelpers = RequestParamHelpers;\nRequestParamHelpers.JSON_1_1_ENDPOINTS = new Set([\n 'direct_messages/events/new.json',\n 'direct_messages/welcome_messages/new.json',\n 'direct_messages/welcome_messages/rules/new.json',\n 'media/metadata/create.json',\n 'collections/entries/curate.json',\n]);\nexports.default = RequestParamHelpers;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst request_maker_mixin_1 = require(\"./client-mixins/request-maker.mixin\");\nconst helpers_1 = require(\"./helpers\");\nconst globals_1 = require(\"./globals\");\n/**\n * Base class for Twitter instances\n */\nclass TwitterApiBase {\n constructor(token, settings = {}) {\n this._currentUser = null;\n this._currentUserV2 = null;\n if (token instanceof TwitterApiBase) {\n this._requestMaker = token._requestMaker;\n }\n else {\n this._requestMaker = new request_maker_mixin_1.ClientRequestMaker(settings);\n this._requestMaker.initializeToken(token);\n }\n }\n /* Prefix/Token handling */\n setPrefix(prefix) {\n this._prefix = prefix;\n }\n cloneWithPrefix(prefix) {\n const clone = this.constructor(this);\n clone.setPrefix(prefix);\n return clone;\n }\n getActiveTokens() {\n return this._requestMaker.getActiveTokens();\n }\n /* Rate limit cache / Plugins */\n getPlugins() {\n return this._requestMaker.getPlugins();\n }\n getPluginOfType(type) {\n return this.getPlugins().find(plugin => plugin instanceof type);\n }\n /**\n * @deprecated - Migrate to plugin `@twitter-api-v2/plugin-rate-limit`\n *\n * Tells if you hit the Twitter rate limit for {endpoint}.\n * (local data only, this should not ask anything to Twitter)\n */\n hasHitRateLimit(endpoint) {\n var _a;\n if (this.isRateLimitStatusObsolete(endpoint)) {\n return false;\n }\n return ((_a = this.getLastRateLimitStatus(endpoint)) === null || _a === void 0 ? void 0 : _a.remaining) === 0;\n }\n /**\n * @deprecated - Migrate to plugin `@twitter-api-v2/plugin-rate-limit`\n *\n * Tells if you hit the returned Twitter rate limit for {endpoint} has expired.\n * If client has no saved rate limit data for {endpoint}, this will gives you `true`.\n */\n isRateLimitStatusObsolete(endpoint) {\n const rateLimit = this.getLastRateLimitStatus(endpoint);\n if (rateLimit === undefined) {\n return true;\n }\n // Timestamps are exprimed in seconds, JS works with ms\n return (rateLimit.reset * 1000) < Date.now();\n }\n /**\n * @deprecated - Migrate to plugin `@twitter-api-v2/plugin-rate-limit`\n *\n * Get the last obtained Twitter rate limit information for {endpoint}.\n * (local data only, this should not ask anything to Twitter)\n */\n getLastRateLimitStatus(endpoint) {\n const endpointWithPrefix = endpoint.match(/^https?:\\/\\//) ? endpoint : (this._prefix + endpoint);\n return this._requestMaker.getRateLimits()[endpointWithPrefix];\n }\n /* Current user cache */\n /** Get cached current user. */\n getCurrentUserObject(forceFetch = false) {\n if (!forceFetch && this._currentUser) {\n if (this._currentUser.value) {\n return Promise.resolve(this._currentUser.value);\n }\n return this._currentUser.promise;\n }\n this._currentUser = (0, helpers_1.sharedPromise)(() => this.get('account/verify_credentials.json', { tweet_mode: 'extended' }, { prefix: globals_1.API_V1_1_PREFIX }));\n return this._currentUser.promise;\n }\n /**\n * Get cached current user from v2 API.\n * This can only be the slimest available `UserV2` object, with only `id`, `name` and `username` properties defined.\n *\n * To get a customized `UserV2Result`, use `.v2.me()`\n *\n * OAuth2 scopes: `tweet.read` & `users.read`\n */\n getCurrentUserV2Object(forceFetch = false) {\n if (!forceFetch && this._currentUserV2) {\n if (this._currentUserV2.value) {\n return Promise.resolve(this._currentUserV2.value);\n }\n return this._currentUserV2.promise;\n }\n this._currentUserV2 = (0, helpers_1.sharedPromise)(() => this.get('users/me', undefined, { prefix: globals_1.API_V2_PREFIX }));\n return this._currentUserV2.promise;\n }\n async get(url, query = {}, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'GET',\n query,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async delete(url, query = {}, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'DELETE',\n query,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async post(url, body, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'POST',\n body,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async put(url, body, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'PUT',\n body,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n async patch(url, body, { fullResponse, prefix = this._prefix, ...rest } = {}) {\n if (prefix)\n url = prefix + url;\n const resp = await this._requestMaker.send({\n url,\n method: 'PATCH',\n body,\n ...rest,\n });\n return fullResponse ? resp : resp.data;\n }\n getStream(url, query, { prefix = this._prefix, ...rest } = {}) {\n return this._requestMaker.sendStream({\n url: prefix ? prefix + url : url,\n method: 'GET',\n query,\n ...rest,\n });\n }\n postStream(url, body, { prefix = this._prefix, ...rest } = {}) {\n return this._requestMaker.sendStream({\n url: prefix ? prefix + url : url,\n method: 'POST',\n body,\n ...rest,\n });\n }\n}\nexports.default = TwitterApiBase;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_base_1 = __importDefault(require(\"./client.base\"));\n/**\n * Base subclient for every v1 and v2 client.\n */\nclass TwitterApiSubClient extends client_base_1.default {\n constructor(instance) {\n if (!(instance instanceof client_base_1.default)) {\n throw new Error('You must instance SubTwitterApi instance from existing TwitterApi instance.');\n }\n super(instance);\n }\n}\nexports.default = TwitterApiSubClient;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiReadOnly = exports.TwitterApiReadWrite = exports.TwitterApi = void 0;\nconst client_v1_1 = __importDefault(require(\"../v1/client.v1\"));\nconst client_v2_1 = __importDefault(require(\"../v2/client.v2\"));\nconst readwrite_1 = __importDefault(require(\"./readwrite\"));\n// \"Real\" exported client for usage of TwitterApi.\n/**\n * Twitter v1.1 and v2 API client.\n */\nclass TwitterApi extends readwrite_1.default {\n /* Direct access to subclients */\n get v1() {\n if (this._v1)\n return this._v1;\n return this._v1 = new client_v1_1.default(this);\n }\n get v2() {\n if (this._v2)\n return this._v2;\n return this._v2 = new client_v2_1.default(this);\n }\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n /* Static helpers */\n static getErrors(error) {\n var _a;\n if (typeof error !== 'object')\n return [];\n if (!('data' in error))\n return [];\n return (_a = error.data.errors) !== null && _a !== void 0 ? _a : [];\n }\n /** Extract another image size than obtained in a `profile_image_url` or `profile_image_url_https` field of a user object. */\n static getProfileImageInSize(profileImageUrl, size) {\n const lastPart = profileImageUrl.split('/').pop();\n const sizes = ['normal', 'bigger', 'mini'];\n let originalUrl = profileImageUrl;\n for (const availableSize of sizes) {\n if (lastPart.includes(`_${availableSize}`)) {\n originalUrl = profileImageUrl.replace(`_${availableSize}`, '');\n break;\n }\n }\n if (size === 'original') {\n return originalUrl;\n }\n const extPos = originalUrl.lastIndexOf('.');\n if (extPos !== -1) {\n const ext = originalUrl.slice(extPos + 1);\n return originalUrl.slice(0, extPos) + '_' + size + '.' + ext;\n }\n else {\n return originalUrl + '_' + size;\n }\n }\n}\nexports.TwitterApi = TwitterApi;\nvar readwrite_2 = require(\"./readwrite\");\nObject.defineProperty(exports, \"TwitterApiReadWrite\", { enumerable: true, get: function () { return __importDefault(readwrite_2).default; } });\nvar readonly_1 = require(\"./readonly\");\nObject.defineProperty(exports, \"TwitterApiReadOnly\", { enumerable: true, get: function () { return __importDefault(readonly_1).default; } });\nexports.default = TwitterApi;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _1 = __importDefault(require(\".\"));\nconst client_base_1 = __importDefault(require(\"../client.base\"));\nconst client_v1_read_1 = __importDefault(require(\"../v1/client.v1.read\"));\nconst client_v2_read_1 = __importDefault(require(\"../v2/client.v2.read\"));\nconst oauth2_helper_1 = require(\"../client-mixins/oauth2.helper\");\nconst request_param_helper_1 = __importDefault(require(\"../client-mixins/request-param.helper\"));\n/**\n * Twitter v1.1 and v2 API client.\n */\nclass TwitterApiReadOnly extends client_base_1.default {\n /* Direct access to subclients */\n get v1() {\n if (this._v1)\n return this._v1;\n return this._v1 = new client_v1_read_1.default(this);\n }\n get v2() {\n if (this._v2)\n return this._v2;\n return this._v2 = new client_v2_read_1.default(this);\n }\n /**\n * Fetch and cache current user.\n * This method can only be called with a OAuth 1.0a user authentication.\n *\n * You can use this method to test if authentication was successful.\n * Next calls to this methods will use the cached user, unless `forceFetch: true` is given.\n */\n async currentUser(forceFetch = false) {\n return await this.getCurrentUserObject(forceFetch);\n }\n /**\n * Fetch and cache current user.\n * This method can only be called with a OAuth 1.0a or OAuth2 user authentication.\n *\n * This can only be the slimest available `UserV2` object, with only id, name and username properties defined.\n * To get a customized `UserV2Result`, use `.v2.me()`\n *\n * You can use this method to test if authentication was successful.\n * Next calls to this methods will use the cached user, unless `forceFetch: true` is given.\n *\n * OAuth2 scopes: `tweet.read` & `users.read`\n */\n async currentUserV2(forceFetch = false) {\n return await this.getCurrentUserV2Object(forceFetch);\n }\n /* Shortcuts to endpoints */\n search(what, options) {\n return this.v2.search(what, options);\n }\n /* Authentication */\n /**\n * Generate the OAuth request token link for user-based OAuth 1.0 auth.\n *\n * ```ts\n * // Instanciate TwitterApi with consumer keys\n * const client = new TwitterApi({ appKey: 'consumer_key', appSecret: 'consumer_secret' });\n *\n * const tokenRequest = await client.generateAuthLink('oob-or-your-callback-url');\n * // redirect end-user to tokenRequest.url\n *\n * // Save tokenRequest.oauth_token_secret somewhere, it will be needed for next auth step.\n * ```\n */\n async generateAuthLink(oauth_callback = 'oob', { authAccessType, linkMode = 'authenticate', forceLogin, screenName, } = {}) {\n const oauthResult = await this.post('https://api.twitter.com/oauth/request_token', { oauth_callback, x_auth_access_type: authAccessType });\n let url = `https://api.twitter.com/oauth/${linkMode}?oauth_token=${encodeURIComponent(oauthResult.oauth_token)}`;\n if (forceLogin !== undefined) {\n url += `&force_login=${encodeURIComponent(forceLogin)}`;\n }\n if (screenName !== undefined) {\n url += `&screen_name=${encodeURIComponent(screenName)}`;\n }\n if (this._requestMaker.hasPlugins()) {\n this._requestMaker.applyPluginMethod('onOAuth1RequestToken', {\n client: this._requestMaker,\n url,\n oauthResult,\n });\n }\n return {\n url,\n ...oauthResult,\n };\n }\n /**\n * Obtain access to user-based OAuth 1.0 auth.\n *\n * After user is redirect from your callback, use obtained oauth_token and oauth_verifier to\n * instanciate the new TwitterApi instance.\n *\n * ```ts\n * // Use the saved oauth_token_secret associated to oauth_token returned by callback\n * const requestClient = new TwitterApi({\n * appKey: 'consumer_key',\n * appSecret: 'consumer_secret',\n * accessToken: 'oauth_token',\n * accessSecret: 'oauth_token_secret'\n * });\n *\n * // Use oauth_verifier obtained from callback request\n * const { client: userClient } = await requestClient.login('oauth_verifier');\n *\n * // {userClient} is a valid {TwitterApi} object you can use for future requests\n * ```\n */\n async login(oauth_verifier) {\n const tokens = this.getActiveTokens();\n if (tokens.type !== 'oauth-1.0a')\n throw new Error('You must setup TwitterApi instance with consumer keys to accept OAuth 1.0 login');\n const oauth_result = await this.post('https://api.twitter.com/oauth/access_token', { oauth_token: tokens.accessToken, oauth_verifier });\n const client = new _1.default({\n appKey: tokens.appKey,\n appSecret: tokens.appSecret,\n accessToken: oauth_result.oauth_token,\n accessSecret: oauth_result.oauth_token_secret,\n }, this._requestMaker.clientSettings);\n return {\n accessToken: oauth_result.oauth_token,\n accessSecret: oauth_result.oauth_token_secret,\n userId: oauth_result.user_id,\n screenName: oauth_result.screen_name,\n client,\n };\n }\n /**\n * Enable application-only authentication.\n *\n * To make the request, instanciate TwitterApi with consumer and secret.\n *\n * ```ts\n * const requestClient = new TwitterApi({ appKey: 'consumer', appSecret: 'secret' });\n * const appClient = await requestClient.appLogin();\n *\n * // Use {appClient} to make requests\n * ```\n */\n async appLogin() {\n const tokens = this.getActiveTokens();\n if (tokens.type !== 'oauth-1.0a')\n throw new Error('You must setup TwitterApi instance with consumer keys to accept app-only login');\n // Create a client with Basic authentication\n const basicClient = new _1.default({ username: tokens.appKey, password: tokens.appSecret });\n const res = await basicClient.post('https://api.twitter.com/oauth2/token', { grant_type: 'client_credentials' });\n // New object with Bearer token\n return new _1.default(res.access_token, this._requestMaker.clientSettings);\n }\n /* OAuth 2 user authentication */\n /**\n * Generate the OAuth request token link for user-based OAuth 2.0 auth.\n *\n * - **You can only use v2 API endpoints with this authentication method.**\n * - **You need to specify which scope you want to have when you create your auth link. Make sure it matches your needs.**\n *\n * See https://developer.twitter.com/en/docs/authentication/oauth-2-0/user-access-token for details.\n *\n * ```ts\n * // Instanciate TwitterApi with client ID\n * const client = new TwitterApi({ clientId: 'yourClientId' });\n *\n * // Generate a link to callback URL that will gives a token with tweet+user read access\n * const link = client.generateOAuth2AuthLink('your-callback-url', { scope: ['tweet.read', 'users.read'] });\n *\n * // Extract props from generate link\n * const { url, state, codeVerifier } = link;\n *\n * // redirect end-user to url\n * // Save `state` and `codeVerifier` somewhere, it will be needed for next auth step.\n * ```\n */\n generateOAuth2AuthLink(redirectUri, options = {}) {\n var _a, _b;\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. You can find your client ID in Twitter Developer Portal. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n const state = (_a = options.state) !== null && _a !== void 0 ? _a : oauth2_helper_1.OAuth2Helper.generateRandomString(32);\n const codeVerifier = oauth2_helper_1.OAuth2Helper.getCodeVerifier();\n const codeChallenge = oauth2_helper_1.OAuth2Helper.getCodeChallengeFromVerifier(codeVerifier);\n const rawScope = (_b = options.scope) !== null && _b !== void 0 ? _b : '';\n const scope = Array.isArray(rawScope) ? rawScope.join(' ') : rawScope;\n const url = new URL('https://twitter.com/i/oauth2/authorize');\n const query = {\n response_type: 'code',\n client_id: this._requestMaker.clientId,\n redirect_uri: redirectUri,\n state,\n code_challenge: codeChallenge,\n code_challenge_method: 's256',\n scope,\n };\n request_param_helper_1.default.addQueryParamsToUrl(url, query);\n const result = {\n url: url.toString(),\n state,\n codeVerifier,\n codeChallenge,\n };\n if (this._requestMaker.hasPlugins()) {\n this._requestMaker.applyPluginMethod('onOAuth2RequestToken', {\n client: this._requestMaker,\n result,\n redirectUri,\n });\n }\n return result;\n }\n /**\n * Obtain access to user-based OAuth 2.0 auth.\n *\n * After user is redirect from your callback, use obtained code to\n * instanciate the new TwitterApi instance.\n *\n * You need to obtain `codeVerifier` from a call to `.generateOAuth2AuthLink`.\n *\n * ```ts\n * // Use the saved codeVerifier associated to state (present in query string of callback)\n * const requestClient = new TwitterApi({ clientId: 'yourClientId' });\n *\n * const { client: userClient, refreshToken } = await requestClient.loginWithOAuth2({\n * code: 'codeFromQueryString',\n * // the same URL given to generateOAuth2AuthLink\n * redirectUri,\n * // the verifier returned by generateOAuth2AuthLink\n * codeVerifier,\n * });\n *\n * // {userClient} is a valid {TwitterApi} object you can use for future requests\n * // {refreshToken} is defined if 'offline.access' is in scope.\n * ```\n */\n async loginWithOAuth2({ code, codeVerifier, redirectUri }) {\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n const accessTokenResult = await this.post('https://api.twitter.com/2/oauth2/token', {\n code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n grant_type: 'authorization_code',\n client_id: this._requestMaker.clientId,\n client_secret: this._requestMaker.clientSecret,\n });\n return this.parseOAuth2AccessTokenResult(accessTokenResult);\n }\n /**\n * Obtain a new access token to user-based OAuth 2.0 auth from a refresh token.\n *\n * ```ts\n * const requestClient = new TwitterApi({ clientId: 'yourClientId' });\n *\n * const { client: userClient } = await requestClient.refreshOAuth2Token('refreshToken');\n * // {userClient} is a valid {TwitterApi} object you can use for future requests\n * ```\n */\n async refreshOAuth2Token(refreshToken) {\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n const accessTokenResult = await this.post('https://api.twitter.com/2/oauth2/token', {\n refresh_token: refreshToken,\n grant_type: 'refresh_token',\n client_id: this._requestMaker.clientId,\n client_secret: this._requestMaker.clientSecret,\n });\n return this.parseOAuth2AccessTokenResult(accessTokenResult);\n }\n /**\n * Revoke a single user-based OAuth 2.0 token.\n *\n * You must specify its source, access token (directly after login)\n * or refresh token (if you've called `.refreshOAuth2Token` before).\n */\n async revokeOAuth2Token(token, tokenType = 'access_token') {\n if (!this._requestMaker.clientId) {\n throw new Error('Twitter API instance is not initialized with client ID. ' +\n 'Please build an instance with: new TwitterApi({ clientId: \\'\\' })');\n }\n return await this.post('https://api.twitter.com/2/oauth2/revoke', {\n client_id: this._requestMaker.clientId,\n client_secret: this._requestMaker.clientSecret,\n token,\n token_type_hint: tokenType,\n });\n }\n parseOAuth2AccessTokenResult(result) {\n const client = new _1.default(result.access_token, this._requestMaker.clientSettings);\n const scope = result.scope.split(' ').filter(e => e);\n return {\n client,\n expiresIn: result.expires_in,\n accessToken: result.access_token,\n scope,\n refreshToken: result.refresh_token,\n };\n }\n}\nexports.default = TwitterApiReadOnly;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_v1_write_1 = __importDefault(require(\"../v1/client.v1.write\"));\nconst client_v2_write_1 = __importDefault(require(\"../v2/client.v2.write\"));\nconst readonly_1 = __importDefault(require(\"./readonly\"));\n/**\n * Twitter v1.1 and v2 API client.\n */\nclass TwitterApiReadWrite extends readonly_1.default {\n /* Direct access to subclients */\n get v1() {\n if (this._v1)\n return this._v1;\n return this._v1 = new client_v1_write_1.default(this);\n }\n get v2() {\n if (this._v2)\n return this._v2;\n return this._v2 = new client_v2_write_1.default(this);\n }\n /**\n * Get a client with read only rights.\n */\n get readOnly() {\n return this;\n }\n}\nexports.default = TwitterApiReadWrite;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.API_V1_1_STREAM_PREFIX = exports.API_V1_1_UPLOAD_PREFIX = exports.API_V1_1_PREFIX = exports.API_V2_LABS_PREFIX = exports.API_V2_PREFIX = void 0;\nexports.API_V2_PREFIX = 'https://api.twitter.com/2/';\nexports.API_V2_LABS_PREFIX = 'https://api.twitter.com/labs/2/';\nexports.API_V1_1_PREFIX = 'https://api.twitter.com/1.1/';\nexports.API_V1_1_UPLOAD_PREFIX = 'https://upload.twitter.com/1.1/';\nexports.API_V1_1_STREAM_PREFIX = 'https://stream.twitter.com/1.1/';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeDeprecationWarning = exports.hasMultipleItems = exports.isTweetStreamV2ErrorPayload = exports.trimUndefinedProperties = exports.arrayWrap = exports.sharedPromise = void 0;\nconst settings_1 = require(\"./settings\");\nfunction sharedPromise(getter) {\n const sharedPromise = {\n value: undefined,\n promise: getter().then(val => {\n sharedPromise.value = val;\n return val;\n }),\n };\n return sharedPromise;\n}\nexports.sharedPromise = sharedPromise;\nfunction arrayWrap(value) {\n if (Array.isArray(value)) {\n return value;\n }\n return [value];\n}\nexports.arrayWrap = arrayWrap;\nfunction trimUndefinedProperties(object) {\n // Delete undefined parameters\n for (const parameter in object) {\n if (object[parameter] === undefined)\n delete object[parameter];\n }\n}\nexports.trimUndefinedProperties = trimUndefinedProperties;\nfunction isTweetStreamV2ErrorPayload(payload) {\n // Is error only if 'errors' is present and 'data' does not exists\n return typeof payload === 'object'\n && 'errors' in payload\n && !('data' in payload);\n}\nexports.isTweetStreamV2ErrorPayload = isTweetStreamV2ErrorPayload;\nfunction hasMultipleItems(item) {\n if (Array.isArray(item) && item.length > 1) {\n return true;\n }\n return item.toString().includes(',');\n}\nexports.hasMultipleItems = hasMultipleItems;\nconst deprecationWarningsCache = new Set();\nfunction safeDeprecationWarning(message) {\n if (typeof console === 'undefined' || !console.warn || !settings_1.TwitterApiV2Settings.deprecationWarnings) {\n return;\n }\n const hash = `${message.instance}-${message.method}-${message.problem}`;\n if (deprecationWarningsCache.has(hash)) {\n return;\n }\n const formattedMsg = `[twitter-api-v2] Deprecation warning: In ${message.instance}.${message.method}() call` +\n `, ${message.problem}.\\n${message.resolution}.`;\n console.warn(formattedMsg);\n console.warn('To disable this message, import variable TwitterApiV2Settings from twitter-api-v2 and set TwitterApiV2Settings.deprecationWarnings to false.');\n deprecationWarningsCache.add(hash);\n}\nexports.safeDeprecationWarning = safeDeprecationWarning;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = void 0;\nvar client_1 = require(\"./client\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return __importDefault(client_1).default; } });\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./v1/client.v1\"), exports);\n__exportStar(require(\"./v2/client.v2\"), exports);\n__exportStar(require(\"./v2/includes.v2.helper\"), exports);\n__exportStar(require(\"./v2-labs/client.v2.labs\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./paginators\"), exports);\n__exportStar(require(\"./stream/TweetStream\"), exports);\n__exportStar(require(\"./settings\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PreviousableTwitterPaginator = exports.TwitterPaginator = void 0;\n/** TwitterPaginator: able to get consume data from initial request, then fetch next data sequentially. */\nclass TwitterPaginator {\n // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected\n constructor({ realData, rateLimit, instance, queryParams, sharedParams }) {\n this._maxResultsWhenFetchLast = 100;\n this._realData = realData;\n this._rateLimit = rateLimit;\n this._instance = instance;\n this._queryParams = queryParams;\n this._sharedParams = sharedParams;\n }\n get _isRateLimitOk() {\n if (!this._rateLimit) {\n return true;\n }\n const resetDate = this._rateLimit.reset * 1000;\n if (resetDate < Date.now()) {\n return true;\n }\n return this._rateLimit.remaining > 0;\n }\n makeRequest(queryParams) {\n return this._instance.get(this.getEndpoint(), queryParams, { fullResponse: true, params: this._sharedParams });\n }\n makeNewInstanceFromResult(result, queryParams) {\n // Construct a subclass\n return new this.constructor({\n realData: result.data,\n rateLimit: result.rateLimit,\n instance: this._instance,\n queryParams,\n sharedParams: this._sharedParams,\n });\n }\n getEndpoint() {\n return this._endpoint;\n }\n injectQueryParams(maxResults) {\n return {\n ...(maxResults ? { max_results: maxResults } : {}),\n ...this._queryParams,\n };\n }\n /* ---------------------- */\n /* Real paginator methods */\n /* ---------------------- */\n /**\n * Next page.\n */\n async next(maxResults) {\n const queryParams = this.getNextQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n return this.makeNewInstanceFromResult(result, queryParams);\n }\n /**\n * Next page, but store it in current instance.\n */\n async fetchNext(maxResults) {\n const queryParams = this.getNextQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n // Await in case of async sub-methods\n await this.refreshInstanceFromResult(result, true);\n return this;\n }\n /**\n * Fetch up to {count} items after current page,\n * as long as rate limit is not hit and Twitter has some results\n */\n async fetchLast(count = Infinity) {\n let queryParams = this.getNextQueryParams(this._maxResultsWhenFetchLast);\n let resultCount = 0;\n // Break at rate limit limit\n while (resultCount < count && this._isRateLimitOk) {\n const response = await this.makeRequest(queryParams);\n await this.refreshInstanceFromResult(response, true);\n resultCount += this.getPageLengthFromRequest(response);\n if (this.isFetchLastOver(response)) {\n break;\n }\n queryParams = this.getNextQueryParams(this._maxResultsWhenFetchLast);\n }\n return this;\n }\n get rateLimit() {\n var _a;\n return { ...(_a = this._rateLimit) !== null && _a !== void 0 ? _a : {} };\n }\n /** Get raw data returned by Twitter API. */\n get data() {\n return this._realData;\n }\n get done() {\n return !this.canFetchNextPage(this._realData);\n }\n /**\n * Iterate over currently fetched items.\n */\n *[Symbol.iterator]() {\n yield* this.getItemArray();\n }\n /**\n * Iterate over items \"undefinitely\" (until rate limit is hit / they're no more items available)\n * This will **mutate the current instance** and fill data, metas, etc. inside this instance.\n *\n * If you need to handle concurrent requests, or you need to rely on immutability, please use `.fetchAndIterate()` instead.\n */\n async *[Symbol.asyncIterator]() {\n yield* this.getItemArray();\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let paginator = this;\n let canFetchNextPage = this.canFetchNextPage(this._realData);\n while (canFetchNextPage && this._isRateLimitOk && paginator.getItemArray().length > 0) {\n const next = await paginator.next(this._maxResultsWhenFetchLast);\n // Store data into current instance [needed to access includes and meta]\n this.refreshInstanceFromResult({ data: next._realData, headers: {}, rateLimit: next._rateLimit }, true);\n canFetchNextPage = this.canFetchNextPage(next._realData);\n const items = next.getItemArray();\n yield* items;\n paginator = next;\n }\n }\n /**\n * Iterate over items \"undefinitely\" without modifying the current instance (until rate limit is hit / they're no more items available)\n *\n * This will **NOT** mutate the current instance, meaning that current instance will not inherit from `includes` and `meta` (v2 API only).\n * Use `Symbol.asyncIterator` (`for-await of`) to directly access items with current instance mutation.\n */\n async *fetchAndIterate() {\n for (const item of this.getItemArray()) {\n yield [item, this];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let paginator = this;\n let canFetchNextPage = this.canFetchNextPage(this._realData);\n while (canFetchNextPage && this._isRateLimitOk && paginator.getItemArray().length > 0) {\n const next = await paginator.next(this._maxResultsWhenFetchLast);\n // Store data into current instance [needed to access includes and meta]\n this.refreshInstanceFromResult({ data: next._realData, headers: {}, rateLimit: next._rateLimit }, true);\n canFetchNextPage = this.canFetchNextPage(next._realData);\n for (const item of next.getItemArray()) {\n yield [item, next];\n }\n this._rateLimit = next._rateLimit;\n paginator = next;\n }\n }\n}\nexports.TwitterPaginator = TwitterPaginator;\n/** PreviousableTwitterPaginator: a TwitterPaginator able to get consume data from both side, next and previous. */\nclass PreviousableTwitterPaginator extends TwitterPaginator {\n /**\n * Previous page (new tweets)\n */\n async previous(maxResults) {\n const queryParams = this.getPreviousQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n return this.makeNewInstanceFromResult(result, queryParams);\n }\n /**\n * Previous page, but in current instance.\n */\n async fetchPrevious(maxResults) {\n const queryParams = this.getPreviousQueryParams(maxResults);\n const result = await this.makeRequest(queryParams);\n await this.refreshInstanceFromResult(result, false);\n return this;\n }\n}\nexports.PreviousableTwitterPaginator = PreviousableTwitterPaginator;\nexports.default = TwitterPaginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WelcomeDmV1Paginator = exports.DmEventsV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass DmEventsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'direct_messages/events/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.events.push(...result.events);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.events.length;\n }\n getItemArray() {\n return this.events;\n }\n /**\n * Events returned by paginator.\n */\n get events() {\n return this._realData.events;\n }\n}\nexports.DmEventsV1Paginator = DmEventsV1Paginator;\nclass WelcomeDmV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'direct_messages/welcome_messages/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.welcome_messages.push(...result.welcome_messages);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.welcome_messages.length;\n }\n getItemArray() {\n return this.welcomeMessages;\n }\n get welcomeMessages() {\n return this._realData.welcome_messages;\n }\n}\nexports.WelcomeDmV1Paginator = WelcomeDmV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserFollowerIdsV1Paginator = exports.UserFollowerListV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass UserFollowerListV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'followers/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.users.push(...result.users);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.users.length;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData.users;\n }\n}\nexports.UserFollowerListV1Paginator = UserFollowerListV1Paginator;\nclass UserFollowerIdsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'followers/ids.json';\n this._maxResultsWhenFetchLast = 5000;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.ids.push(...result.ids);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.ids.length;\n }\n getItemArray() {\n return this.ids;\n }\n /**\n * Users IDs returned by paginator.\n */\n get ids() {\n return this._realData.ids;\n }\n}\nexports.UserFollowerIdsV1Paginator = UserFollowerIdsV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserFollowersIdsV1Paginator = exports.UserFriendListV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass UserFriendListV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'friends/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.users.push(...result.users);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.users.length;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData.users;\n }\n}\nexports.UserFriendListV1Paginator = UserFriendListV1Paginator;\nclass UserFollowersIdsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'friends/ids.json';\n this._maxResultsWhenFetchLast = 5000;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.ids.push(...result.ids);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.ids.length;\n }\n getItemArray() {\n return this.ids;\n }\n /**\n * Users IDs returned by paginator.\n */\n get ids() {\n return this._realData.ids;\n }\n}\nexports.UserFollowersIdsV1Paginator = UserFollowersIdsV1Paginator;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./tweet.paginator.v2\"), exports);\n__exportStar(require(\"./TwitterPaginator\"), exports);\n__exportStar(require(\"./dm.paginator.v1\"), exports);\n__exportStar(require(\"./mutes.paginator.v1\"), exports);\n__exportStar(require(\"./tweet.paginator.v1\"), exports);\n__exportStar(require(\"./user.paginator.v1\"), exports);\n__exportStar(require(\"./user.paginator.v2\"), exports);\n__exportStar(require(\"./list.paginator.v1\"), exports);\n__exportStar(require(\"./list.paginator.v2\"), exports);\n__exportStar(require(\"./friends.paginator.v1\"), exports);\n__exportStar(require(\"./followers.paginator.v1\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ListSubscribersV1Paginator = exports.ListMembersV1Paginator = exports.ListSubscriptionsV1Paginator = exports.ListOwnershipsV1Paginator = exports.ListMembershipsV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass ListListsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.lists.push(...result.lists);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.lists.length;\n }\n getItemArray() {\n return this.lists;\n }\n /**\n * Lists returned by paginator.\n */\n get lists() {\n return this._realData.lists;\n }\n}\nclass ListMembershipsV1Paginator extends ListListsV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/memberships.json';\n }\n}\nexports.ListMembershipsV1Paginator = ListMembershipsV1Paginator;\nclass ListOwnershipsV1Paginator extends ListListsV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/ownerships.json';\n }\n}\nexports.ListOwnershipsV1Paginator = ListOwnershipsV1Paginator;\nclass ListSubscriptionsV1Paginator extends ListListsV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/subscriptions.json';\n }\n}\nexports.ListSubscriptionsV1Paginator = ListSubscriptionsV1Paginator;\nclass ListUsersV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.users.push(...result.users);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.users.length;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData.users;\n }\n}\nclass ListMembersV1Paginator extends ListUsersV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/members.json';\n }\n}\nexports.ListMembersV1Paginator = ListMembersV1Paginator;\nclass ListSubscribersV1Paginator extends ListUsersV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/subscribers.json';\n }\n}\nexports.ListSubscribersV1Paginator = ListSubscribersV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserListFollowedV2Paginator = exports.UserListMembershipsV2Paginator = exports.UserOwnedListsV2Paginator = void 0;\nconst v2_paginator_1 = require(\"./v2.paginator\");\nclass ListTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n getItemArray() {\n return this.lists;\n }\n /**\n * Lists returned by paginator.\n */\n get lists() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\nclass UserOwnedListsV2Paginator extends ListTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/owned_lists';\n }\n}\nexports.UserOwnedListsV2Paginator = UserOwnedListsV2Paginator;\nclass UserListMembershipsV2Paginator extends ListTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/list_memberships';\n }\n}\nexports.UserListMembershipsV2Paginator = UserListMembershipsV2Paginator;\nclass UserListFollowedV2Paginator extends ListTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/followed_lists';\n }\n}\nexports.UserListFollowedV2Paginator = UserListFollowedV2Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MuteUserIdsV1Paginator = exports.MuteUserListV1Paginator = void 0;\nconst paginator_v1_1 = require(\"./paginator.v1\");\nclass MuteUserListV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'mutes/users/list.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.users.push(...result.users);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.users.length;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData.users;\n }\n}\nexports.MuteUserListV1Paginator = MuteUserListV1Paginator;\nclass MuteUserIdsV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'mutes/users/ids.json';\n this._maxResultsWhenFetchLast = 5000;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.ids.push(...result.ids);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.ids.length;\n }\n getItemArray() {\n return this.ids;\n }\n /**\n * Users IDs returned by paginator.\n */\n get ids() {\n return this._realData.ids;\n }\n}\nexports.MuteUserIdsV1Paginator = MuteUserIdsV1Paginator;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CursoredV1Paginator = void 0;\nconst TwitterPaginator_1 = __importDefault(require(\"./TwitterPaginator\"));\nclass CursoredV1Paginator extends TwitterPaginator_1.default {\n getNextQueryParams(maxResults) {\n var _a;\n return {\n ...this._queryParams,\n cursor: (_a = this._realData.next_cursor_str) !== null && _a !== void 0 ? _a : this._realData.next_cursor,\n ...(maxResults ? { count: maxResults } : {}),\n };\n }\n isFetchLastOver(result) {\n // If we cant fetch next page\n return !this.canFetchNextPage(result.data);\n }\n canFetchNextPage(result) {\n // If one of cursor is valid\n return !this.isNextCursorInvalid(result.next_cursor) || !this.isNextCursorInvalid(result.next_cursor_str);\n }\n isNextCursorInvalid(value) {\n return value === undefined\n || value === 0\n || value === -1\n || value === '0'\n || value === '-1';\n }\n}\nexports.CursoredV1Paginator = CursoredV1Paginator;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserFavoritesV1Paginator = exports.ListTimelineV1Paginator = exports.UserTimelineV1Paginator = exports.MentionTimelineV1Paginator = exports.HomeTimelineV1Paginator = void 0;\nconst TwitterPaginator_1 = __importDefault(require(\"./TwitterPaginator\"));\n/** A generic TwitterPaginator able to consume TweetV1 timelines. */\nclass TweetTimelineV1Paginator extends TwitterPaginator_1.default {\n constructor() {\n super(...arguments);\n this.hasFinishedFetch = false;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.push(...result);\n // HINT: This is an approximation, as \"end\" of pagination cannot be safely determined without cursors.\n this.hasFinishedFetch = result.length === 0;\n }\n }\n getNextQueryParams(maxResults) {\n const lastestId = BigInt(this._realData[this._realData.length - 1].id_str);\n return {\n ...this.injectQueryParams(maxResults),\n max_id: (lastestId - BigInt(1)).toString(),\n };\n }\n getPageLengthFromRequest(result) {\n return result.data.length;\n }\n isFetchLastOver(result) {\n return !result.data.length;\n }\n canFetchNextPage(result) {\n return result.length > 0;\n }\n getItemArray() {\n return this.tweets;\n }\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n return this._realData;\n }\n get done() {\n return super.done || this.hasFinishedFetch;\n }\n}\n// Timelines\n// Home\nclass HomeTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'statuses/home_timeline.json';\n }\n}\nexports.HomeTimelineV1Paginator = HomeTimelineV1Paginator;\n// Mention\nclass MentionTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'statuses/mentions_timeline.json';\n }\n}\nexports.MentionTimelineV1Paginator = MentionTimelineV1Paginator;\n// User\nclass UserTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'statuses/user_timeline.json';\n }\n}\nexports.UserTimelineV1Paginator = UserTimelineV1Paginator;\n// Lists\nclass ListTimelineV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/statuses.json';\n }\n}\nexports.ListTimelineV1Paginator = ListTimelineV1Paginator;\n// Favorites\nclass UserFavoritesV1Paginator extends TweetTimelineV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'favorites/list.json';\n }\n}\nexports.UserFavoritesV1Paginator = UserFavoritesV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetV2ListTweetsPaginator = exports.TweetV2UserLikedTweetsPaginator = exports.TweetBookmarksTimelineV2Paginator = exports.TweetUserMentionTimelineV2Paginator = exports.TweetUserTimelineV2Paginator = exports.TweetHomeTimelineV2Paginator = exports.QuotedTweetsTimelineV2Paginator = exports.TweetSearchAllV2Paginator = exports.TweetSearchRecentV2Paginator = void 0;\nconst v2_paginator_1 = require(\"./v2.paginator\");\n/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines with since_id, until_id and next_token (when available). */\nclass TweetTimelineV2Paginator extends v2_paginator_1.TwitterV2Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n var _a;\n const result = response.data;\n const resultData = (_a = result.data) !== null && _a !== void 0 ? _a : [];\n this._rateLimit = response.rateLimit;\n if (!this._realData.data) {\n this._realData.data = [];\n }\n if (isNextPage) {\n this._realData.meta.oldest_id = result.meta.oldest_id;\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.meta.next_token = result.meta.next_token;\n this._realData.data.push(...resultData);\n }\n else {\n this._realData.meta.newest_id = result.meta.newest_id;\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.data.unshift(...resultData);\n }\n this.updateIncludes(result);\n }\n getNextQueryParams(maxResults) {\n this.assertUsable();\n const params = { ...this.injectQueryParams(maxResults) };\n if (this._realData.meta.next_token) {\n params.next_token = this._realData.meta.next_token;\n }\n else {\n if (params.start_time) {\n // until_id and start_time are forbidden together for some reason, so convert start_time to a since_id.\n params.since_id = this.dateStringToSnowflakeId(params.start_time);\n delete params.start_time;\n }\n if (params.end_time) {\n // until_id overrides end_time, so delete it\n delete params.end_time;\n }\n params.until_id = this._realData.meta.oldest_id;\n }\n return params;\n }\n getPreviousQueryParams(maxResults) {\n this.assertUsable();\n return {\n ...this.injectQueryParams(maxResults),\n since_id: this._realData.meta.newest_id,\n };\n }\n getPageLengthFromRequest(result) {\n var _a, _b;\n return (_b = (_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n }\n isFetchLastOver(result) {\n var _a;\n return !((_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) || !this.canFetchNextPage(result.data);\n }\n canFetchNextPage(result) {\n return !!result.meta.next_token;\n }\n getItemArray() {\n return this.tweets;\n }\n dateStringToSnowflakeId(dateStr) {\n const TWITTER_START_EPOCH = BigInt('1288834974657');\n const date = new Date(dateStr);\n if (isNaN(date.valueOf())) {\n throw new Error('Unable to convert start_time/end_time to a valid date. A ISO 8601 DateTime is excepted, please check your input.');\n }\n const dateTimestamp = BigInt(date.valueOf());\n return ((dateTimestamp - TWITTER_START_EPOCH) << BigInt('22')).toString();\n }\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\n/** A generic PreviousableTwitterPaginator able to consume TweetV2 timelines with pagination_tokens. */\nclass TweetPaginableTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n super.refreshInstanceFromResult(response, isNextPage);\n const result = response.data;\n if (isNextPage) {\n this._realData.meta.oldest_id = result.meta.oldest_id;\n }\n else {\n this._realData.meta.newest_id = result.meta.newest_id;\n }\n }\n getItemArray() {\n return this.tweets;\n }\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\n// ----------------\n// - Tweet search -\n// ----------------\nclass TweetSearchRecentV2Paginator extends TweetTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/search/recent';\n }\n}\nexports.TweetSearchRecentV2Paginator = TweetSearchRecentV2Paginator;\nclass TweetSearchAllV2Paginator extends TweetTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/search/all';\n }\n}\nexports.TweetSearchAllV2Paginator = TweetSearchAllV2Paginator;\nclass QuotedTweetsTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/:id/quote_tweets';\n }\n}\nexports.QuotedTweetsTimelineV2Paginator = QuotedTweetsTimelineV2Paginator;\n// -----------------\n// - Home timeline -\n// -----------------\nclass TweetHomeTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/timelines/reverse_chronological';\n }\n}\nexports.TweetHomeTimelineV2Paginator = TweetHomeTimelineV2Paginator;\nclass TweetUserTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/tweets';\n }\n}\nexports.TweetUserTimelineV2Paginator = TweetUserTimelineV2Paginator;\nclass TweetUserMentionTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/mentions';\n }\n}\nexports.TweetUserMentionTimelineV2Paginator = TweetUserMentionTimelineV2Paginator;\n// -------------\n// - Bookmarks -\n// -------------\nclass TweetBookmarksTimelineV2Paginator extends TweetPaginableTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/bookmarks';\n }\n}\nexports.TweetBookmarksTimelineV2Paginator = TweetBookmarksTimelineV2Paginator;\n// ---------------------------------------------------------------------------------\n// - Tweet lists (consume tweets with pagination tokens instead of since/until id) -\n// ---------------------------------------------------------------------------------\n/** A generic TwitterPaginator able to consume TweetV2 timelines. */\nclass TweetListV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n /**\n * Tweets returned by paginator.\n */\n get tweets() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n getItemArray() {\n return this.tweets;\n }\n}\nclass TweetV2UserLikedTweetsPaginator extends TweetListV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/liked_tweets';\n }\n}\nexports.TweetV2UserLikedTweetsPaginator = TweetV2UserLikedTweetsPaginator;\nclass TweetV2ListTweetsPaginator extends TweetListV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/:id/tweets';\n }\n}\nexports.TweetV2ListTweetsPaginator = TweetV2ListTweetsPaginator;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FriendshipsOutgoingV1Paginator = exports.FriendshipsIncomingV1Paginator = exports.UserSearchV1Paginator = void 0;\nconst TwitterPaginator_1 = __importDefault(require(\"./TwitterPaginator\"));\nconst paginator_v1_1 = require(\"./paginator.v1\");\n/** A generic TwitterPaginator able to consume TweetV1 timelines. */\nclass UserSearchV1Paginator extends TwitterPaginator_1.default {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/search.json';\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.push(...result);\n }\n }\n getNextQueryParams(maxResults) {\n var _a;\n const previousPage = Number((_a = this._queryParams.page) !== null && _a !== void 0 ? _a : '1');\n return {\n ...this._queryParams,\n page: previousPage + 1,\n ...maxResults ? { count: maxResults } : {},\n };\n }\n getPageLengthFromRequest(result) {\n return result.data.length;\n }\n isFetchLastOver(result) {\n return !result.data.length;\n }\n canFetchNextPage(result) {\n return result.length > 0;\n }\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n return this._realData;\n }\n}\nexports.UserSearchV1Paginator = UserSearchV1Paginator;\nclass FriendshipsIncomingV1Paginator extends paginator_v1_1.CursoredV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'friendships/incoming.json';\n this._maxResultsWhenFetchLast = 5000;\n }\n refreshInstanceFromResult(response, isNextPage) {\n const result = response.data;\n this._rateLimit = response.rateLimit;\n if (isNextPage) {\n this._realData.ids.push(...result.ids);\n this._realData.next_cursor = result.next_cursor;\n }\n }\n getPageLengthFromRequest(result) {\n return result.data.ids.length;\n }\n getItemArray() {\n return this.ids;\n }\n /**\n * Users IDs returned by paginator.\n */\n get ids() {\n return this._realData.ids;\n }\n}\nexports.FriendshipsIncomingV1Paginator = FriendshipsIncomingV1Paginator;\nclass FriendshipsOutgoingV1Paginator extends FriendshipsIncomingV1Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'friendships/outgoing.json';\n }\n}\nexports.FriendshipsOutgoingV1Paginator = FriendshipsOutgoingV1Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetRetweetersUsersV2Paginator = exports.TweetLikingUsersV2Paginator = exports.UserListFollowersV2Paginator = exports.UserListMembersV2Paginator = exports.UserFollowingV2Paginator = exports.UserFollowersV2Paginator = exports.UserMutingUsersV2Paginator = exports.UserBlockingUsersV2Paginator = void 0;\nconst v2_paginator_1 = require(\"./v2.paginator\");\n/** A generic PreviousableTwitterPaginator able to consume UserV2 timelines. */\nclass UserTimelineV2Paginator extends v2_paginator_1.TimelineV2Paginator {\n getItemArray() {\n return this.users;\n }\n /**\n * Users returned by paginator.\n */\n get users() {\n var _a;\n return (_a = this._realData.data) !== null && _a !== void 0 ? _a : [];\n }\n get meta() {\n return super.meta;\n }\n}\nclass UserBlockingUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/blocking';\n }\n}\nexports.UserBlockingUsersV2Paginator = UserBlockingUsersV2Paginator;\nclass UserMutingUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/muting';\n }\n}\nexports.UserMutingUsersV2Paginator = UserMutingUsersV2Paginator;\nclass UserFollowersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/followers';\n }\n}\nexports.UserFollowersV2Paginator = UserFollowersV2Paginator;\nclass UserFollowingV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'users/:id/following';\n }\n}\nexports.UserFollowingV2Paginator = UserFollowingV2Paginator;\nclass UserListMembersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/:id/members';\n }\n}\nexports.UserListMembersV2Paginator = UserListMembersV2Paginator;\nclass UserListFollowersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'lists/:id/followers';\n }\n}\nexports.UserListFollowersV2Paginator = UserListFollowersV2Paginator;\nclass TweetLikingUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/:id/liking_users';\n }\n}\nexports.TweetLikingUsersV2Paginator = TweetLikingUsersV2Paginator;\nclass TweetRetweetersUsersV2Paginator extends UserTimelineV2Paginator {\n constructor() {\n super(...arguments);\n this._endpoint = 'tweets/:id/retweeted_by';\n }\n}\nexports.TweetRetweetersUsersV2Paginator = TweetRetweetersUsersV2Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TimelineV2Paginator = exports.TwitterV2Paginator = void 0;\nconst includes_v2_helper_1 = require(\"../v2/includes.v2.helper\");\nconst TwitterPaginator_1 = require(\"./TwitterPaginator\");\n/** A generic PreviousableTwitterPaginator with common v2 helper methods. */\nclass TwitterV2Paginator extends TwitterPaginator_1.PreviousableTwitterPaginator {\n updateIncludes(data) {\n // Update errors\n if (data.errors) {\n if (!this._realData.errors) {\n this._realData.errors = [];\n }\n this._realData.errors = [...this._realData.errors, ...data.errors];\n }\n // Update includes\n if (!data.includes) {\n return;\n }\n if (!this._realData.includes) {\n this._realData.includes = {};\n }\n const includesRealData = this._realData.includes;\n for (const [includeKey, includeArray] of Object.entries(data.includes)) {\n if (!includesRealData[includeKey]) {\n includesRealData[includeKey] = [];\n }\n includesRealData[includeKey] = [\n ...includesRealData[includeKey],\n ...includeArray,\n ];\n }\n }\n /** Throw if the current paginator is not usable. */\n assertUsable() {\n if (this.unusable) {\n throw new Error('Unable to use this paginator to fetch more data, as it does not contain any metadata.' +\n ' Check .errors property for more details.');\n }\n }\n get meta() {\n return this._realData.meta;\n }\n get includes() {\n var _a;\n if (!((_a = this._realData) === null || _a === void 0 ? void 0 : _a.includes)) {\n return new includes_v2_helper_1.TwitterV2IncludesHelper(this._realData);\n }\n if (this._includesInstance) {\n return this._includesInstance;\n }\n return this._includesInstance = new includes_v2_helper_1.TwitterV2IncludesHelper(this._realData);\n }\n get errors() {\n var _a;\n return (_a = this._realData.errors) !== null && _a !== void 0 ? _a : [];\n }\n /** `true` if this paginator only contains error payload and no metadata found to consume data. */\n get unusable() {\n return this.errors.length > 0 && !this._realData.meta && !this._realData.data;\n }\n}\nexports.TwitterV2Paginator = TwitterV2Paginator;\n/** A generic TwitterV2Paginator able to consume v2 timelines that use max_results and pagination tokens. */\nclass TimelineV2Paginator extends TwitterV2Paginator {\n refreshInstanceFromResult(response, isNextPage) {\n var _a;\n const result = response.data;\n const resultData = (_a = result.data) !== null && _a !== void 0 ? _a : [];\n this._rateLimit = response.rateLimit;\n if (!this._realData.data) {\n this._realData.data = [];\n }\n if (isNextPage) {\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.meta.next_token = result.meta.next_token;\n this._realData.data.push(...resultData);\n }\n else {\n this._realData.meta.result_count += result.meta.result_count;\n this._realData.meta.previous_token = result.meta.previous_token;\n this._realData.data.unshift(...resultData);\n }\n this.updateIncludes(result);\n }\n getNextQueryParams(maxResults) {\n this.assertUsable();\n return {\n ...this.injectQueryParams(maxResults),\n pagination_token: this._realData.meta.next_token,\n };\n }\n getPreviousQueryParams(maxResults) {\n this.assertUsable();\n return {\n ...this.injectQueryParams(maxResults),\n pagination_token: this._realData.meta.previous_token,\n };\n }\n getPageLengthFromRequest(result) {\n var _a, _b;\n return (_b = (_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n }\n isFetchLastOver(result) {\n var _a;\n return !((_a = result.data.data) === null || _a === void 0 ? void 0 : _a.length) || !this.canFetchNextPage(result.data);\n }\n canFetchNextPage(result) {\n var _a;\n return !!((_a = result.meta) === null || _a === void 0 ? void 0 : _a.next_token);\n }\n}\nexports.TimelineV2Paginator = TimelineV2Paginator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.applyResponseHooks = exports.hasRequestErrorPlugins = void 0;\nconst types_1 = require(\"../types\");\n/* Plugin helpers */\nfunction hasRequestErrorPlugins(client) {\n var _a;\n if (!((_a = client.clientSettings.plugins) === null || _a === void 0 ? void 0 : _a.length)) {\n return false;\n }\n for (const plugin of client.clientSettings.plugins) {\n if (plugin.onRequestError || plugin.onResponseError) {\n return true;\n }\n }\n return false;\n}\nexports.hasRequestErrorPlugins = hasRequestErrorPlugins;\nasync function applyResponseHooks(requestParams, computedParams, requestOptions, error) {\n let override;\n if (error instanceof types_1.ApiRequestError || error instanceof types_1.ApiPartialResponseError) {\n override = await this.applyPluginMethod('onRequestError', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n error,\n });\n }\n else if (error instanceof types_1.ApiResponseError) {\n override = await this.applyPluginMethod('onResponseError', {\n client: this,\n url: this.getUrlObjectFromUrlString(requestParams.url),\n params: requestParams,\n computedParams,\n requestOptions,\n error,\n });\n }\n if (override && override instanceof types_1.TwitterApiPluginResponseOverride) {\n return override.value;\n }\n return Promise.reject(error);\n}\nexports.applyResponseHooks = applyResponseHooks;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiV2Settings = void 0;\nexports.TwitterApiV2Settings = {\n debug: false,\n deprecationWarnings: true,\n logger: { log: console.log.bind(console) },\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetStream = void 0;\nconst events_1 = require(\"events\");\nconst request_handler_helper_1 = __importDefault(require(\"../client-mixins/request-handler.helper\"));\nconst types_1 = require(\"../types\");\nconst TweetStreamEventCombiner_1 = __importDefault(require(\"./TweetStreamEventCombiner\"));\nconst TweetStreamParser_1 = __importStar(require(\"./TweetStreamParser\"));\n// In seconds\nconst basicRetriesAttempt = [5, 15, 30, 60, 90, 120, 180, 300, 600, 900];\n// Default retry function\nconst basicReconnectRetry = tryOccurence => tryOccurence > basicRetriesAttempt.length\n ? 901000\n : basicRetriesAttempt[tryOccurence - 1] * 1000;\nclass TweetStream extends events_1.EventEmitter {\n constructor(requestData, connection) {\n super();\n this.requestData = requestData;\n this.autoReconnect = false;\n this.autoReconnectRetries = 5;\n // 2 minutes without any Twitter signal\n this.keepAliveTimeoutMs = 1000 * 120;\n this.nextRetryTimeout = basicReconnectRetry;\n this.parser = new TweetStreamParser_1.default();\n this.connectionProcessRunning = false;\n this.onKeepAliveTimeout = this.onKeepAliveTimeout.bind(this);\n this.initEventsFromParser();\n if (connection) {\n this.req = connection.req;\n this.res = connection.res;\n this.originalResponse = connection.originalResponse;\n this.initEventsFromRequest();\n }\n }\n on(event, handler) {\n return super.on(event, handler);\n }\n initEventsFromRequest() {\n if (!this.req || !this.res) {\n throw new Error('TweetStream error: You cannot init TweetStream without a request and response object.');\n }\n const errorHandler = (err) => {\n this.emit(types_1.ETwitterStreamEvent.ConnectionError, err);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.ConnectionError,\n error: err,\n message: 'Connection lost or closed by Twitter.',\n });\n this.onConnectionError();\n };\n this.req.on('error', errorHandler);\n this.res.on('error', errorHandler);\n // Usually, connection should not be closed by Twitter!\n this.res.on('close', () => errorHandler(new Error('Connection closed by Twitter.')));\n this.res.on('data', (chunk) => {\n this.resetKeepAliveTimeout();\n if (chunk.toString() === '\\r\\n') {\n return this.emit(types_1.ETwitterStreamEvent.DataKeepAlive);\n }\n this.parser.push(chunk.toString());\n });\n // Starts the keep alive timeout\n this.resetKeepAliveTimeout();\n }\n initEventsFromParser() {\n const payloadIsError = this.requestData.payloadIsError;\n this.parser.on(TweetStreamParser_1.EStreamParserEvent.ParsedData, (eventData) => {\n if (payloadIsError && payloadIsError(eventData)) {\n this.emit(types_1.ETwitterStreamEvent.DataError, eventData);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.DataError,\n error: eventData,\n message: 'Twitter sent a payload that is detected as an error payload.',\n });\n }\n else {\n this.emit(types_1.ETwitterStreamEvent.Data, eventData);\n }\n });\n this.parser.on(TweetStreamParser_1.EStreamParserEvent.ParseError, (error) => {\n this.emit(types_1.ETwitterStreamEvent.TweetParseError, error);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.TweetParseError,\n error,\n message: 'Failed to parse stream data.',\n });\n });\n }\n resetKeepAliveTimeout() {\n this.unbindKeepAliveTimeout();\n if (this.keepAliveTimeoutMs !== Infinity) {\n this.keepAliveTimeout = setTimeout(this.onKeepAliveTimeout, this.keepAliveTimeoutMs);\n }\n }\n onKeepAliveTimeout() {\n this.emit(types_1.ETwitterStreamEvent.ConnectionLost);\n this.onConnectionError();\n }\n unbindTimeouts() {\n this.unbindRetryTimeout();\n this.unbindKeepAliveTimeout();\n }\n unbindKeepAliveTimeout() {\n if (this.keepAliveTimeout) {\n clearTimeout(this.keepAliveTimeout);\n this.keepAliveTimeout = undefined;\n }\n }\n unbindRetryTimeout() {\n if (this.retryTimeout) {\n clearTimeout(this.retryTimeout);\n this.retryTimeout = undefined;\n }\n }\n closeWithoutEmit() {\n this.unbindTimeouts();\n if (this.res) {\n this.res.removeAllListeners();\n // Close response silentely\n this.res.destroy();\n }\n if (this.req) {\n this.req.removeAllListeners();\n // Close connection silentely\n this.req.destroy();\n }\n }\n /** Terminate connection to Twitter. */\n close() {\n this.emit(types_1.ETwitterStreamEvent.ConnectionClosed);\n this.closeWithoutEmit();\n }\n /** Unbind all listeners, and close connection. */\n destroy() {\n this.removeAllListeners();\n this.close();\n }\n /**\n * Make a new request that creates a new `TweetStream` instance with\n * the same parameters, and bind current listeners to new stream.\n */\n async clone() {\n const newRequest = new request_handler_helper_1.default(this.requestData);\n const newStream = await newRequest.makeRequestAsStream();\n // Clone attached listeners\n const listenerNames = this.eventNames();\n for (const listener of listenerNames) {\n const callbacks = this.listeners(listener);\n for (const callback of callbacks) {\n newStream.on(listener, callback);\n }\n }\n return newStream;\n }\n /** Start initial stream connection, setup options on current instance and returns itself. */\n async connect(options = {}) {\n if (typeof options.autoReconnect !== 'undefined') {\n this.autoReconnect = options.autoReconnect;\n }\n if (typeof options.autoReconnectRetries !== 'undefined') {\n this.autoReconnectRetries = options.autoReconnectRetries === 'unlimited'\n ? Infinity\n : options.autoReconnectRetries;\n }\n if (typeof options.keepAliveTimeout !== 'undefined') {\n this.keepAliveTimeoutMs = options.keepAliveTimeout === 'disable'\n ? Infinity\n : options.keepAliveTimeout;\n }\n if (typeof options.nextRetryTimeout !== 'undefined') {\n this.nextRetryTimeout = options.nextRetryTimeout;\n }\n // Make the connection\n this.unbindTimeouts();\n try {\n await this.reconnect();\n }\n catch (e) {\n this.emit(types_1.ETwitterStreamEvent.ConnectError, 0);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.ConnectError,\n error: e,\n message: 'Connect error - Initial connection just failed.',\n });\n // Only make a reconnection attempt if autoReconnect is true!\n // Otherwise, let error be propagated\n if (this.autoReconnect) {\n this.makeAutoReconnectRetry(0, e);\n }\n else {\n throw e;\n }\n }\n return this;\n }\n /** Make a new request to (re)connect to Twitter. */\n async reconnect() {\n if (this.connectionProcessRunning) {\n throw new Error('Connection process is already running.');\n }\n this.connectionProcessRunning = true;\n try {\n let initialConnection = true;\n if (this.req) {\n initialConnection = false;\n this.closeWithoutEmit();\n }\n const { req, res, originalResponse } = await new request_handler_helper_1.default(this.requestData).makeRequestAndResolveWhenReady();\n this.req = req;\n this.res = res;\n this.originalResponse = originalResponse;\n this.emit(initialConnection ? types_1.ETwitterStreamEvent.Connected : types_1.ETwitterStreamEvent.Reconnected);\n this.parser.reset();\n this.initEventsFromRequest();\n }\n finally {\n this.connectionProcessRunning = false;\n }\n }\n async onConnectionError(retryOccurence = 0) {\n this.unbindTimeouts();\n // Close the request if necessary\n this.closeWithoutEmit();\n // Terminate stream by events if necessary (no auto-reconnect or retries exceeded)\n if (!this.autoReconnect) {\n this.emit(types_1.ETwitterStreamEvent.ConnectionClosed);\n return;\n }\n if (retryOccurence >= this.autoReconnectRetries) {\n this.emit(types_1.ETwitterStreamEvent.ReconnectLimitExceeded);\n this.emit(types_1.ETwitterStreamEvent.ConnectionClosed);\n return;\n }\n // If all other conditions fails, do a reconnect attempt\n try {\n this.emit(types_1.ETwitterStreamEvent.ReconnectAttempt, retryOccurence);\n await this.reconnect();\n }\n catch (e) {\n this.emit(types_1.ETwitterStreamEvent.ReconnectError, retryOccurence);\n this.emit(types_1.ETwitterStreamEvent.Error, {\n type: types_1.ETwitterStreamEvent.ReconnectError,\n error: e,\n message: `Reconnect error - ${retryOccurence + 1} attempts made yet.`,\n });\n this.makeAutoReconnectRetry(retryOccurence, e);\n }\n }\n makeAutoReconnectRetry(retryOccurence, error) {\n const nextRetry = this.nextRetryTimeout(retryOccurence + 1, error);\n this.retryTimeout = setTimeout(() => {\n this.onConnectionError(retryOccurence + 1);\n }, nextRetry);\n }\n async *[Symbol.asyncIterator]() {\n const eventCombiner = new TweetStreamEventCombiner_1.default(this);\n try {\n while (true) {\n if (!this.req || this.req.aborted) {\n throw new Error('Connection closed');\n }\n if (eventCombiner.hasStack()) {\n yield* eventCombiner.popStack();\n }\n const { type, payload } = await eventCombiner.nextEvent();\n if (type === 'error') {\n throw payload;\n }\n }\n }\n finally {\n eventCombiner.destroy();\n }\n }\n}\nexports.TweetStream = TweetStream;\nexports.default = TweetStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TweetStreamEventCombiner = void 0;\nconst events_1 = require(\"events\");\nconst types_1 = require(\"../types\");\nclass TweetStreamEventCombiner extends events_1.EventEmitter {\n constructor(stream) {\n super();\n this.stream = stream;\n this.stack = [];\n this.onStreamData = this.onStreamData.bind(this);\n this.onStreamError = this.onStreamError.bind(this);\n this.onceNewEvent = this.once.bind(this, 'event');\n // Init events from stream\n stream.on(types_1.ETwitterStreamEvent.Data, this.onStreamData);\n // Ignore reconnect errors: Don't close event combiner until connection error/closed\n stream.on(types_1.ETwitterStreamEvent.ConnectionError, this.onStreamError);\n stream.on(types_1.ETwitterStreamEvent.TweetParseError, this.onStreamError);\n stream.on(types_1.ETwitterStreamEvent.ConnectionClosed, this.onStreamError);\n }\n /** Returns a new `Promise` that will `resolve` on next event (`data` or any sort of error). */\n nextEvent() {\n return new Promise(this.onceNewEvent);\n }\n /** Returns `true` if there's something in the stack. */\n hasStack() {\n return this.stack.length > 0;\n }\n /** Returns stacked data events, and clean the stack. */\n popStack() {\n const stack = this.stack;\n this.stack = [];\n return stack;\n }\n /** Cleanup all the listeners attached on stream. */\n destroy() {\n this.removeAllListeners();\n this.stream.off(types_1.ETwitterStreamEvent.Data, this.onStreamData);\n this.stream.off(types_1.ETwitterStreamEvent.ConnectionError, this.onStreamError);\n this.stream.off(types_1.ETwitterStreamEvent.TweetParseError, this.onStreamError);\n this.stream.off(types_1.ETwitterStreamEvent.ConnectionClosed, this.onStreamError);\n }\n emitEvent(type, payload) {\n this.emit('event', { type, payload });\n }\n onStreamError(payload) {\n this.emitEvent('error', payload);\n }\n onStreamData(payload) {\n this.stack.push(payload);\n this.emitEvent('data', payload);\n }\n}\nexports.TweetStreamEventCombiner = TweetStreamEventCombiner;\nexports.default = TweetStreamEventCombiner;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EStreamParserEvent = void 0;\nconst events_1 = require(\"events\");\nclass TweetStreamParser extends events_1.EventEmitter {\n constructor() {\n super(...arguments);\n this.currentMessage = '';\n }\n // Code partially belongs to twitter-stream-api for this\n // https://github.com/trygve-lie/twitter-stream-api/blob/master/lib/parser.js\n push(chunk) {\n this.currentMessage += chunk;\n chunk = this.currentMessage;\n const size = chunk.length;\n let start = 0;\n let offset = 0;\n while (offset < size) {\n // Take [offset, offset+1] inside a new string\n if (chunk.slice(offset, offset + 2) === '\\r\\n') {\n // If chunk contains \\r\\n after current offset,\n // parse [start, ..., offset] as a tweet\n const piece = chunk.slice(start, offset);\n start = offset += 2;\n // If empty object\n if (!piece.length) {\n continue;\n }\n try {\n const payload = JSON.parse(piece);\n if (payload) {\n this.emit(EStreamParserEvent.ParsedData, payload);\n continue;\n }\n }\n catch (error) {\n this.emit(EStreamParserEvent.ParseError, error);\n }\n }\n offset++;\n }\n this.currentMessage = chunk.slice(start, size);\n }\n /** Reset the currently stored message (f.e. on connection reset) */\n reset() {\n this.currentMessage = '';\n }\n}\nexports.default = TweetStreamParser;\nvar EStreamParserEvent;\n(function (EStreamParserEvent) {\n EStreamParserEvent[\"ParsedData\"] = \"parsed data\";\n EStreamParserEvent[\"ParseError\"] = \"parse error\";\n})(EStreamParserEvent = exports.EStreamParserEvent || (exports.EStreamParserEvent = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ETwitterStreamEvent = void 0;\nvar ETwitterStreamEvent;\n(function (ETwitterStreamEvent) {\n ETwitterStreamEvent[\"Connected\"] = \"connected\";\n ETwitterStreamEvent[\"ConnectError\"] = \"connect error\";\n ETwitterStreamEvent[\"ConnectionError\"] = \"connection error\";\n ETwitterStreamEvent[\"ConnectionClosed\"] = \"connection closed\";\n ETwitterStreamEvent[\"ConnectionLost\"] = \"connection lost\";\n ETwitterStreamEvent[\"ReconnectAttempt\"] = \"reconnect attempt\";\n ETwitterStreamEvent[\"Reconnected\"] = \"reconnected\";\n ETwitterStreamEvent[\"ReconnectError\"] = \"reconnect error\";\n ETwitterStreamEvent[\"ReconnectLimitExceeded\"] = \"reconnect limit exceeded\";\n ETwitterStreamEvent[\"DataKeepAlive\"] = \"data keep-alive\";\n ETwitterStreamEvent[\"Data\"] = \"data event content\";\n ETwitterStreamEvent[\"DataError\"] = \"data twitter error\";\n ETwitterStreamEvent[\"TweetParseError\"] = \"data tweet parse error\";\n ETwitterStreamEvent[\"Error\"] = \"stream error\";\n})(ETwitterStreamEvent = exports.ETwitterStreamEvent || (exports.ETwitterStreamEvent = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EApiV2ErrorCode = exports.EApiV1ErrorCode = exports.ApiResponseError = exports.ApiPartialResponseError = exports.ApiRequestError = exports.ETwitterApiError = void 0;\nvar ETwitterApiError;\n(function (ETwitterApiError) {\n ETwitterApiError[\"Request\"] = \"request\";\n ETwitterApiError[\"PartialResponse\"] = \"partial-response\";\n ETwitterApiError[\"Response\"] = \"response\";\n})(ETwitterApiError = exports.ETwitterApiError || (exports.ETwitterApiError = {}));\n/* ERRORS INSTANCES */\nclass ApiError extends Error {\n constructor() {\n super(...arguments);\n this.error = true;\n }\n}\nclass ApiRequestError extends ApiError {\n constructor(message, options) {\n super(message);\n this.type = ETwitterApiError.Request;\n Error.captureStackTrace(this, this.constructor);\n // Do not show on Node stack trace\n Object.defineProperty(this, '_options', { value: options });\n }\n get request() {\n return this._options.request;\n }\n get requestError() {\n return this._options.requestError;\n }\n toJSON() {\n return {\n type: this.type,\n error: this.requestError,\n };\n }\n}\nexports.ApiRequestError = ApiRequestError;\nclass ApiPartialResponseError extends ApiError {\n constructor(message, options) {\n super(message);\n this.type = ETwitterApiError.PartialResponse;\n Error.captureStackTrace(this, this.constructor);\n // Do not show on Node stack trace\n Object.defineProperty(this, '_options', { value: options });\n }\n get request() {\n return this._options.request;\n }\n get response() {\n return this._options.response;\n }\n get responseError() {\n return this._options.responseError;\n }\n get rawContent() {\n return this._options.rawContent;\n }\n toJSON() {\n return {\n type: this.type,\n error: this.responseError,\n };\n }\n}\nexports.ApiPartialResponseError = ApiPartialResponseError;\nclass ApiResponseError extends ApiError {\n constructor(message, options) {\n super(message);\n this.type = ETwitterApiError.Response;\n Error.captureStackTrace(this, this.constructor);\n // Do not show on Node stack trace\n Object.defineProperty(this, '_options', { value: options });\n this.code = options.code;\n this.headers = options.headers;\n this.rateLimit = options.rateLimit;\n // Fix bad error data payload on some v1 endpoints (see https://github.com/PLhery/node-twitter-api-v2/issues/342)\n if (options.data && typeof options.data === 'object' && 'error' in options.data && !options.data.errors) {\n const data = { ...options.data };\n data.errors = [{\n code: EApiV1ErrorCode.InternalError,\n message: data.error,\n }];\n this.data = data;\n }\n else {\n this.data = options.data;\n }\n }\n get request() {\n return this._options.request;\n }\n get response() {\n return this._options.response;\n }\n /** Check for presence of one of given v1/v2 error codes. */\n hasErrorCode(...codes) {\n const errors = this.errors;\n // No errors\n if (!(errors === null || errors === void 0 ? void 0 : errors.length)) {\n return false;\n }\n // v1 errors\n if ('code' in errors[0]) {\n const v1errors = errors;\n return v1errors.some(error => codes.includes(error.code));\n }\n // v2 error\n const v2error = this.data;\n return codes.includes(v2error.type);\n }\n get errors() {\n var _a;\n return (_a = this.data) === null || _a === void 0 ? void 0 : _a.errors;\n }\n get rateLimitError() {\n return this.code === 420 || this.code === 429;\n }\n get isAuthError() {\n if (this.code === 401) {\n return true;\n }\n return this.hasErrorCode(EApiV1ErrorCode.AuthTimestampInvalid, EApiV1ErrorCode.AuthenticationFail, EApiV1ErrorCode.BadAuthenticationData, EApiV1ErrorCode.InvalidOrExpiredToken);\n }\n toJSON() {\n return {\n type: this.type,\n code: this.code,\n error: this.data,\n rateLimit: this.rateLimit,\n headers: this.headers,\n };\n }\n}\nexports.ApiResponseError = ApiResponseError;\nvar EApiV1ErrorCode;\n(function (EApiV1ErrorCode) {\n // Location errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidCoordinates\"] = 3] = \"InvalidCoordinates\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoLocationFound\"] = 13] = \"NoLocationFound\";\n // Authentication failures\n EApiV1ErrorCode[EApiV1ErrorCode[\"AuthenticationFail\"] = 32] = \"AuthenticationFail\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidOrExpiredToken\"] = 89] = \"InvalidOrExpiredToken\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"UnableToVerifyCredentials\"] = 99] = \"UnableToVerifyCredentials\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"AuthTimestampInvalid\"] = 135] = \"AuthTimestampInvalid\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"BadAuthenticationData\"] = 215] = \"BadAuthenticationData\";\n // Resources not found or visible\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoUserMatch\"] = 17] = \"NoUserMatch\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"UserNotFound\"] = 50] = \"UserNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"ResourceNotFound\"] = 34] = \"ResourceNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetNotFound\"] = 144] = \"TweetNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetNotVisible\"] = 179] = \"TweetNotVisible\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NotAllowedResource\"] = 220] = \"NotAllowedResource\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"MediaIdNotFound\"] = 325] = \"MediaIdNotFound\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetNoLongerAvailable\"] = 421] = \"TweetNoLongerAvailable\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetViolatedRules\"] = 422] = \"TweetViolatedRules\";\n // Account errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"TargetUserSuspended\"] = 63] = \"TargetUserSuspended\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"YouAreSuspended\"] = 64] = \"YouAreSuspended\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"AccountUpdateFailed\"] = 120] = \"AccountUpdateFailed\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoSelfSpamReport\"] = 36] = \"NoSelfSpamReport\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoSelfMute\"] = 271] = \"NoSelfMute\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"AccountLocked\"] = 326] = \"AccountLocked\";\n // Application live errors / Twitter errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"RateLimitExceeded\"] = 88] = \"RateLimitExceeded\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoDMRightForApp\"] = 93] = \"NoDMRightForApp\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"OverCapacity\"] = 130] = \"OverCapacity\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InternalError\"] = 131] = \"InternalError\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TooManyFollowings\"] = 161] = \"TooManyFollowings\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetLimitExceeded\"] = 185] = \"TweetLimitExceeded\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"DuplicatedTweet\"] = 187] = \"DuplicatedTweet\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TooManySpamReports\"] = 205] = \"TooManySpamReports\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"RequestLooksLikeSpam\"] = 226] = \"RequestLooksLikeSpam\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoWriteRightForApp\"] = 261] = \"NoWriteRightForApp\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetActionsDisabled\"] = 425] = \"TweetActionsDisabled\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetRepliesRestricted\"] = 433] = \"TweetRepliesRestricted\";\n // Invalid request parameters\n EApiV1ErrorCode[EApiV1ErrorCode[\"NamedParameterMissing\"] = 38] = \"NamedParameterMissing\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidAttachmentUrl\"] = 44] = \"InvalidAttachmentUrl\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetTextTooLong\"] = 186] = \"TweetTextTooLong\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"MissingUrlParameter\"] = 195] = \"MissingUrlParameter\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"NoMultipleGifs\"] = 323] = \"NoMultipleGifs\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidMediaIds\"] = 324] = \"InvalidMediaIds\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"InvalidUrl\"] = 407] = \"InvalidUrl\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TooManyTweetAttachments\"] = 386] = \"TooManyTweetAttachments\";\n // Already sent/deleted item\n EApiV1ErrorCode[EApiV1ErrorCode[\"StatusAlreadyFavorited\"] = 139] = \"StatusAlreadyFavorited\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"FollowRequestAlreadySent\"] = 160] = \"FollowRequestAlreadySent\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"CannotUnmuteANonMutedAccount\"] = 272] = \"CannotUnmuteANonMutedAccount\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"TweetAlreadyRetweeted\"] = 327] = \"TweetAlreadyRetweeted\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"ReplyToDeletedTweet\"] = 385] = \"ReplyToDeletedTweet\";\n // DM Errors\n EApiV1ErrorCode[EApiV1ErrorCode[\"DMReceiverNotFollowingYou\"] = 150] = \"DMReceiverNotFollowingYou\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"UnableToSendDM\"] = 151] = \"UnableToSendDM\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"MustAllowDMFromAnyone\"] = 214] = \"MustAllowDMFromAnyone\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"CannotSendDMToThisUser\"] = 349] = \"CannotSendDMToThisUser\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"DMTextTooLong\"] = 354] = \"DMTextTooLong\";\n // Appication misconfiguration\n EApiV1ErrorCode[EApiV1ErrorCode[\"SubscriptionAlreadyExists\"] = 355] = \"SubscriptionAlreadyExists\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"CallbackUrlNotApproved\"] = 415] = \"CallbackUrlNotApproved\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"SuspendedApplication\"] = 416] = \"SuspendedApplication\";\n EApiV1ErrorCode[EApiV1ErrorCode[\"OobOauthIsNotAllowed\"] = 417] = \"OobOauthIsNotAllowed\";\n})(EApiV1ErrorCode = exports.EApiV1ErrorCode || (exports.EApiV1ErrorCode = {}));\nvar EApiV2ErrorCode;\n(function (EApiV2ErrorCode) {\n // Request errors\n EApiV2ErrorCode[\"InvalidRequest\"] = \"https://api.twitter.com/2/problems/invalid-request\";\n EApiV2ErrorCode[\"ClientForbidden\"] = \"https://api.twitter.com/2/problems/client-forbidden\";\n EApiV2ErrorCode[\"UnsupportedAuthentication\"] = \"https://api.twitter.com/2/problems/unsupported-authentication\";\n // Stream rules errors\n EApiV2ErrorCode[\"InvalidRules\"] = \"https://api.twitter.com/2/problems/invalid-rules\";\n EApiV2ErrorCode[\"TooManyRules\"] = \"https://api.twitter.com/2/problems/rule-cap\";\n EApiV2ErrorCode[\"DuplicatedRules\"] = \"https://api.twitter.com/2/problems/duplicate-rules\";\n // Twitter errors\n EApiV2ErrorCode[\"RateLimitExceeded\"] = \"https://api.twitter.com/2/problems/usage-capped\";\n EApiV2ErrorCode[\"ConnectionError\"] = \"https://api.twitter.com/2/problems/streaming-connection\";\n EApiV2ErrorCode[\"ClientDisconnected\"] = \"https://api.twitter.com/2/problems/client-disconnected\";\n EApiV2ErrorCode[\"TwitterDisconnectedYou\"] = \"https://api.twitter.com/2/problems/operational-disconnect\";\n // Resource errors\n EApiV2ErrorCode[\"ResourceNotFound\"] = \"https://api.twitter.com/2/problems/resource-not-found\";\n EApiV2ErrorCode[\"ResourceUnauthorized\"] = \"https://api.twitter.com/2/problems/not-authorized-for-resource\";\n EApiV2ErrorCode[\"DisallowedResource\"] = \"https://api.twitter.com/2/problems/disallowed-resource\";\n})(EApiV2ErrorCode = exports.EApiV2ErrorCode || (exports.EApiV2ErrorCode = {}));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./v1\"), exports);\n__exportStar(require(\"./v2\"), exports);\n__exportStar(require(\"./errors.types\"), exports);\n__exportStar(require(\"./responses.types\"), exports);\n__exportStar(require(\"./client.types\"), exports);\n__exportStar(require(\"./auth.types\"), exports);\n__exportStar(require(\"./plugins\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiPluginResponseOverride = void 0;\nclass TwitterApiPluginResponseOverride {\n constructor(value) {\n this.value = value;\n }\n}\nexports.TwitterApiPluginResponseOverride = TwitterApiPluginResponseOverride;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client.plugins.types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EDirectMessageEventTypeV1 = void 0;\n// Creation of DMs\nvar EDirectMessageEventTypeV1;\n(function (EDirectMessageEventTypeV1) {\n EDirectMessageEventTypeV1[\"Create\"] = \"message_create\";\n EDirectMessageEventTypeV1[\"WelcomeCreate\"] = \"welcome_message\";\n})(EDirectMessageEventTypeV1 = exports.EDirectMessageEventTypeV1 || (exports.EDirectMessageEventTypeV1 = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./streaming.v1.types\"), exports);\n__exportStar(require(\"./tweet.v1.types\"), exports);\n__exportStar(require(\"./entities.v1.types\"), exports);\n__exportStar(require(\"./user.v1.types\"), exports);\n__exportStar(require(\"./dev-utilities.v1.types\"), exports);\n__exportStar(require(\"./geo.v1.types\"), exports);\n__exportStar(require(\"./trends.v1.types\"), exports);\n__exportStar(require(\"./dm.v1.types\"), exports);\n__exportStar(require(\"./list.v1.types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EUploadMimeType = void 0;\nvar EUploadMimeType;\n(function (EUploadMimeType) {\n EUploadMimeType[\"Jpeg\"] = \"image/jpeg\";\n EUploadMimeType[\"Mp4\"] = \"video/mp4\";\n EUploadMimeType[\"Gif\"] = \"image/gif\";\n EUploadMimeType[\"Png\"] = \"image/png\";\n EUploadMimeType[\"Srt\"] = \"text/plain\";\n EUploadMimeType[\"Webp\"] = \"image/webp\";\n})(EUploadMimeType = exports.EUploadMimeType || (exports.EUploadMimeType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./streaming.v2.types\"), exports);\n__exportStar(require(\"./tweet.v2.types\"), exports);\n__exportStar(require(\"./tweet.definition.v2\"), exports);\n__exportStar(require(\"./user.v2.types\"), exports);\n__exportStar(require(\"./spaces.v2.types\"), exports);\n__exportStar(require(\"./list.v2.types\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\n// ---------------\n// -- Streaming --\n// ---------------\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiv1 = void 0;\nconst globals_1 = require(\"../globals\");\nconst dm_paginator_v1_1 = require(\"../paginators/dm.paginator.v1\");\nconst types_1 = require(\"../types\");\nconst client_v1_write_1 = __importDefault(require(\"./client.v1.write\"));\n/**\n * Twitter v1.1 API client with read/write/DMs rights.\n */\nclass TwitterApiv1 extends client_v1_write_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V1_1_PREFIX;\n }\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n /* Direct messages */\n // Part: Sending and receiving events\n /**\n * Publishes a new message_create event resulting in a Direct Message sent to a specified user from the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/new-event\n */\n sendDm({ recipient_id, custom_profile_id, ...params }) {\n const args = {\n event: {\n type: types_1.EDirectMessageEventTypeV1.Create,\n [types_1.EDirectMessageEventTypeV1.Create]: {\n target: { recipient_id },\n message_data: params,\n },\n },\n };\n if (custom_profile_id) {\n args.event[types_1.EDirectMessageEventTypeV1.Create].custom_profile_id = custom_profile_id;\n }\n return this.post('direct_messages/events/new.json', args, {\n forceBodyMode: 'json',\n });\n }\n /**\n * Returns a single Direct Message event by the given id.\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/get-event\n */\n getDmEvent(id) {\n return this.get('direct_messages/events/show.json', { id });\n }\n /**\n * Deletes the direct message specified in the required ID parameter.\n * The authenticating user must be the recipient of the specified direct message.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/delete-message-event\n */\n deleteDm(id) {\n return this.delete('direct_messages/events/destroy.json', { id });\n }\n /**\n * Returns all Direct Message events (both sent and received) within the last 30 days.\n * Sorted in reverse-chronological order.\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events\n */\n async listDmEvents(args = {}) {\n const queryParams = { ...args };\n const initialRq = await this.get('direct_messages/events/list.json', queryParams, { fullResponse: true });\n return new dm_paginator_v1_1.DmEventsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n // Part: Welcome messages (events)\n /**\n * Creates a new Welcome Message that will be stored and sent in the future from the authenticating user in defined circumstances.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/new-welcome-message\n */\n newWelcomeDm(name, data) {\n const args = {\n [types_1.EDirectMessageEventTypeV1.WelcomeCreate]: {\n name,\n message_data: data,\n },\n };\n return this.post('direct_messages/welcome_messages/new.json', args, {\n forceBodyMode: 'json',\n });\n }\n /**\n * Returns a Welcome Message by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/get-welcome-message\n */\n getWelcomeDm(id) {\n return this.get('direct_messages/welcome_messages/show.json', { id });\n }\n /**\n * Deletes a Welcome Message by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/delete-welcome-message\n */\n deleteWelcomeDm(id) {\n return this.delete('direct_messages/welcome_messages/destroy.json', { id });\n }\n /**\n * Updates a Welcome Message by the given ID.\n * Updates to the welcome_message object are atomic.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/update-welcome-message\n */\n updateWelcomeDm(id, data) {\n const args = { message_data: data };\n return this.put('direct_messages/welcome_messages/update.json', args, {\n forceBodyMode: 'json',\n query: { id },\n });\n }\n /**\n * Returns all Direct Message events (both sent and received) within the last 30 days.\n * Sorted in reverse-chronological order.\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events\n */\n async listWelcomeDms(args = {}) {\n const queryParams = { ...args };\n const initialRq = await this.get('direct_messages/welcome_messages/list.json', queryParams, { fullResponse: true });\n return new dm_paginator_v1_1.WelcomeDmV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n // Part: Welcome message (rules)\n /**\n * Creates a new Welcome Message Rule that determines which Welcome Message will be shown in a given conversation.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/new-welcome-message-rule\n */\n newWelcomeDmRule(welcomeMessageId) {\n return this.post('direct_messages/welcome_messages/rules/new.json', {\n welcome_message_rule: { welcome_message_id: welcomeMessageId },\n }, {\n forceBodyMode: 'json',\n });\n }\n /**\n * Returns a Welcome Message Rule by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/get-welcome-message-rule\n */\n getWelcomeDmRule(id) {\n return this.get('direct_messages/welcome_messages/rules/show.json', { id });\n }\n /**\n * Deletes a Welcome Message Rule by the given id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/delete-welcome-message-rule\n */\n deleteWelcomeDmRule(id) {\n return this.delete('direct_messages/welcome_messages/rules/destroy.json', { id });\n }\n /**\n * Retrieves all welcome DM rules for this account.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/welcome-messages/api-reference/list-welcome-message-rules\n */\n async listWelcomeDmRules(args = {}) {\n const queryParams = { ...args };\n return this.get('direct_messages/welcome_messages/rules/list.json', queryParams);\n }\n /**\n * Set the current showed welcome message for logged account ; wrapper for Welcome DM rules.\n * Test if a rule already exists, delete if any, then create a rule for current message ID.\n *\n * If you don't have already a welcome message, create it with `.newWelcomeMessage`.\n */\n async setWelcomeDm(welcomeMessageId, deleteAssociatedWelcomeDmWhenDeletingRule = true) {\n var _a;\n const existingRules = await this.listWelcomeDmRules();\n if ((_a = existingRules.welcome_message_rules) === null || _a === void 0 ? void 0 : _a.length) {\n for (const rule of existingRules.welcome_message_rules) {\n await this.deleteWelcomeDmRule(rule.id);\n if (deleteAssociatedWelcomeDmWhenDeletingRule) {\n await this.deleteWelcomeDm(rule.welcome_message_id);\n }\n }\n }\n return this.newWelcomeDmRule(welcomeMessageId);\n }\n // Part: Read indicator\n /**\n * Marks a message as read in the recipient’s Direct Message conversation view with the sender.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-read-receipt\n */\n markDmAsRead(lastEventId, recipientId) {\n return this.post('direct_messages/mark_read.json', {\n last_read_event_id: lastEventId,\n recipient_id: recipientId,\n }, { forceBodyMode: 'url' });\n }\n /**\n * Displays a visual typing indicator in the recipient’s Direct Message conversation view with the sender.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-typing-indicator\n */\n indicateDmTyping(recipientId) {\n return this.post('direct_messages/indicate_typing.json', {\n recipient_id: recipientId,\n }, { forceBodyMode: 'url' });\n }\n // Part: Images\n /**\n * Get a single image attached to a direct message. TwitterApi client must be logged with OAuth 1.0a.\n * https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/message-attachments/guides/retrieving-media\n */\n async downloadDmImage(urlOrDm) {\n if (typeof urlOrDm !== 'string') {\n const attachment = urlOrDm[types_1.EDirectMessageEventTypeV1.Create].message_data.attachment;\n if (!attachment) {\n throw new Error('The given direct message doesn\\'t contain any attachment');\n }\n urlOrDm = attachment.media.media_url_https;\n }\n const data = await this.get(urlOrDm, undefined, { forceParseMode: 'buffer', prefix: '' });\n if (!data.length) {\n throw new Error('Image not found. Make sure you are logged with credentials able to access direct messages, and check the URL.');\n }\n return data;\n }\n}\nexports.TwitterApiv1 = TwitterApiv1;\nexports.default = TwitterApiv1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_subclient_1 = __importDefault(require(\"../client.subclient\"));\nconst globals_1 = require(\"../globals\");\nconst helpers_1 = require(\"../helpers\");\nconst client_v1_1 = __importDefault(require(\"../v1/client.v1\"));\nconst tweet_paginator_v1_1 = require(\"../paginators/tweet.paginator.v1\");\nconst mutes_paginator_v1_1 = require(\"../paginators/mutes.paginator.v1\");\nconst followers_paginator_v1_1 = require(\"../paginators/followers.paginator.v1\");\nconst friends_paginator_v1_1 = require(\"../paginators/friends.paginator.v1\");\nconst user_paginator_v1_1 = require(\"../paginators/user.paginator.v1\");\nconst list_paginator_v1_1 = require(\"../paginators/list.paginator.v1\");\n/**\n * Base Twitter v1 client with only read right.\n */\nclass TwitterApiv1ReadOnly extends client_subclient_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V1_1_PREFIX;\n }\n /* Tweets */\n /**\n * Returns a single Tweet, specified by the id parameter. The Tweet's author will also be embedded within the Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-show-id\n */\n singleTweet(tweetId, options = {}) {\n return this.get('statuses/show.json', { tweet_mode: 'extended', id: tweetId, ...options });\n }\n tweets(ids, options = {}) {\n return this.post('statuses/lookup.json', { tweet_mode: 'extended', id: ids, ...options });\n }\n /**\n * Returns a single Tweet, specified by either a Tweet web URL or the Tweet ID, in an oEmbed-compatible format.\n * The returned HTML snippet will be automatically recognized as an Embedded Tweet when Twitter's widget JavaScript is included on the page.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-oembed\n */\n oembedTweet(tweetId, options = {}) {\n return this.get('oembed', {\n url: `https://twitter.com/i/statuses/${tweetId}`,\n ...options,\n }, { prefix: 'https://publish.twitter.com/' });\n }\n /* Tweets timelines */\n /**\n * Returns a collection of the most recent Tweets and Retweets posted by the authenticating user and the users they follow.\n * The home timeline is central to how most users interact with the Twitter service.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-home_timeline\n */\n async homeTimeline(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('statuses/home_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.HomeTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the 20 most recent mentions (Tweets containing a users's @screen_name) for the authenticating user.\n * The timeline returned is the equivalent of the one seen when you view your mentions on twitter.com.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-mentions_timeline\n */\n async mentionTimeline(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('statuses/mentions_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.MentionTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a collection of the most recent Tweets posted by the user indicated by the user_id parameters.\n * User timelines belonging to protected users may only be requested when the authenticated user either \"owns\" the timeline or is an approved follower of the owner.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline\n */\n async userTimeline(userId, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n user_id: userId,\n ...options,\n };\n const initialRq = await this.get('statuses/user_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a collection of the most recent Tweets posted by the user indicated by the screen_name parameters.\n * User timelines belonging to protected users may only be requested when the authenticated user either \"owns\" the timeline or is an approved follower of the owner.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline\n */\n async userTimelineByUsername(username, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n screen_name: username,\n ...options,\n };\n const initialRq = await this.get('statuses/user_timeline.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the most recent Tweets liked by the authenticating or specified user, 20 tweets by default.\n * Note: favorites are now known as likes.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list\n */\n async favoriteTimeline(userId, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n user_id: userId,\n ...options,\n };\n const initialRq = await this.get('favorites/list.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserFavoritesV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the most recent Tweets liked by the authenticating or specified user, 20 tweets by default.\n * Note: favorites are now known as likes.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list\n */\n async favoriteTimelineByUsername(username, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n screen_name: username,\n ...options,\n };\n const initialRq = await this.get('favorites/list.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.UserFavoritesV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Users */\n /**\n * Returns a variety of information about the user specified by the required user_id or screen_name parameter.\n * The author's most recent Tweet will be returned inline when possible.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-show\n */\n user(user) {\n return this.get('users/show.json', { tweet_mode: 'extended', ...user });\n }\n /**\n * Returns fully-hydrated user objects for up to 100 users per request,\n * as specified by comma-separated values passed to the user_id and/or screen_name parameters.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-lookup\n */\n users(query) {\n return this.get('users/lookup.json', { tweet_mode: 'extended', ...query });\n }\n /**\n * Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful;\n * returns a 401 status code and an error message if not.\n * Use this method to test if supplied user credentials are valid.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials\n */\n verifyCredentials(options = {}) {\n return this.get('account/verify_credentials.json', options);\n }\n /**\n * Returns an array of user objects the authenticating user has muted.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-list\n */\n async listMutedUsers(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('mutes/users/list.json', queryParams, { fullResponse: true });\n return new mutes_paginator_v1_1.MuteUserListV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns an array of numeric user ids the authenticating user has muted.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-ids\n */\n async listMutedUserIds(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('mutes/users/ids.json', queryParams, { fullResponse: true });\n return new mutes_paginator_v1_1.MuteUserIdsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns an array of user objects of friends of the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-list\n */\n async userFriendList(options = {}) {\n const queryParams = {\n ...options,\n };\n const initialRq = await this.get('friends/list.json', queryParams, { fullResponse: true });\n return new friends_paginator_v1_1.UserFriendListV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns an array of user objects of followers of the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-list\n */\n async userFollowerList(options = {}) {\n const queryParams = {\n ...options,\n };\n const initialRq = await this.get('followers/list.json', queryParams, { fullResponse: true });\n return new followers_paginator_v1_1.UserFollowerListV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns an array of numeric user ids of followers of the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids\n */\n async userFollowerIds(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('followers/ids.json', queryParams, { fullResponse: true });\n return new followers_paginator_v1_1.UserFollowerIdsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns an array of numeric user ids of friends of the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids\n */\n async userFollowingIds(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('friends/ids.json', queryParams, { fullResponse: true });\n return new friends_paginator_v1_1.UserFollowersIdsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Provides a simple, relevance-based search interface to public user accounts on Twitter.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-search\n */\n async searchUsers(query, options = {}) {\n const queryParams = {\n q: query,\n tweet_mode: 'extended',\n page: 1,\n ...options,\n };\n const initialRq = await this.get('users/search.json', queryParams, { fullResponse: true });\n return new user_paginator_v1_1.UserSearchV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Friendship API */\n /**\n * Returns detailed information about the relationship between two arbitrary users.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show\n */\n friendship(sources) {\n return this.get('friendships/show.json', sources);\n }\n /**\n * Returns the relationships of the authenticating user to the comma-separated list of up to 100 screen_names or user_ids provided.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup\n */\n friendships(friendships) {\n return this.get('friendships/lookup.json', friendships);\n }\n /**\n * Returns a collection of user_ids that the currently authenticated user does not want to receive retweets from.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-no_retweets-ids\n */\n friendshipsNoRetweets() {\n return this.get('friendships/no_retweets/ids.json', { stringify_ids: true });\n }\n /**\n * Returns a collection of numeric IDs for every user who has a pending request to follow the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming\n */\n async friendshipsIncoming(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('friendships/incoming.json', queryParams, { fullResponse: true });\n return new user_paginator_v1_1.FriendshipsIncomingV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a collection of numeric IDs for every protected user for whom the authenticating user has a pending follow request.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-outgoing\n */\n async friendshipsOutgoing(options = {}) {\n const queryParams = {\n stringify_ids: true,\n ...options,\n };\n const initialRq = await this.get('friendships/outgoing.json', queryParams, { fullResponse: true });\n return new user_paginator_v1_1.FriendshipsOutgoingV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Account/user API */\n /**\n * Get current account settings for authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-settings\n */\n accountSettings() {\n return this.get('account/settings.json');\n }\n /**\n * Returns a map of the available size variations of the specified user's profile banner.\n * If the user has not uploaded a profile banner, a HTTP 404 will be served instead.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-users-profile_banner\n */\n userProfileBannerSizes(params) {\n return this.get('users/profile_banner.json', params);\n }\n /* Lists */\n /**\n * Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-show\n */\n list(options) {\n return this.get('lists/show.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Returns all lists the authenticating or specified user subscribes to, including their own.\n * If no user is given, the authenticating user is used.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-list\n */\n lists(options = {}) {\n return this.get('lists/list.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Returns the members of the specified list. Private list members will only be shown if the authenticated user owns the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members\n */\n async listMembers(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/members.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListMembersV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Check if the specified user is a member of the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show\n */\n listGetMember(options) {\n return this.get('lists/members/show.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Returns the lists the specified user has been added to.\n * If user_id or screen_name are not provided, the memberships for the authenticating user are returned.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-memberships\n */\n async listMemberships(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/memberships.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListMembershipsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the lists owned by the specified Twitter user. Private lists will only be shown if the authenticated user is also the owner of the lists.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-ownerships\n */\n async listOwnerships(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/ownerships.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListOwnershipsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a timeline of tweets authored by members of the specified list. Retweets are included by default.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses\n */\n async listStatuses(options) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/statuses.json', queryParams, { fullResponse: true });\n return new tweet_paginator_v1_1.ListTimelineV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns the subscribers of the specified list. Private list subscribers will only be shown if the authenticated user owns the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers\n */\n async listSubscribers(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/subscribers.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListSubscribersV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Check if the specified user is a subscriber of the specified list. Returns the user if they are a subscriber.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers-show\n */\n listGetSubscriber(options) {\n return this.get('lists/subscribers/show.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Obtain a collection of the lists the specified user is subscribed to, 20 lists per page by default.\n * Does not include the user's own lists.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscriptions\n */\n async listSubscriptions(options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n ...options,\n };\n const initialRq = await this.get('lists/subscriptions.json', queryParams, { fullResponse: true });\n return new list_paginator_v1_1.ListSubscriptionsV1Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /* Media upload API */\n /**\n * The STATUS command (this method) is used to periodically poll for updates of media processing operation.\n * After the STATUS command response returns succeeded, you can move on to the next step which is usually create Tweet with media_id.\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/get-media-upload-status\n */\n mediaInfo(mediaId) {\n return this.get('media/upload.json', {\n command: 'STATUS',\n media_id: mediaId,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n }\n filterStream({ autoConnect, ...params } = {}) {\n const parameters = {};\n for (const [key, value] of Object.entries(params)) {\n if (key === 'follow' || key === 'track') {\n parameters[key] = value.toString();\n }\n else if (key === 'locations') {\n const locations = value;\n parameters.locations = (0, helpers_1.arrayWrap)(locations).map(loc => `${loc.lng},${loc.lat}`).join(',');\n }\n else {\n parameters[key] = value;\n }\n }\n const streamClient = this.stream;\n return streamClient.postStream('statuses/filter.json', parameters, { autoConnect });\n }\n sampleStream({ autoConnect, ...params } = {}) {\n const streamClient = this.stream;\n return streamClient.getStream('statuses/sample.json', params, { autoConnect });\n }\n /**\n * Create a client that is prefixed with `https//stream.twitter.com` instead of classic API URL.\n */\n get stream() {\n const copiedClient = new client_v1_1.default(this);\n copiedClient.setPrefix(globals_1.API_V1_1_STREAM_PREFIX);\n return copiedClient;\n }\n /* Trends API */\n /**\n * Returns the top 50 trending topics for a specific id, if trending information is available for it.\n * Note: The id parameter for this endpoint is the \"where on earth identifier\" or WOEID, which is a legacy identifier created by Yahoo and has been deprecated.\n * https://developer.twitter.com/en/docs/twitter-api/v1/trends/trends-for-location/api-reference/get-trends-place\n */\n trendsByPlace(woeId, options = {}) {\n return this.get('trends/place.json', { id: woeId, ...options });\n }\n /**\n * Returns the locations that Twitter has trending topic information for.\n * The response is an array of \"locations\" that encode the location's WOEID\n * and some other human-readable information such as a canonical name and country the location belongs in.\n * https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-available\n */\n trendsAvailable() {\n return this.get('trends/available.json');\n }\n /**\n * Returns the locations that Twitter has trending topic information for, closest to a specified location.\n * https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-closest\n */\n trendsClosest(lat, long) {\n return this.get('trends/closest.json', { lat, long });\n }\n /* Geo API */\n /**\n * Returns all the information about a known place.\n * https://developer.twitter.com/en/docs/twitter-api/v1/geo/place-information/api-reference/get-geo-id-place_id\n */\n geoPlace(placeId) {\n return this.get('geo/id/:place_id.json', undefined, { params: { place_id: placeId } });\n }\n /**\n * Search for places that can be attached to a Tweet via POST statuses/update.\n * This request will return a list of all the valid places that can be used as the place_id when updating a status.\n * https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-search\n */\n geoSearch(options) {\n return this.get('geo/search.json', options);\n }\n /**\n * Given a latitude and a longitude, searches for up to 20 places that can be used as a place_id when updating a status.\n * This request is an informative call and will deliver generalized results about geography.\n * https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-reverse_geocode\n */\n geoReverseGeoCode(options) {\n return this.get('geo/reverse_geocode.json', options);\n }\n /* Developer utilities */\n /**\n * Returns the current rate limits for methods belonging to the specified resource families.\n * Each API resource belongs to a \"resource family\" which is indicated in its method documentation.\n * The method's resource family can be determined from the first component of the path after the resource version.\n * https://developer.twitter.com/en/docs/twitter-api/v1/developer-utilities/rate-limit-status/api-reference/get-application-rate_limit_status\n */\n rateLimitStatuses(...resources) {\n return this.get('application/rate_limit_status.json', { resources });\n }\n /**\n * Returns the list of languages supported by Twitter along with the language code supported by Twitter.\n * https://developer.twitter.com/en/docs/twitter-api/v1/developer-utilities/supported-languages/api-reference/get-help-languages\n */\n supportedLanguages() {\n return this.get('help/languages.json');\n }\n}\nexports.default = TwitterApiv1ReadOnly;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst globals_1 = require(\"../globals\");\nconst client_v1_read_1 = __importDefault(require(\"./client.v1.read\"));\nconst types_1 = require(\"../types\");\nconst fs = __importStar(require(\"fs\"));\nconst media_helpers_v1_1 = require(\"./media-helpers.v1\");\nconst helpers_1 = require(\"../helpers\");\nconst UPLOAD_ENDPOINT = 'media/upload.json';\n/**\n * Base Twitter v1 client with read/write rights.\n */\nclass TwitterApiv1ReadWrite extends client_v1_read_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V1_1_PREFIX;\n }\n /**\n * Get a client with only read rights.\n */\n get readOnly() {\n return this;\n }\n /* Tweet API */\n /**\n * Post a new tweet.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n tweet(status, payload = {}) {\n const queryParams = {\n status,\n tweet_mode: 'extended',\n ...payload,\n };\n return this.post('statuses/update.json', queryParams);\n }\n /**\n * Quote an existing tweet.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n async quote(status, quotingStatusId, payload = {}) {\n const url = 'https://twitter.com/i/statuses/' + quotingStatusId;\n return this.tweet(status, { ...payload, attachment_url: url });\n }\n /**\n * Post a series of tweets.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n async tweetThread(tweets) {\n const postedTweets = [];\n for (const tweet of tweets) {\n // Retrieve the last sent tweet\n const lastTweet = postedTweets.length ? postedTweets[postedTweets.length - 1] : null;\n // Build the tweet query params\n const queryParams = { ...(typeof tweet === 'string' ? ({ status: tweet }) : tweet) };\n // Reply to an existing tweet if needed\n const inReplyToId = lastTweet ? lastTweet.id_str : queryParams.in_reply_to_status_id;\n const status = queryParams.status;\n if (inReplyToId) {\n postedTweets.push(await this.reply(status, inReplyToId, queryParams));\n }\n else {\n postedTweets.push(await this.tweet(status, queryParams));\n }\n }\n return postedTweets;\n }\n /**\n * Reply to an existing tweet. Shortcut to `.tweet` with tweaked parameters.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update\n */\n reply(status, in_reply_to_status_id, payload = {}) {\n return this.tweet(status, {\n auto_populate_reply_metadata: true,\n in_reply_to_status_id,\n ...payload,\n });\n }\n /**\n * Delete an existing tweet belonging to you.\n * https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-destroy-id\n */\n deleteTweet(tweetId) {\n return this.post('statuses/destroy/:id.json', { tweet_mode: 'extended' }, { params: { id: tweetId } });\n }\n /* User API */\n /**\n * Report the specified user as a spam account to Twitter.\n * Additionally, optionally performs the equivalent of POST blocks/create on behalf of the authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-users-report_spam\n */\n reportUserAsSpam(options) {\n return this.post('users/report_spam.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Turn on/off Retweets and device notifications from the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update\n */\n updateFriendship(options) {\n return this.post('friendships/update.json', options);\n }\n /**\n * Follow the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create\n */\n createFriendship(options) {\n return this.post('friendships/create.json', options);\n }\n /**\n * Unfollow the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy\n */\n destroyFriendship(options) {\n return this.post('friendships/destroy.json', options);\n }\n /* Account API */\n /**\n * Update current account settings for authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-settings\n */\n updateAccountSettings(options) {\n return this.post('account/settings.json', options);\n }\n /**\n * Sets some values that users are able to set under the \"Account\" tab of their settings page.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile\n */\n updateAccountProfile(options) {\n return this.post('account/update_profile.json', options);\n }\n /**\n * Uploads a profile banner on behalf of the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_banner\n */\n async updateAccountProfileBanner(file, options = {}) {\n const queryParams = {\n banner: await (0, media_helpers_v1_1.readFileIntoBuffer)(file),\n ...options,\n };\n return this.post('account/update_profile_banner.json', queryParams, { forceBodyMode: 'form-data' });\n }\n /**\n * Updates the authenticating user's profile image.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_image\n */\n async updateAccountProfileImage(file, options = {}) {\n const queryParams = {\n tweet_mode: 'extended',\n image: await (0, media_helpers_v1_1.readFileIntoBuffer)(file),\n ...options,\n };\n return this.post('account/update_profile_image.json', queryParams, { forceBodyMode: 'form-data' });\n }\n /**\n * Removes the uploaded profile banner for the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner\n */\n removeAccountProfileBanner() {\n return this.post('account/remove_profile_banner.json');\n }\n /* Lists */\n /**\n * Creates a new list for the authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-create\n */\n createList(options) {\n return this.post('lists/create.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Updates the specified list. The authenticated user must own the list to be able to update it.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-update\n */\n updateList(options) {\n return this.post('lists/update.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Deletes the specified list. The authenticated user must own the list to be able to destroy it.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy\n */\n removeList(options) {\n return this.post('lists/destroy.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Adds multiple members to a list, by specifying a comma-separated list of member ids or screen names.\n * If you add a single `user_id` or `screen_name`, it will target `lists/members/create.json`, otherwise\n * it will target `lists/members/create_all.json`.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all\n */\n addListMembers(options) {\n const hasMultiple = (options.user_id && (0, helpers_1.hasMultipleItems)(options.user_id)) || (options.screen_name && (0, helpers_1.hasMultipleItems)(options.screen_name));\n const endpoint = hasMultiple ? 'lists/members/create_all.json' : 'lists/members/create.json';\n return this.post(endpoint, options);\n }\n /**\n * Removes multiple members to a list, by specifying a comma-separated list of member ids or screen names.\n * If you add a single `user_id` or `screen_name`, it will target `lists/members/destroy.json`, otherwise\n * it will target `lists/members/destroy_all.json`.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all\n */\n removeListMembers(options) {\n const hasMultiple = (options.user_id && (0, helpers_1.hasMultipleItems)(options.user_id)) || (options.screen_name && (0, helpers_1.hasMultipleItems)(options.screen_name));\n const endpoint = hasMultiple ? 'lists/members/destroy_all.json' : 'lists/members/destroy.json';\n return this.post(endpoint, options);\n }\n /**\n * Subscribes the authenticated user to the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-create\n */\n subscribeToList(options) {\n return this.post('lists/subscribers/create.json', { tweet_mode: 'extended', ...options });\n }\n /**\n * Unsubscribes the authenticated user of the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-destroy\n */\n unsubscribeOfList(options) {\n return this.post('lists/subscribers/destroy.json', { tweet_mode: 'extended', ...options });\n }\n /* Media upload API */\n /**\n * This endpoint can be used to provide additional information about the uploaded media_id.\n * This feature is currently only supported for images and GIFs.\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-metadata-create\n */\n createMediaMetadata(mediaId, metadata) {\n return this.post('media/metadata/create.json', { media_id: mediaId, ...metadata }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX, forceBodyMode: 'json' });\n }\n /**\n * Use this endpoint to associate uploaded subtitles to an uploaded video. You can associate subtitles to video before or after Tweeting.\n * **To obtain subtitle media ID, you must upload each subtitle file separately using `.uploadMedia()` method.**\n *\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-create\n */\n createMediaSubtitles(mediaId, subtitles) {\n return this.post('media/subtitles/create.json', { media_id: mediaId, media_category: 'TweetVideo', subtitle_info: { subtitles } }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX, forceBodyMode: 'json' });\n }\n /**\n * Use this endpoint to dissociate subtitles from a video and delete the subtitles. You can dissociate subtitles from a video before or after Tweeting.\n * https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-delete\n */\n deleteMediaSubtitles(mediaId, ...languages) {\n return this.post('media/subtitles/delete.json', {\n media_id: mediaId,\n media_category: 'TweetVideo',\n subtitle_info: { subtitles: languages.map(lang => ({ language_code: lang })) },\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX, forceBodyMode: 'json' });\n }\n /**\n * Upload a media (JPG/PNG/GIF/MP4/WEBP) or subtitle (SRT) to Twitter and return the media_id to use in tweet/DM send.\n *\n * @param file If `string`, filename is supposed.\n * A `Buffer` is a raw file.\n * `fs.promises.FileHandle` or `number` are file pointers.\n *\n * @param options.type File type (Enum 'jpg' | 'longmp4' | 'mp4' | 'png' | 'gif' | 'srt' | 'webp').\n * If filename is given, it could be guessed with file extension, otherwise this parameter is mandatory.\n * If type is not part of the enum, it will be used as mime type.\n *\n * Type `longmp4` is **required** is you try to upload a video higher than 140 seconds.\n *\n * @param options.chunkLength Maximum chunk length sent to Twitter. Default goes to 1 MB.\n *\n * @param options.additionalOwners Other user IDs allowed to use the returned media_id. Default goes to none.\n *\n * @param options.maxConcurrentUploads Maximum uploaded chunks in the same time. Default goes to 3.\n *\n * @param options.target Target type `tweet` or `dm`. Defaults to `tweet`.\n * You must specify it if you send a media to use in DMs.\n */\n async uploadMedia(file, options = {}) {\n var _a;\n const chunkLength = (_a = options.chunkLength) !== null && _a !== void 0 ? _a : (1024 * 1024);\n const { fileHandle, mediaCategory, fileSize, mimeType } = await this.getUploadMediaRequirements(file, options);\n // Get the file handle (if not buffer)\n try {\n // Finally! We can send INIT message.\n const mediaData = await this.post(UPLOAD_ENDPOINT, {\n command: 'INIT',\n total_bytes: fileSize,\n media_type: mimeType,\n media_category: mediaCategory,\n additional_owners: options.additionalOwners,\n shared: options.shared ? true : undefined,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n // Upload the media chunk by chunk\n await this.mediaChunkedUpload(fileHandle, chunkLength, mediaData.media_id_string, options.maxConcurrentUploads);\n // Finalize media\n const fullMediaData = await this.post(UPLOAD_ENDPOINT, {\n command: 'FINALIZE',\n media_id: mediaData.media_id_string,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n if (fullMediaData.processing_info && fullMediaData.processing_info.state !== 'succeeded') {\n // Must wait if video is still computed\n await this.awaitForMediaProcessingCompletion(fullMediaData);\n }\n // Video is ready, return media_id\n return fullMediaData.media_id_string;\n }\n finally {\n // Close file if any\n if (typeof file === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n fs.close(file, () => { });\n }\n else if (typeof fileHandle === 'object' && !(fileHandle instanceof Buffer)) {\n fileHandle.close();\n }\n }\n }\n async awaitForMediaProcessingCompletion(fullMediaData) {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n fullMediaData = await this.mediaInfo(fullMediaData.media_id_string);\n const { processing_info } = fullMediaData;\n if (!processing_info || processing_info.state === 'succeeded') {\n // Ok, completed!\n return;\n }\n if (processing_info.state === 'failed') {\n if (processing_info.error) {\n const { name, message } = processing_info.error;\n throw new Error(`Failed to process media: ${name} - ${message}.`);\n }\n throw new Error('Failed to process the media.');\n }\n if (processing_info.check_after_secs) {\n // Await for given seconds\n await (0, media_helpers_v1_1.sleepSecs)(processing_info.check_after_secs);\n }\n else {\n // No info; Await for 5 seconds\n await (0, media_helpers_v1_1.sleepSecs)(5);\n }\n }\n }\n async getUploadMediaRequirements(file, { mimeType, type, target, longVideo } = {}) {\n // Get the file handle (if not buffer)\n let fileHandle;\n try {\n fileHandle = await (0, media_helpers_v1_1.getFileHandle)(file);\n // Get the mimetype\n const realMimeType = (0, media_helpers_v1_1.getMimeType)(file, type, mimeType);\n // Get the media category\n let mediaCategory;\n // If explicit longmp4 OR explicit MIME type and not DM target\n if (realMimeType === types_1.EUploadMimeType.Mp4 && ((!mimeType && !type && target !== 'dm') || longVideo)) {\n mediaCategory = 'amplify_video';\n }\n else {\n mediaCategory = (0, media_helpers_v1_1.getMediaCategoryByMime)(realMimeType, target !== null && target !== void 0 ? target : 'tweet');\n }\n return {\n fileHandle,\n mediaCategory,\n fileSize: await (0, media_helpers_v1_1.getFileSizeFromFileHandle)(fileHandle),\n mimeType: realMimeType,\n };\n }\n catch (e) {\n // Close file if any\n if (typeof file === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n fs.close(file, () => { });\n }\n else if (typeof fileHandle === 'object' && !(fileHandle instanceof Buffer)) {\n fileHandle.close();\n }\n throw e;\n }\n }\n async mediaChunkedUpload(fileHandle, chunkLength, mediaId, maxConcurrentUploads = 3) {\n // Send chunk by chunk\n let chunkIndex = 0;\n if (maxConcurrentUploads < 1) {\n throw new RangeError('Bad maxConcurrentUploads parameter.');\n }\n // Creating a buffer for doing file stuff (if we don't have one)\n const buffer = fileHandle instanceof Buffer ? undefined : Buffer.alloc(chunkLength);\n // Sliced/filled buffer returned for each part\n let readBuffer;\n // Needed to know when we should stop reading the file\n let nread;\n // Needed to use the buffer object (file handles always \"remembers\" file position)\n let offset = 0;\n [readBuffer, nread] = await (0, media_helpers_v1_1.readNextPartOf)(fileHandle, chunkLength, offset, buffer);\n offset += nread;\n // Handle max concurrent uploads\n const currentUploads = new Set();\n // Read buffer until file is completely read\n while (nread) {\n const mediaBufferPart = readBuffer.slice(0, nread);\n // Sent part if part has something inside\n if (mediaBufferPart.length) {\n const request = this.post(UPLOAD_ENDPOINT, {\n command: 'APPEND',\n media_id: mediaId,\n segment_index: chunkIndex,\n media: mediaBufferPart,\n }, { prefix: globals_1.API_V1_1_UPLOAD_PREFIX });\n currentUploads.add(request);\n request.then(() => {\n currentUploads.delete(request);\n });\n chunkIndex++;\n }\n if (currentUploads.size >= maxConcurrentUploads) {\n // Await for first promise to be finished\n await Promise.race(currentUploads);\n }\n [readBuffer, nread] = await (0, media_helpers_v1_1.readNextPartOf)(fileHandle, chunkLength, offset, buffer);\n offset += nread;\n }\n await Promise.all([...currentUploads]);\n }\n}\nexports.default = TwitterApiv1ReadWrite;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readNextPartOf = exports.sleepSecs = exports.getMediaCategoryByMime = exports.getMimeType = exports.getFileSizeFromFileHandle = exports.getFileHandle = exports.readFileIntoBuffer = void 0;\nconst fs = __importStar(require(\"fs\"));\nconst helpers_1 = require(\"../helpers\");\nconst types_1 = require(\"../types\");\nasync function readFileIntoBuffer(file) {\n const handle = await getFileHandle(file);\n if (typeof handle === 'number') {\n return new Promise((resolve, reject) => {\n fs.readFile(handle, (err, data) => {\n if (err) {\n return reject(err);\n }\n resolve(data);\n });\n });\n }\n else if (handle instanceof Buffer) {\n return handle;\n }\n else {\n return handle.readFile();\n }\n}\nexports.readFileIntoBuffer = readFileIntoBuffer;\nfunction getFileHandle(file) {\n if (typeof file === 'string') {\n return fs.promises.open(file, 'r');\n }\n else if (typeof file === 'number') {\n return file;\n }\n else if (typeof file === 'object' && !(file instanceof Buffer)) {\n return file;\n }\n else if (!(file instanceof Buffer)) {\n throw new Error('Given file is not valid, please check its type.');\n }\n else {\n return file;\n }\n}\nexports.getFileHandle = getFileHandle;\nasync function getFileSizeFromFileHandle(fileHandle) {\n // Get the file size\n if (typeof fileHandle === 'number') {\n const stats = await new Promise((resolve, reject) => {\n fs.fstat(fileHandle, (err, stats) => {\n if (err)\n reject(err);\n resolve(stats);\n });\n });\n return stats.size;\n }\n else if (fileHandle instanceof Buffer) {\n return fileHandle.length;\n }\n else {\n return (await fileHandle.stat()).size;\n }\n}\nexports.getFileSizeFromFileHandle = getFileSizeFromFileHandle;\nfunction getMimeType(file, type, mimeType) {\n if (typeof mimeType === 'string') {\n return mimeType;\n }\n else if (typeof file === 'string' && !type) {\n return getMimeByName(file);\n }\n else if (typeof type === 'string') {\n return getMimeByType(type);\n }\n throw new Error('You must specify type if file is a file handle or Buffer.');\n}\nexports.getMimeType = getMimeType;\nfunction getMimeByName(name) {\n if (name.endsWith('.jpeg') || name.endsWith('.jpg'))\n return types_1.EUploadMimeType.Jpeg;\n if (name.endsWith('.png'))\n return types_1.EUploadMimeType.Png;\n if (name.endsWith('.webp'))\n return types_1.EUploadMimeType.Webp;\n if (name.endsWith('.gif'))\n return types_1.EUploadMimeType.Gif;\n if (name.endsWith('.mpeg4') || name.endsWith('.mp4'))\n return types_1.EUploadMimeType.Mp4;\n if (name.endsWith('.srt'))\n return types_1.EUploadMimeType.Srt;\n (0, helpers_1.safeDeprecationWarning)({\n instance: 'TwitterApiv1ReadWrite',\n method: 'uploadMedia',\n problem: `options.mimeType is missing and filename couldn't help to resolve MIME type, so it will fallback to image/jpeg`,\n resolution: `If you except to give filenames without extensions, please specify explicitlty the MIME type using options.mimeType`,\n });\n return types_1.EUploadMimeType.Jpeg;\n}\nfunction getMimeByType(type) {\n (0, helpers_1.safeDeprecationWarning)({\n instance: 'TwitterApiv1ReadWrite',\n method: 'uploadMedia',\n problem: `you're using options.type`,\n resolution: `Remove options.type argument and migrate to options.mimeType which takes the real MIME type. ` +\n `If you're using type=longmp4, add options.longVideo alongside of mimeType=EUploadMimeType.Mp4`,\n });\n if (type === 'gif')\n return types_1.EUploadMimeType.Gif;\n if (type === 'jpg')\n return types_1.EUploadMimeType.Jpeg;\n if (type === 'png')\n return types_1.EUploadMimeType.Png;\n if (type === 'webp')\n return types_1.EUploadMimeType.Webp;\n if (type === 'srt')\n return types_1.EUploadMimeType.Srt;\n if (type === 'mp4' || type === 'longmp4')\n return types_1.EUploadMimeType.Mp4;\n return type;\n}\nfunction getMediaCategoryByMime(name, target) {\n if (name === types_1.EUploadMimeType.Mp4)\n return target === 'tweet' ? 'TweetVideo' : 'DmVideo';\n if (name === types_1.EUploadMimeType.Gif)\n return target === 'tweet' ? 'TweetGif' : 'DmGif';\n if (name === types_1.EUploadMimeType.Srt)\n return 'Subtitles';\n else\n return target === 'tweet' ? 'TweetImage' : 'DmImage';\n}\nexports.getMediaCategoryByMime = getMediaCategoryByMime;\nfunction sleepSecs(seconds) {\n return new Promise(resolve => setTimeout(resolve, seconds * 1000));\n}\nexports.sleepSecs = sleepSecs;\nasync function readNextPartOf(file, chunkLength, bufferOffset = 0, buffer) {\n if (file instanceof Buffer) {\n const rt = file.slice(bufferOffset, bufferOffset + chunkLength);\n return [rt, rt.length];\n }\n if (!buffer) {\n throw new Error('Well, we will need a buffer to store file content.');\n }\n let bytesRead;\n if (typeof file === 'number') {\n bytesRead = await new Promise((resolve, reject) => {\n fs.read(file, buffer, 0, chunkLength, bufferOffset, (err, nread) => {\n if (err)\n reject(err);\n resolve(nread);\n });\n });\n }\n else {\n const res = await file.read(buffer, 0, chunkLength, bufferOffset);\n bytesRead = res.bytesRead;\n }\n return [buffer, bytesRead];\n}\nexports.readNextPartOf = readNextPartOf;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiv2Labs = void 0;\nconst globals_1 = require(\"../globals\");\nconst client_v2_labs_write_1 = __importDefault(require(\"./client.v2.labs.write\"));\n/**\n * Twitter v2 labs client with all rights (read/write/DMs)\n */\nclass TwitterApiv2Labs extends client_v2_labs_write_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_LABS_PREFIX;\n }\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n}\nexports.TwitterApiv2Labs = TwitterApiv2Labs;\nexports.default = TwitterApiv2Labs;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_subclient_1 = __importDefault(require(\"../client.subclient\"));\nconst globals_1 = require(\"../globals\");\n/**\n * Base Twitter v2 labs client with only read right.\n */\nclass TwitterApiv2LabsReadOnly extends client_subclient_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_LABS_PREFIX;\n }\n}\nexports.default = TwitterApiv2LabsReadOnly;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst globals_1 = require(\"../globals\");\nconst client_v2_labs_read_1 = __importDefault(require(\"./client.v2.labs.read\"));\n/**\n * Base Twitter v2 labs client with read/write rights.\n */\nclass TwitterApiv2LabsReadWrite extends client_v2_labs_read_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_LABS_PREFIX;\n }\n /**\n * Get a client with only read rights.\n */\n get readOnly() {\n return this;\n }\n}\nexports.default = TwitterApiv2LabsReadWrite;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterApiv2 = void 0;\nconst globals_1 = require(\"../globals\");\nconst client_v2_write_1 = __importDefault(require(\"./client.v2.write\"));\nconst client_v2_labs_1 = __importDefault(require(\"../v2-labs/client.v2.labs\"));\n/**\n * Twitter v2 client with all rights (read/write/DMs)\n */\nclass TwitterApiv2 extends client_v2_write_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_PREFIX;\n }\n /* Sub-clients */\n /**\n * Get a client with read/write rights.\n */\n get readWrite() {\n return this;\n }\n /**\n * Get a client for v2 labs endpoints.\n */\n get labs() {\n if (this._labs)\n return this._labs;\n return this._labs = new client_v2_labs_1.default(this);\n }\n}\nexports.TwitterApiv2 = TwitterApiv2;\nexports.default = TwitterApiv2;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_subclient_1 = __importDefault(require(\"../client.subclient\"));\nconst globals_1 = require(\"../globals\");\nconst paginators_1 = require(\"../paginators\");\nconst client_v2_labs_read_1 = __importDefault(require(\"../v2-labs/client.v2.labs.read\"));\nconst user_paginator_v2_1 = require(\"../paginators/user.paginator.v2\");\nconst helpers_1 = require(\"../helpers\");\n/**\n * Base Twitter v2 client with only read right.\n */\nclass TwitterApiv2ReadOnly extends client_subclient_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_PREFIX;\n }\n /* Sub-clients */\n /**\n * Get a client for v2 labs endpoints.\n */\n get labs() {\n if (this._labs)\n return this._labs;\n return this._labs = new client_v2_labs_read_1.default(this);\n }\n async search(queryOrOptions, options = {}) {\n const query = typeof queryOrOptions === 'string' ? queryOrOptions : undefined;\n const realOptions = typeof queryOrOptions === 'object' && queryOrOptions !== null ? queryOrOptions : options;\n const queryParams = { ...realOptions, query };\n const initialRq = await this.get('tweets/search/recent', queryParams, { fullResponse: true });\n return new paginators_1.TweetSearchRecentV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * The full-archive search endpoint returns the complete history of public Tweets matching a search query;\n * since the first Tweet was created March 26, 2006.\n *\n * This endpoint is only available to those users who have been approved for the Academic Research product track.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-all\n */\n async searchAll(query, options = {}) {\n const queryParams = { ...options, query };\n const initialRq = await this.get('tweets/search/all', queryParams, { fullResponse: true });\n return new paginators_1.TweetSearchAllV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams,\n });\n }\n /**\n * Returns a variety of information about a single Tweet specified by the requested ID.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets-id\n *\n * OAuth2 scope: `users.read`, `tweet.read`\n */\n singleTweet(tweetId, options = {}) {\n return this.get('tweets/:id', options, { params: { id: tweetId } });\n }\n /**\n * Returns a variety of information about tweets specified by list of IDs.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets\n *\n * OAuth2 scope: `users.read`, `tweet.read`\n */\n tweets(tweetIds, options = {}) {\n return this.get('tweets', { ids: tweetIds, ...options });\n }\n /**\n * The recent Tweet counts endpoint returns count of Tweets from the last seven days that match a search query.\n * OAuth2 Bearer auth only.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-recent\n */\n tweetCountRecent(query, options = {}) {\n return this.get('tweets/counts/recent', { query, ...options });\n }\n /**\n * This endpoint is only available to those users who have been approved for the Academic Research product track.\n * The full-archive search endpoint returns the complete history of public Tweets matching a search query;\n * since the first Tweet was created March 26, 2006.\n * OAuth2 Bearer auth only.\n * **This endpoint has pagination, yet it is not supported by bundled paginators. Use `next_token` to fetch next page.**\n * https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-all\n */\n tweetCountAll(query, options = {}) {\n return this.get('tweets/counts/all', { query, ...options });\n }\n async tweetRetweetedBy(tweetId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const initialRq = await this.get('tweets/:id/retweeted_by', parameters, {\n fullResponse: true,\n params: { id: tweetId },\n });\n if (!asPaginator) {\n return initialRq.data;\n }\n return new user_paginator_v2_1.TweetRetweetersUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: { id: tweetId },\n });\n }\n async tweetLikedBy(tweetId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const initialRq = await this.get('tweets/:id/liking_users', parameters, {\n fullResponse: true,\n params: { id: tweetId },\n });\n if (!asPaginator) {\n return initialRq.data;\n }\n return new user_paginator_v2_1.TweetLikingUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: { id: tweetId },\n });\n }\n /**\n * Allows you to retrieve a collection of the most recent Tweets and Retweets posted by you and users you follow, also known as home timeline.\n * This endpoint returns up to the last 3200 Tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-reverse-chronological\n *\n * OAuth 2 scopes: `tweet.read` `users.read`\n */\n async homeTimeline(options = {}) {\n const meUser = await this.getCurrentUserV2Object();\n const initialRq = await this.get('users/:id/timelines/reverse_chronological', options, {\n fullResponse: true,\n params: { id: meUser.data.id },\n });\n return new paginators_1.TweetHomeTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: meUser.data.id },\n });\n }\n /**\n * Returns Tweets composed by a single user, specified by the requested user ID.\n * By default, the most recent ten Tweets are returned per request.\n * Using pagination, the most recent 3,200 Tweets can be retrieved.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-tweets\n */\n async userTimeline(userId, options = {}) {\n const initialRq = await this.get('users/:id/tweets', options, {\n fullResponse: true,\n params: { id: userId },\n });\n return new paginators_1.TweetUserTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: userId },\n });\n }\n /**\n * Returns Tweets mentioning a single user specified by the requested user ID.\n * By default, the most recent ten Tweets are returned per request.\n * Using pagination, up to the most recent 800 Tweets can be retrieved.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-mentions\n */\n async userMentionTimeline(userId, options = {}) {\n const initialRq = await this.get('users/:id/mentions', options, {\n fullResponse: true,\n params: { id: userId },\n });\n return new paginators_1.TweetUserMentionTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: userId },\n });\n }\n /**\n * Returns Quote Tweets for a Tweet specified by the requested Tweet ID.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/quote-tweets/api-reference/get-tweets-id-quote_tweets\n *\n * OAuth2 scopes: `users.read` `tweet.read`\n */\n async quotes(tweetId, options = {}) {\n const initialRq = await this.get('tweets/:id/quote_tweets', options, {\n fullResponse: true,\n params: { id: tweetId },\n });\n return new paginators_1.QuotedTweetsTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: tweetId },\n });\n }\n /* Bookmarks */\n /**\n * Allows you to get information about a authenticated user’s 800 most recent bookmarked Tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/get-users-id-bookmarks\n *\n * OAuth2 scopes: `users.read` `tweet.read` `bookmark.read`\n */\n async bookmarks(options = {}) {\n const user = await this.getCurrentUserV2Object();\n const initialRq = await this.get('users/:id/bookmarks', options, {\n fullResponse: true,\n params: { id: user.data.id },\n });\n return new paginators_1.TweetBookmarksTimelineV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: options,\n sharedParams: { id: user.data.id },\n });\n }\n /* Users */\n /**\n * Returns information about an authorized user.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me\n *\n * OAuth2 scopes: `tweet.read` & `users.read`\n */\n me(options = {}) {\n return this.get('users/me', options);\n }\n /**\n * Returns a variety of information about a single user specified by the requested ID.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-id\n */\n user(userId, options = {}) {\n return this.get('users/:id', options, { params: { id: userId } });\n }\n /**\n * Returns a variety of information about one or more users specified by the requested IDs.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users\n */\n users(userIds, options = {}) {\n const ids = Array.isArray(userIds) ? userIds.join(',') : userIds;\n return this.get('users', { ...options, ids });\n }\n /**\n * Returns a variety of information about a single user specified by their username.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by-username-username\n */\n userByUsername(username, options = {}) {\n return this.get('users/by/username/:username', options, { params: { username } });\n }\n /**\n * Returns a variety of information about one or more users specified by their usernames.\n * https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by\n *\n * OAuth2 scope: `users.read`, `tweet.read`\n */\n usersByUsernames(usernames, options = {}) {\n usernames = Array.isArray(usernames) ? usernames.join(',') : usernames;\n return this.get('users/by', { ...options, usernames });\n }\n async followers(userId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const params = { id: userId };\n if (!asPaginator) {\n return this.get('users/:id/followers', parameters, { params });\n }\n const initialRq = await this.get('users/:id/followers', parameters, { fullResponse: true, params });\n return new user_paginator_v2_1.UserFollowersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: params,\n });\n }\n async following(userId, options = {}) {\n const { asPaginator, ...parameters } = options;\n const params = { id: userId };\n if (!asPaginator) {\n return this.get('users/:id/following', parameters, { params });\n }\n const initialRq = await this.get('users/:id/following', parameters, { fullResponse: true, params });\n return new user_paginator_v2_1.UserFollowingV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: parameters,\n sharedParams: params,\n });\n }\n /**\n * Allows you to get information about a user’s liked Tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/get-users-id-liked_tweets\n */\n async userLikedTweets(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/liked_tweets', options, { fullResponse: true, params });\n return new paginators_1.TweetV2UserLikedTweetsPaginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are blocked by the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/get-users-blocking\n */\n async userBlockingUsers(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/blocking', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserBlockingUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are muted by the authenticating user.\n * https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/get-users-muting\n */\n async userMutingUsers(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/muting', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserMutingUsersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /* Lists */\n /**\n * Returns the details of a specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-lists-id\n */\n list(id, options = {}) {\n return this.get('lists/:id', options, { params: { id } });\n }\n /**\n * Returns all Lists owned by the specified user.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-users-id-owned_lists\n */\n async listsOwned(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/owned_lists', options, { fullResponse: true, params });\n return new paginators_1.UserOwnedListsV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns all Lists a specified user is a member of.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-users-id-list_memberships\n */\n async listMemberships(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/list_memberships', options, { fullResponse: true, params });\n return new paginators_1.UserListMembershipsV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns all Lists a specified user follows.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-users-id-followed_lists\n */\n async listFollowed(userId, options = {}) {\n const params = { id: userId };\n const initialRq = await this.get('users/:id/followed_lists', options, { fullResponse: true, params });\n return new paginators_1.UserListFollowedV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of Tweets from the specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-tweets/api-reference/get-lists-id-tweets\n */\n async listTweets(listId, options = {}) {\n const params = { id: listId };\n const initialRq = await this.get('lists/:id/tweets', options, { fullResponse: true, params });\n return new paginators_1.TweetV2ListTweetsPaginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are members of the specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-lists-id-members\n */\n async listMembers(listId, options = {}) {\n const params = { id: listId };\n const initialRq = await this.get('lists/:id/members', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserListMembersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /**\n * Returns a list of users who are followers of the specified List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-lists-id-followers\n */\n async listFollowers(listId, options = {}) {\n const params = { id: listId };\n const initialRq = await this.get('lists/:id/followers', options, { fullResponse: true, params });\n return new user_paginator_v2_1.UserListFollowersV2Paginator({\n realData: initialRq.data,\n rateLimit: initialRq.rateLimit,\n instance: this,\n queryParams: { ...options },\n sharedParams: params,\n });\n }\n /* Spaces */\n /**\n * Get a single space by ID.\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n space(spaceId, options = {}) {\n return this.get('spaces/:id', options, { params: { id: spaceId } });\n }\n /**\n * Get spaces using their IDs.\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n spaces(spaceIds, options = {}) {\n return this.get('spaces', { ids: spaceIds, ...options });\n }\n /**\n * Get spaces using their creator user ID(s). (no pagination available)\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-by-creator-ids\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n spacesByCreators(creatorIds, options = {}) {\n return this.get('spaces/by/creator_ids', { user_ids: creatorIds, ...options });\n }\n /**\n * Search through spaces using multiple params. (no pagination available)\n * https://developer.twitter.com/en/docs/twitter-api/spaces/search/api-reference/get-spaces-search\n */\n searchSpaces(options) {\n return this.get('spaces/search', options);\n }\n /**\n * Returns a list of user who purchased a ticket to the requested Space.\n * You must authenticate the request using the Access Token of the creator of the requested Space.\n *\n * **OAuth 2.0 Access Token required**\n *\n * https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id-buyers\n *\n * OAuth2 scopes: `tweet.read`, `users.read`, `space.read`.\n */\n spaceBuyers(spaceId, options = {}) {\n return this.get('spaces/:id/buyers', options, { params: { id: spaceId } });\n }\n searchStream({ autoConnect, ...options } = {}) {\n return this.getStream('tweets/search/stream', options, { payloadIsError: helpers_1.isTweetStreamV2ErrorPayload, autoConnect });\n }\n /**\n * Return a list of rules currently active on the streaming endpoint, either as a list or individually.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream-rules\n */\n streamRules(options = {}) {\n return this.get('tweets/search/stream/rules', options);\n }\n updateStreamRules(options, query = {}) {\n return this.post('tweets/search/stream/rules', options, { query });\n }\n sampleStream({ autoConnect, ...options } = {}) {\n return this.getStream('tweets/sample/stream', options, { payloadIsError: helpers_1.isTweetStreamV2ErrorPayload, autoConnect });\n }\n /* Batch compliance */\n /**\n * Returns a list of recent compliance jobs.\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs\n */\n complianceJobs(options) {\n return this.get('compliance/jobs', options);\n }\n /**\n * Get a single compliance job with the specified ID.\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs-id\n */\n complianceJob(jobId) {\n return this.get('compliance/jobs/:id', undefined, { params: { id: jobId } });\n }\n /**\n * Creates a new compliance job for Tweet IDs or user IDs, send your file, await result and parse it into an array.\n * You can run one batch job at a time. Returns the created job, but **not the job result!**.\n *\n * You can obtain the result (**after job is completed**) with `.complianceJobResult`.\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/post-compliance-jobs\n */\n async sendComplianceJob(jobParams) {\n const job = await this.post('compliance/jobs', { type: jobParams.type, name: jobParams.name });\n // Send the IDs\n const rawIdsBody = jobParams.ids instanceof Buffer ? jobParams.ids : Buffer.from(jobParams.ids.join('\\n'));\n // Upload the IDs\n await this.put(job.data.upload_url, rawIdsBody, {\n forceBodyMode: 'raw',\n enableAuth: false,\n headers: { 'Content-Type': 'text/plain' },\n prefix: '',\n });\n return job;\n }\n /**\n * Get the result of a running or completed job, obtained through `.complianceJob`, `.complianceJobs` or `.sendComplianceJob`.\n * If job is still running (`in_progress`), it will await until job is completed. **This could be quite long!**\n * https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/post-compliance-jobs\n */\n async complianceJobResult(job) {\n let runningJob = job;\n while (runningJob.status !== 'complete') {\n if (runningJob.status === 'expired' || runningJob.status === 'failed') {\n throw new Error('Job failed to be completed.');\n }\n await new Promise(resolve => setTimeout(resolve, 3500));\n runningJob = (await this.complianceJob(job.id)).data;\n }\n // Download and parse result\n const result = await this.get(job.download_url, undefined, {\n enableAuth: false,\n prefix: '',\n });\n return result\n .trim()\n .split('\\n')\n .filter(line => line)\n .map(line => JSON.parse(line));\n }\n}\nexports.default = TwitterApiv2ReadOnly;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst globals_1 = require(\"../globals\");\nconst client_v2_read_1 = __importDefault(require(\"./client.v2.read\"));\nconst client_v2_labs_write_1 = __importDefault(require(\"../v2-labs/client.v2.labs.write\"));\n/**\n * Base Twitter v2 client with read/write rights.\n */\nclass TwitterApiv2ReadWrite extends client_v2_read_1.default {\n constructor() {\n super(...arguments);\n this._prefix = globals_1.API_V2_PREFIX;\n }\n /* Sub-clients */\n /**\n * Get a client with only read rights.\n */\n get readOnly() {\n return this;\n }\n /**\n * Get a client for v2 labs endpoints.\n */\n get labs() {\n if (this._labs)\n return this._labs;\n return this._labs = new client_v2_labs_write_1.default(this);\n }\n /* Tweets */\n /**\n * Hides or unhides a reply to a Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/hide-replies/api-reference/put-tweets-id-hidden\n */\n hideReply(tweetId, makeHidden) {\n return this.put('tweets/:id/hidden', { hidden: makeHidden }, { params: { id: tweetId } });\n }\n /**\n * Causes the user ID identified in the path parameter to Like the target Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/post-users-user_id-likes\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n like(loggedUserId, targetTweetId) {\n return this.post('users/:id/likes', { tweet_id: targetTweetId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user or authenticated user ID to unlike a Tweet.\n * The request succeeds with no action when the user sends a request to a user they're not liking the Tweet or have already unliked the Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/delete-users-id-likes-tweet_id\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unlike(loggedUserId, targetTweetId) {\n return this.delete('users/:id/likes/:tweet_id', undefined, {\n params: { id: loggedUserId, tweet_id: targetTweetId },\n });\n }\n /**\n * Causes the user ID identified in the path parameter to Retweet the target Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/post-users-id-retweets\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n retweet(loggedUserId, targetTweetId) {\n return this.post('users/:id/retweets', { tweet_id: targetTweetId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user or authenticated user ID to remove the Retweet of a Tweet.\n * The request succeeds with no action when the user sends a request to a user they're not Retweeting the Tweet or have already removed the Retweet of.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/delete-users-id-retweets-tweet_id\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unretweet(loggedUserId, targetTweetId) {\n return this.delete('users/:id/retweets/:tweet_id', undefined, {\n params: { id: loggedUserId, tweet_id: targetTweetId },\n });\n }\n tweet(status, payload = {}) {\n if (typeof status === 'object') {\n payload = status;\n }\n else {\n payload = { text: status, ...payload };\n }\n return this.post('tweets', payload);\n }\n /**\n * Reply to a Tweet on behalf of an authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets\n */\n reply(status, toTweetId, payload = {}) {\n var _a;\n const reply = { in_reply_to_tweet_id: toTweetId, ...(_a = payload.reply) !== null && _a !== void 0 ? _a : {} };\n return this.post('tweets', { text: status, ...payload, reply });\n }\n /**\n * Quote an existing Tweet on behalf of an authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets\n */\n quote(status, quotedTweetId, payload = {}) {\n return this.tweet(status, { ...payload, quote_tweet_id: quotedTweetId });\n }\n /**\n * Post a series of tweets.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets\n */\n async tweetThread(tweets) {\n var _a, _b;\n const postedTweets = [];\n for (const tweet of tweets) {\n // Retrieve the last sent tweet\n const lastTweet = postedTweets.length ? postedTweets[postedTweets.length - 1] : null;\n // Build the tweet query params\n const queryParams = { ...(typeof tweet === 'string' ? ({ text: tweet }) : tweet) };\n // Reply to an existing tweet if needed\n const inReplyToId = lastTweet ? lastTweet.data.id : (_a = queryParams.reply) === null || _a === void 0 ? void 0 : _a.in_reply_to_tweet_id;\n const status = (_b = queryParams.text) !== null && _b !== void 0 ? _b : '';\n if (inReplyToId) {\n postedTweets.push(await this.reply(status, inReplyToId, queryParams));\n }\n else {\n postedTweets.push(await this.tweet(status, queryParams));\n }\n }\n return postedTweets;\n }\n /**\n * Allows a user or authenticated user ID to delete a Tweet\n * https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/delete-tweets-id\n */\n deleteTweet(tweetId) {\n return this.delete('tweets/:id', undefined, {\n params: {\n id: tweetId,\n },\n });\n }\n /* Bookmarks */\n /**\n * Causes the user ID of an authenticated user identified in the path parameter to Bookmark the target Tweet provided in the request body.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/post-users-id-bookmarks\n *\n * OAuth2 scopes: `users.read` `tweet.read` `bookmark.write`\n */\n async bookmark(tweetId) {\n const user = await this.getCurrentUserV2Object();\n return this.post('users/:id/bookmarks', { tweet_id: tweetId }, { params: { id: user.data.id } });\n }\n /**\n * Allows a user or authenticated user ID to remove a Bookmark of a Tweet.\n * https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/delete-users-id-bookmarks-tweet_id\n *\n * OAuth2 scopes: `users.read` `tweet.read` `bookmark.write`\n */\n async deleteBookmark(tweetId) {\n const user = await this.getCurrentUserV2Object();\n return this.delete('users/:id/bookmarks/:tweet_id', undefined, { params: { id: user.data.id, tweet_id: tweetId } });\n }\n /* Users */\n /**\n * Allows a user ID to follow another user.\n * If the target user does not have public Tweets, this endpoint will send a follow request.\n * https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/post-users-source_user_id-following\n *\n * OAuth2 scope: `follows.write`\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n follow(loggedUserId, targetUserId) {\n return this.post('users/:id/following', { target_user_id: targetUserId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user ID to unfollow another user.\n * https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/delete-users-source_id-following\n *\n * OAuth2 scope: `follows.write`\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unfollow(loggedUserId, targetUserId) {\n return this.delete('users/:source_user_id/following/:target_user_id', undefined, {\n params: { source_user_id: loggedUserId, target_user_id: targetUserId },\n });\n }\n /**\n * Causes the user (in the path) to block the target user.\n * The user (in the path) must match the user context authorizing the request.\n * https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/post-users-user_id-blocking\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n block(loggedUserId, targetUserId) {\n return this.post('users/:id/blocking', { target_user_id: targetUserId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows a user or authenticated user ID to unblock another user.\n * https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/delete-users-user_id-blocking\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unblock(loggedUserId, targetUserId) {\n return this.delete('users/:source_user_id/blocking/:target_user_id', undefined, {\n params: { source_user_id: loggedUserId, target_user_id: targetUserId },\n });\n }\n /**\n * Allows an authenticated user ID to mute the target user.\n * https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/post-users-user_id-muting\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n mute(loggedUserId, targetUserId) {\n return this.post('users/:id/muting', { target_user_id: targetUserId }, { params: { id: loggedUserId } });\n }\n /**\n * Allows an authenticated user ID to unmute the target user.\n * The request succeeds with no action when the user sends a request to a user they're not muting or have already unmuted.\n * https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/delete-users-user_id-muting\n *\n * **Note**: You must specify the currently logged user ID ; you can obtain it through v1.1 API.\n */\n unmute(loggedUserId, targetUserId) {\n return this.delete('users/:source_user_id/muting/:target_user_id', undefined, {\n params: { source_user_id: loggedUserId, target_user_id: targetUserId },\n });\n }\n /* Lists */\n /**\n * Creates a new list for the authenticated user.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-lists\n */\n createList(options) {\n return this.post('lists', options);\n }\n /**\n * Updates the specified list. The authenticated user must own the list to be able to update it.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/put-lists-id\n */\n updateList(listId, options = {}) {\n return this.put('lists/:id', options, { params: { id: listId } });\n }\n /**\n * Deletes the specified list. The authenticated user must own the list to be able to destroy it.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-lists-id\n */\n removeList(listId) {\n return this.delete('lists/:id', undefined, { params: { id: listId } });\n }\n /**\n * Adds a member to a list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-lists-id-members\n */\n addListMember(listId, userId) {\n return this.post('lists/:id/members', { user_id: userId }, { params: { id: listId } });\n }\n /**\n * Remember a member to a list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-lists-id-members-user_id\n */\n removeListMember(listId, userId) {\n return this.delete('lists/:id/members/:user_id', undefined, { params: { id: listId, user_id: userId } });\n }\n /**\n * Subscribes the authenticated user to the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-users-id-followed-lists\n */\n subscribeToList(loggedUserId, listId) {\n return this.post('users/:id/followed_lists', { list_id: listId }, { params: { id: loggedUserId } });\n }\n /**\n * Unsubscribes the authenticated user to the specified list.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-users-id-followed-lists-list_id\n */\n unsubscribeOfList(loggedUserId, listId) {\n return this.delete('users/:id/followed_lists/:list_id', undefined, { params: { id: loggedUserId, list_id: listId } });\n }\n /**\n * Enables the authenticated user to pin a List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-users-id-pinned-lists\n */\n pinList(loggedUserId, listId) {\n return this.post('users/:id/pinned_lists', { list_id: listId }, { params: { id: loggedUserId } });\n }\n /**\n * Enables the authenticated user to unpin a List.\n * https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-users-id-pinned-lists-list_id\n */\n unpinList(loggedUserId, listId) {\n return this.delete('users/:id/pinned_lists/:list_id', undefined, { params: { id: loggedUserId, list_id: listId } });\n }\n}\nexports.default = TwitterApiv2ReadWrite;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TwitterV2IncludesHelper = void 0;\n/**\n * Provide helpers for `.includes` of a v2 API result.\n * Needed expansions for a method to work are specified (*`like this`*).\n */\nclass TwitterV2IncludesHelper {\n constructor(result) {\n this.result = result;\n }\n /* Tweets */\n get tweets() {\n return TwitterV2IncludesHelper.tweets(this.result);\n }\n static tweets(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.tweets) !== null && _b !== void 0 ? _b : [];\n }\n tweetById(id) {\n return TwitterV2IncludesHelper.tweetById(this.result, id);\n }\n static tweetById(result, id) {\n return this.tweets(result).find(tweet => tweet.id === id);\n }\n /** Retweet associated with the given tweet (*`referenced_tweets.id`*) */\n retweet(tweet) {\n return TwitterV2IncludesHelper.retweet(this.result, tweet);\n }\n /** Retweet associated with the given tweet (*`referenced_tweets.id`*) */\n static retweet(result, tweet) {\n var _a;\n const retweetIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])\n .filter(ref => ref.type === 'retweeted')\n .map(ref => ref.id);\n return this.tweets(result).find(t => retweetIds.includes(t.id));\n }\n /** Quoted tweet associated with the given tweet (*`referenced_tweets.id`*) */\n quote(tweet) {\n return TwitterV2IncludesHelper.quote(this.result, tweet);\n }\n /** Quoted tweet associated with the given tweet (*`referenced_tweets.id`*) */\n static quote(result, tweet) {\n var _a;\n const quoteIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])\n .filter(ref => ref.type === 'quoted')\n .map(ref => ref.id);\n return this.tweets(result).find(t => quoteIds.includes(t.id));\n }\n /** Tweet whose has been answered by the given tweet (*`referenced_tweets.id`*) */\n repliedTo(tweet) {\n return TwitterV2IncludesHelper.repliedTo(this.result, tweet);\n }\n /** Tweet whose has been answered by the given tweet (*`referenced_tweets.id`*) */\n static repliedTo(result, tweet) {\n var _a;\n const repliesIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])\n .filter(ref => ref.type === 'replied_to')\n .map(ref => ref.id);\n return this.tweets(result).find(t => repliesIds.includes(t.id));\n }\n /** Tweet author user object of the given tweet (*`author_id`* or *`referenced_tweets.id.author_id`*) */\n author(tweet) {\n return TwitterV2IncludesHelper.author(this.result, tweet);\n }\n /** Tweet author user object of the given tweet (*`author_id`* or *`referenced_tweets.id.author_id`*) */\n static author(result, tweet) {\n const authorId = tweet.author_id;\n return authorId ? this.users(result).find(u => u.id === authorId) : undefined;\n }\n /** Tweet author user object of the tweet answered by the given tweet (*`in_reply_to_user_id`*) */\n repliedToAuthor(tweet) {\n return TwitterV2IncludesHelper.repliedToAuthor(this.result, tweet);\n }\n /** Tweet author user object of the tweet answered by the given tweet (*`in_reply_to_user_id`*) */\n static repliedToAuthor(result, tweet) {\n const inReplyUserId = tweet.in_reply_to_user_id;\n return inReplyUserId ? this.users(result).find(u => u.id === inReplyUserId) : undefined;\n }\n /* Users */\n get users() {\n return TwitterV2IncludesHelper.users(this.result);\n }\n static users(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.users) !== null && _b !== void 0 ? _b : [];\n }\n userById(id) {\n return TwitterV2IncludesHelper.userById(this.result, id);\n }\n static userById(result, id) {\n return this.users(result).find(u => u.id === id);\n }\n /** Pinned tweet of the given user (*`pinned_tweet_id`*) */\n pinnedTweet(user) {\n return TwitterV2IncludesHelper.pinnedTweet(this.result, user);\n }\n /** Pinned tweet of the given user (*`pinned_tweet_id`*) */\n static pinnedTweet(result, user) {\n return user.pinned_tweet_id ? this.tweets(result).find(t => t.id === user.pinned_tweet_id) : undefined;\n }\n /* Medias */\n get media() {\n return TwitterV2IncludesHelper.media(this.result);\n }\n static media(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.media) !== null && _b !== void 0 ? _b : [];\n }\n /** Medias associated with the given tweet (*`attachments.media_keys`*) */\n medias(tweet) {\n return TwitterV2IncludesHelper.medias(this.result, tweet);\n }\n /** Medias associated with the given tweet (*`attachments.media_keys`*) */\n static medias(result, tweet) {\n var _a, _b;\n const keys = (_b = (_a = tweet.attachments) === null || _a === void 0 ? void 0 : _a.media_keys) !== null && _b !== void 0 ? _b : [];\n return this.media(result).filter(m => keys.includes(m.media_key));\n }\n /* Polls */\n get polls() {\n return TwitterV2IncludesHelper.polls(this.result);\n }\n static polls(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.polls) !== null && _b !== void 0 ? _b : [];\n }\n /** Poll associated with the given tweet (*`attachments.poll_ids`*) */\n poll(tweet) {\n return TwitterV2IncludesHelper.poll(this.result, tweet);\n }\n /** Poll associated with the given tweet (*`attachments.poll_ids`*) */\n static poll(result, tweet) {\n var _a, _b;\n const pollIds = (_b = (_a = tweet.attachments) === null || _a === void 0 ? void 0 : _a.poll_ids) !== null && _b !== void 0 ? _b : [];\n if (pollIds.length) {\n const pollId = pollIds[0];\n return this.polls(result).find(p => p.id === pollId);\n }\n return undefined;\n }\n /* Places */\n get places() {\n return TwitterV2IncludesHelper.places(this.result);\n }\n static places(result) {\n var _a, _b;\n return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.places) !== null && _b !== void 0 ? _b : [];\n }\n /** Place associated with the given tweet (*`geo.place_id`*) */\n place(tweet) {\n return TwitterV2IncludesHelper.place(this.result, tweet);\n }\n /** Place associated with the given tweet (*`geo.place_id`*) */\n static place(result, tweet) {\n var _a;\n const placeId = (_a = tweet.geo) === null || _a === void 0 ? void 0 : _a.place_id;\n return placeId ? this.places(result).find(p => p.id === placeId) : undefined;\n }\n /* Lists */\n /** List owner of the given list (*`owner_id`*) */\n listOwner(list) {\n return TwitterV2IncludesHelper.listOwner(this.result, list);\n }\n /** List owner of the given list (*`owner_id`*) */\n static listOwner(result, list) {\n const creatorId = list.owner_id;\n return creatorId ? this.users(result).find(p => p.id === creatorId) : undefined;\n }\n /* Spaces */\n /** Creator of the given space (*`creator_id`*) */\n spaceCreator(space) {\n return TwitterV2IncludesHelper.spaceCreator(this.result, space);\n }\n /** Creator of the given space (*`creator_id`*) */\n static spaceCreator(result, space) {\n const creatorId = space.creator_id;\n return creatorId ? this.users(result).find(p => p.id === creatorId) : undefined;\n }\n /** Current hosts of the given space (*`host_ids`*) */\n spaceHosts(space) {\n return TwitterV2IncludesHelper.spaceHosts(this.result, space);\n }\n /** Current hosts of the given space (*`host_ids`*) */\n static spaceHosts(result, space) {\n var _a;\n const hostIds = (_a = space.host_ids) !== null && _a !== void 0 ? _a : [];\n return this.users(result).filter(u => hostIds.includes(u.id));\n }\n /** Current speakers of the given space (*`speaker_ids`*) */\n spaceSpeakers(space) {\n return TwitterV2IncludesHelper.spaceSpeakers(this.result, space);\n }\n /** Current speakers of the given space (*`speaker_ids`*) */\n static spaceSpeakers(result, space) {\n var _a;\n const speakerIds = (_a = space.speaker_ids) !== null && _a !== void 0 ? _a : [];\n return this.users(result).filter(u => speakerIds.includes(u.id));\n }\n /** Current invited users of the given space (*`invited_user_ids`*) */\n spaceInvitedUsers(space) {\n return TwitterV2IncludesHelper.spaceInvitedUsers(this.result, space);\n }\n /** Current invited users of the given space (*`invited_user_ids`*) */\n static spaceInvitedUsers(result, space) {\n var _a;\n const invitedUserIds = (_a = space.invited_user_ids) !== null && _a !== void 0 ? _a : [];\n return this.users(result).filter(u => invitedUserIds.includes(u.id));\n }\n}\nexports.TwitterV2IncludesHelper = TwitterV2IncludesHelper;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('md5').update(bytes).digest();\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\n\nfunction rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n _crypto.default.randomFillSync(rnds8Pool);\n\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('sha1').update(bytes).digest();\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;","module.exports = require(\"assert\");","module.exports = require(\"crypto\");","module.exports = require(\"events\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"net\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"tls\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\nif (typeof __webpack_require__ !== 'undefined') __webpack_require__.ab = __dirname + \"/\";","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(3109);\n",""],"names":[],"sourceRoot":""} \ No newline at end of file