diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..da2feef
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,18 @@
+# Test the CLI
+name: Test CLI
+
+on:
+ pull_request:
+
+jobs:
+ test-cli:
+ name: Test CLI
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Test CLI
+ run: |
+ npm i
+ npm run test
diff --git a/action.yml b/action.yml
new file mode 100644
index 0000000..e95a284
--- /dev/null
+++ b/action.yml
@@ -0,0 +1,21 @@
+name: API Specs Combine Action
+description: A GitHub Action that combines the Bandwidth Product API specs into one file for SDK generation.
+inputs:
+ username:
+ required: false
+ description: Github Username
+ default: DX-Bandwidth
+ token:
+ required: true
+ description: Github Token
+
+runs:
+ using: "composite"
+ steps:
+ - name: Clone and Combine Product Specs
+ run: |
+ git clone https://${{ inputs.username }}:${{ inputs.token }}@github.com/Bandwidth/api-specs
+ cd ${{ github.action_path }}
+ npm i
+ node index.js --config oas-merge-config.yml --path ${{ github.workspace }}
+ shell: bash
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..8c2b61a
--- /dev/null
+++ b/index.js
@@ -0,0 +1,75 @@
+const fs = require('fs');
+const path = require('path');
+const yaml = require('js-yaml');
+const { merge, isErrorResult } = require('openapi-merge');
+const argv = require('minimist')(process.argv.slice(2));
+
+function buildSpecArray(config, basePath) {
+ const mergeArray = [];
+ for (i in config.inputs) {
+ let apiSpec = yaml.load(
+ fs.readFileSync(`${basePath}${configFile.inputs[i].inputFile}`, 'utf8')
+ );
+ let servers = apiSpec.servers;
+
+ for (specPath in apiSpec.paths) {
+ apiSpec.paths[specPath].servers = servers;
+ }
+
+ delete apiSpec.info;
+ delete apiSpec.servers;
+
+ mergeObj = {
+ oas: apiSpec,
+ };
+
+ mergeArray.push(mergeObj);
+ }
+ return mergeArray;
+}
+
+function mergeSpecs(mergeArray) {
+ const mergeResult = merge(mergeArray);
+ if (isErrorResult(mergeResult)) {
+ console.error(`${mergeResult.message} (${mergeResult.type})`);
+ } else {
+ console.log(`Merge successful!`);
+ // console.log(JSON.stringify(mergeResult.output, null, 2));
+ return mergeResult;
+ }
+}
+
+function main(config, basePath) {
+ const mergeArray = buildSpecArray(config, basePath);
+ const apiSpec = mergeSpecs(mergeArray).output;
+
+ let info = {
+ title: 'Bandwidth',
+ description: `Bandwidth's Communication APIs`,
+ contact: {
+ name: 'Bandwidth',
+ url: 'https://dev.bandwidth.com',
+ email: 'letstalk@bandwidth.com',
+ },
+ version: '1.0.0',
+ };
+ apiSpec.info = info;
+
+ /**
+ * Only save the file if the -t/--test flag is not present
+ */
+ fileExtension = path.extname(configFile.output);
+ if( argv.t != true && argv.test != true ){
+ if(fileExtension == '.json'){
+ fs.writeFileSync(`${basePath}${configFile.output}`, JSON.stringify(apiSpec, null, 4), 'utf8');
+ } else if(fileExtension == '.yaml' || fileExtension == '.yml'){
+ fs.writeFileSync(`${basePath}${configFile.output}`, yaml.dump(apiSpec));
+ } else {
+ throw new Error('Unsupported output file type. Only `.json`, `.yaml`, and `.yml` are supported.');
+ }
+ }
+}
+
+const configFile = yaml.load(fs.readFileSync(argv.c || argv.config, 'utf8'));
+const basePath = argv.path;
+main(configFile, basePath);
diff --git a/oas-merge-config.yml b/oas-merge-config.yml
new file mode 100644
index 0000000..e2ac928
--- /dev/null
+++ b/oas-merge-config.yml
@@ -0,0 +1,7 @@
+---
+inputs:
+- inputFile: "/api-specs/external/messaging.yml"
+- inputFile: "/api-specs/external/voice.yml"
+- inputFile: "/api-specs/external/multi-factor-auth.yml"
+- inputFile: "/api-specs/external/phone-number-lookup.yml"
+output: "/api-specs/bandwidth.yml"
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..a52607b
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6142 @@
+{
+ "name": "combine-specs",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "combine-specs",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "js-yaml": "^4.1.0",
+ "minimist": "^1.2.6",
+ "openapi-merge": "^1.3.2"
+ },
+ "devDependencies": {
+ "jest": "^28.1.3"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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==",
+ "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==",
+ "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/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"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.10",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator/node_modules/@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,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@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,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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==",
+ "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-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"
+ },
+ "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==",
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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==",
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@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,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.18.11",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz",
+ "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
+ "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
+ "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.10",
+ "@babel/types": "^7.18.10"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.18.11",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz",
+ "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.18.10",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz",
+ "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz",
+ "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz",
+ "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "^28.1.3",
+ "@jest/types": "^28.1.3",
+ "@types/node": "*",
+ "jest-mock": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "expect": "^28.1.3",
+ "jest-snapshot": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "jest-get-type": "^28.0.2"
+ },
+ "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",
+ "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz",
+ "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^28.1.3",
+ "@jest/expect": "^28.1.3",
+ "@jest/types": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@sinclair/typebox": "^0.24.1"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.13",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@jest/console": "^28.1.3",
+ "@jest/types": "^28.1.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@jest/test-result": "^28.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^28.1.3",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@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,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@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,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@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
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.24.28",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz",
+ "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==",
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@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,
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
+ "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz",
+ "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.3.0"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
+ "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "18.7.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.7.tgz",
+ "integrity": "sha512-sTKYCtQmaUpsAT+AbUTKg0Ya0dYyh20t3TBQebWrGXQHFmkrEyeedok2/IpTthlJopPSbUoc1hAKoK6UeFRCZw==",
+ "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==",
+ "dev": true
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "dev": true
+ },
+ "node_modules/@types/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,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@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
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/atlassian-openapi": {
+ "version": "1.0.17",
+ "resolved": "https://registry.npmjs.org/atlassian-openapi/-/atlassian-openapi-1.0.17.tgz",
+ "integrity": "sha512-8aW0Xgl9mVdL9dCABSZAvCayMPyh6uVu86UzOat8Kc1qDMUtXn2OxcwDsJfm/qCtBSeZ+GE/PkFxx3ZRIp3hFg==",
+ "dependencies": {
+ "jsonpointer": "^5.0.0",
+ "urijs": "^1.19.10"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "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,
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "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,
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^28.1.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+ "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001370",
+ "electron-to-chromium": "^1.4.202",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.5"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001378",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz",
+ "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
+ "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
+ "dev": true
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "dev": true
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
+ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "dev": true
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff-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,
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.225",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz",
+ "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==",
+ "dev": true
+ },
+ "node_modules/emittery": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz",
+ "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/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,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
+ "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
+ "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "dev": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "5.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,
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz",
+ "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^28.1.3",
+ "@jest/types": "^28.1.3",
+ "import-local": "^3.0.2",
+ "jest-cli": "^28.1.3"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz",
+ "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^28.1.1",
+ "jest-get-type": "^28.0.2",
+ "pretty-format": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "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-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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "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-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,
+ "dependencies": {
+ "@jest/types": "^28.1.3",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "jest-get-type": "^28.0.2",
+ "pretty-format": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^28.1.3",
+ "jest-get-type": "^28.0.2",
+ "pretty-format": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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",
+ "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@jest/types": "^28.1.3",
+ "@types/node": "*"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
+ "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "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,
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "jest-regex-util": "^28.0.2",
+ "jest-snapshot": "^28.1.3"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/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==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "28.1.3",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz",
+ "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==",
+ "dev": true,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-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
+ },
+ "node_modules/json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonpointer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
+ "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/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_modules/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_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==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/openapi-merge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/openapi-merge/-/openapi-merge-1.3.2.tgz",
+ "integrity": "sha512-qRWBwPMiKIUrAcKW6lstMPKpFEWy32dBbP1UjHH9jlWgw++2BCqOVbsjO5Wa4H1Ll3c4cn+lyi4TinUy8iswzw==",
+ "dependencies": {
+ "atlassian-openapi": "^1.0.8",
+ "lodash": "^4.17.15",
+ "ts-is-present": "^1.1.1"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/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/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
+ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/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/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-hyperlinks": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
+ "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/terminal-link": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
+ "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.2.1",
+ "supports-hyperlinks": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-is-present": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ts-is-present/-/ts-is-present-1.2.2.tgz",
+ "integrity": "sha512-cA5MPLWGWYXvnlJb4TamUUx858HVHBsxxdy8l7jxODOLDyGYnQOllob2A2jyDghGa5iJHs2gzFNHvwGJ0ZfR8g=="
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/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,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/urijs": {
+ "version": "1.19.11",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
+ "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/write-file-atomic": {
+ "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.0.0"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@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"
+ }
+ },
+ "@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"
+ }
+ },
+ "@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/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"
+ }
+ },
+ "@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
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@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"
+ }
+ },
+ "@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"
+ }
+ },
+ "@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"
+ }
+ },
+ "@sinclair/typebox": {
+ "version": "0.24.28",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz",
+ "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==",
+ "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/node": {
+ "version": "18.7.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.7.tgz",
+ "integrity": "sha512-sTKYCtQmaUpsAT+AbUTKg0Ya0dYyh20t3TBQebWrGXQHFmkrEyeedok2/IpTthlJopPSbUoc1hAKoK6UeFRCZw==",
+ "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
+ },
+ "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"
+ }
+ },
+ "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=="
+ },
+ "atlassian-openapi": {
+ "version": "1.0.17",
+ "resolved": "https://registry.npmjs.org/atlassian-openapi/-/atlassian-openapi-1.0.17.tgz",
+ "integrity": "sha512-8aW0Xgl9mVdL9dCABSZAvCayMPyh6uVu86UzOat8Kc1qDMUtXn2OxcwDsJfm/qCtBSeZ+GE/PkFxx3ZRIp3hFg==",
+ "requires": {
+ "jsonpointer": "^5.0.0",
+ "urijs": "^1.19.10"
+ }
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "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.30001378",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz",
+ "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==",
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "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
+ },
+ "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": "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
+ },
+ "electron-to-chromium": {
+ "version": "1.4.225",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz",
+ "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==",
+ "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": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "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"
+ }
+ },
+ "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": "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
+ },
+ "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
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "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"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "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
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "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
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "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
+ },
+ "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
+ },
+ "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-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-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-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-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
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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-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-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-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": "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-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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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": {
+ "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"
+ }
+ }
+ }
+ },
+ "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": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "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==",
+ "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
+ },
+ "json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
+ "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="
+ },
+ "kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true
+ },
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true
+ },
+ "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": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "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=="
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "openapi-merge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/openapi-merge/-/openapi-merge-1.3.2.tgz",
+ "integrity": "sha512-qRWBwPMiKIUrAcKW6lstMPKpFEWy32dBbP1UjHH9jlWgw++2BCqOVbsjO5Wa4H1Ll3c4cn+lyi4TinUy8iswzw==",
+ "requires": {
+ "atlassian-openapi": "^1.0.8",
+ "lodash": "^4.17.15",
+ "ts-is-present": "^1.1.1"
+ }
+ },
+ "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": "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"
+ },
+ "dependencies": {
+ "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-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
+ },
+ "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-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
+ },
+ "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"
+ }
+ },
+ "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"
+ },
+ "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
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "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"
+ }
+ },
+ "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.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
+ },
+ "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"
+ }
+ },
+ "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": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "requires": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-hyperlinks": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
+ "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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-is-present": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ts-is-present/-/ts-is-present-1.2.2.tgz",
+ "integrity": "sha512-cA5MPLWGWYXvnlJb4TamUUx858HVHBsxxdy8l7jxODOLDyGYnQOllob2A2jyDghGa5iJHs2gzFNHvwGJ0ZfR8g=="
+ },
+ "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.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
+ },
+ "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"
+ }
+ },
+ "urijs": {
+ "version": "1.19.11",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
+ "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
+ },
+ "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"
+ }
+ },
+ "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.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,
+ "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
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..1ae0024
--- /dev/null
+++ b/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "combine-specs",
+ "version": "1.0.0",
+ "description": "Combine different OAS files",
+ "main": "index.js",
+ "scripts": {
+ "test": "jest"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "js-yaml": "^4.1.0",
+ "minimist": "^1.2.6",
+ "openapi-merge": "^1.3.2"
+ },
+ "devDependencies": {
+ "jest": "^28.1.3"
+ }
+}
diff --git a/test/cli.test.js b/test/cli.test.js
new file mode 100644
index 0000000..2f9e9ad
--- /dev/null
+++ b/test/cli.test.js
@@ -0,0 +1,38 @@
+/**
+ * Programmatically set arguments and execute the CLI script
+ *
+ * @param {...string} args - positional and option arguments for the command to run
+ */
+ async function runCommand(...args) {
+ process.argv = [
+ "node",
+ "index.js",
+ ...args,
+ ];
+
+ return require("../index.js");
+ }
+
+ describe("cli", () => {
+ let originalArgv;
+
+ beforeEach(() => {
+ jest.resetModules();
+
+ originalArgv = process.argv;
+ });
+
+ afterEach(() => {
+ jest.resetAllMocks();
+
+ process.argv = originalArgv;
+ });
+
+ it("should run the cli with no errors", async () => {
+ const consoleSpy = jest.spyOn(console, "log");
+
+ await runCommand("--config", "./test/fixtures/oas-merge-config.yml", "--path", "./test/fixtures", "--test");
+
+ expect(consoleSpy).toBeCalledWith("Merge successful!");
+ });
+});
diff --git a/test/fixtures/messaging.yml b/test/fixtures/messaging.yml
new file mode 100644
index 0000000..b95cd9a
--- /dev/null
+++ b/test/fixtures/messaging.yml
@@ -0,0 +1,1388 @@
+openapi: 3.0.3
+info:
+ title: Messaging
+ version: 4.3.0
+ contact:
+ name: Bandwidth
+ url: https://support.bandwidth.com
+ email: support@bandwidth.com
+ description: |-
+ The API Specification for Bandwidth's Messaging Platform
+
+ ## Base URL
+
+ `https://messaging.bandwidth.com/api/v2`
+servers:
+ - url: https://messaging.bandwidth.com/api/v2
+ description: Production
+paths:
+ /users/{accountId}/media:
+ get:
+ summary: List Media
+ description: |-
+ Gets a list of your media files. No query parameters are supported.
+ operationId: listMedia
+ tags:
+ - Media
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/continuationToken"
+ responses:
+ "200":
+ $ref: "#/components/responses/listMediaResponse"
+ "400":
+ $ref: "#/components/responses/messagingBadRequestError"
+ "401":
+ $ref: "#/components/responses/messagingUnauthorizedError"
+ "403":
+ $ref: "#/components/responses/messagingForbiddenError"
+ "404":
+ $ref: "#/components/responses/messagingNotFoundError"
+ "415":
+ $ref: "#/components/responses/messagingInvalidMediaTypeError"
+ "429":
+ $ref: "#/components/responses/messagingTooManyRequestsError"
+ "500":
+ $ref: "#/components/responses/messagingInternalServerError"
+ /users/{accountId}/media/{mediaId}:
+ get:
+ summary: Get Media
+ description: Downloads a media file you previously uploaded.
+ operationId: getMedia
+ tags:
+ - Media
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/mediaId"
+ responses:
+ "200":
+ $ref: "#/components/responses/getMediaResponse"
+ "400":
+ $ref: "#/components/responses/messagingBadRequestError"
+ "401":
+ $ref: "#/components/responses/messagingUnauthorizedError"
+ "403":
+ $ref: "#/components/responses/messagingForbiddenError"
+ "404":
+ $ref: "#/components/responses/messagingNotFoundError"
+ "415":
+ $ref: "#/components/responses/messagingInvalidMediaTypeError"
+ "429":
+ $ref: "#/components/responses/messagingTooManyRequestsError"
+ "500":
+ $ref: "#/components/responses/messagingInternalServerError"
+ put:
+ summary: Upload Media
+ description: |-
+ Upload a file. You may add headers to the request in order to provide some control to your media file.
+
+ If a file is uploaded with the same name as a file that already exists under this account, the previous file will be overwritten.
+
+ A list of supported media types can be found [here](https://support.bandwidth.com/hc/en-us/articles/360014128994-What-MMS-file-types-are-supported-).
+ operationId: uploadMedia
+ tags:
+ - Media
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/mediaId"
+ - $ref: "#/components/parameters/contentType"
+ - $ref: "#/components/parameters/cacheControl"
+ requestBody:
+ $ref: "#/components/requestBodies/uploadMediaRequest"
+ responses:
+ "204":
+ description: No Content
+ "400":
+ $ref: "#/components/responses/messagingBadRequestError"
+ "401":
+ $ref: "#/components/responses/messagingUnauthorizedError"
+ "403":
+ $ref: "#/components/responses/messagingForbiddenError"
+ "404":
+ $ref: "#/components/responses/messagingNotFoundError"
+ "415":
+ $ref: "#/components/responses/messagingInvalidMediaTypeError"
+ "429":
+ $ref: "#/components/responses/messagingTooManyRequestsError"
+ "500":
+ $ref: "#/components/responses/messagingInternalServerError"
+ delete:
+ summary: Delete Media
+ description: |-
+ Deletes a media file from Bandwidth API server. Make sure you don't have
+ any application scripts still using the media before you delete.
+
+ If you accidentally delete a media file you can immediately upload a new
+ file with the same name.
+ operationId: deleteMedia
+ tags:
+ - Media
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/mediaId"
+ responses:
+ "204":
+ description: No Content
+ "400":
+ $ref: "#/components/responses/messagingBadRequestError"
+ "401":
+ $ref: "#/components/responses/messagingUnauthorizedError"
+ "403":
+ $ref: "#/components/responses/messagingForbiddenError"
+ "404":
+ $ref: "#/components/responses/messagingNotFoundError"
+ "415":
+ $ref: "#/components/responses/messagingInvalidMediaTypeError"
+ "429":
+ $ref: "#/components/responses/messagingTooManyRequestsError"
+ "500":
+ $ref: "#/components/responses/messagingInternalServerError"
+ /users/{accountId}/messages:
+ get:
+ summary: List Messages
+ description: Returns a list of messages based on query parameters.
+ operationId: listMessages
+ tags:
+ - Messages
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/messageId"
+ - $ref: "#/components/parameters/sourceTn"
+ - $ref: "#/components/parameters/destinationTn"
+ - $ref: "#/components/parameters/messageStatus"
+ - $ref: "#/components/parameters/messageDirection"
+ - $ref: "#/components/parameters/carrierName"
+ - $ref: "#/components/parameters/messageType"
+ - $ref: "#/components/parameters/errorCode"
+ - $ref: "#/components/parameters/fromDateTime"
+ - $ref: "#/components/parameters/toDateTime"
+ - $ref: "#/components/parameters/campaignId"
+ - $ref: "#/components/parameters/sort"
+ - $ref: "#/components/parameters/pageToken"
+ - $ref: "#/components/parameters/limit"
+ responses:
+ "200":
+ $ref: "#/components/responses/listMessagesResponse"
+ "400":
+ $ref: "#/components/responses/messagingBadRequestError"
+ "401":
+ $ref: "#/components/responses/messagingUnauthorizedError"
+ "403":
+ $ref: "#/components/responses/messagingForbiddenError"
+ "404":
+ $ref: "#/components/responses/messagingNotFoundError"
+ "415":
+ $ref: "#/components/responses/messagingInvalidMediaTypeError"
+ "429":
+ $ref: "#/components/responses/messagingTooManyRequestsError"
+ "500":
+ $ref: "#/components/responses/messagingInternalServerError"
+ post:
+ summary: Create Message
+ description: Endpoint for sending text messages and picture messages using V2 messaging.
+ operationId: createMessage
+ tags:
+ - Messages
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ requestBody:
+ $ref: "#/components/requestBodies/createMessageRequest"
+ responses:
+ "202":
+ $ref: "#/components/responses/createMessageResponse"
+ "400":
+ $ref: "#/components/responses/createMessageBadRequestError"
+ "401":
+ $ref: "#/components/responses/messagingUnauthorizedError"
+ "403":
+ $ref: "#/components/responses/messagingForbiddenError"
+ "404":
+ $ref: "#/components/responses/messagingNotFoundError"
+ "415":
+ $ref: "#/components/responses/messagingInvalidMediaTypeError"
+ "429":
+ $ref: "#/components/responses/messagingTooManyRequestsError"
+ "500":
+ $ref: "#/components/responses/messagingInternalServerError"
+ callbacks:
+ inboundCallback:
+ $ref: "#/components/callbacks/inboundCallback"
+ statusCallback:
+ $ref: "#/components/callbacks/statusCallback"
+components:
+ parameters:
+ accountId:
+ in: path
+ name: accountId
+ required: true
+ schema:
+ type: string
+ description: Your Bandwidth Account ID.
+ example: "9900000"
+ mediaId:
+ in: path
+ name: mediaId
+ required: true
+ description: Media ID to retrieve.
+ example: 14762070468292kw2fuqty55yp2b2/0/bw.png
+ schema:
+ type: string
+ contentType:
+ in: header
+ name: Content-Type
+ style: simple
+ explode: false
+ description: The media type of the entity-body.
+ example: audio/wav
+ schema:
+ type: string
+ cacheControl:
+ in: header
+ name: Cache-Control
+ style: simple
+ explode: false
+ description: >-
+ General-header field is used to specify directives that MUST be obeyed by
+ all caching mechanisms along the request/response chain.
+ example: no-cache
+ schema:
+ type: string
+ continuationToken:
+ in: header
+ name: Continuation-Token
+ description: Continuation token used to retrieve subsequent media.
+ example: "1XEi2tsFtLo1JbtLwETnM1ZJ+PqAa8w6ENvC5QKvwyrCDYII663Gy5M4s40owR1tjkuWUif6qbWvFtQJR5/ipqbUnfAqL254LKNlPy6tATCzioKSuHuOqgzloDkSwRtX0LtcL2otHS69hK343m+SjdL+vlj71tT39"
+ schema:
+ type: string
+ messageId:
+ in: query
+ name: messageId
+ required: false
+ description: >-
+ The ID of the message to search for. Special characters need to be
+ encoded using URL encoding. Message IDs could come in different formats,
+ e.g., 9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6 and
+ 1589228074636lm4k2je7j7jklbn2 are valid message ID formats. Note that you
+ must include at least one query parameter.
+ example: 9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6
+ schema:
+ type: string
+ sourceTn:
+ in: query
+ name: sourceTn
+ required: false
+ description: >-
+ The phone number that sent the message. Accepted values are: a single
+ full phone number a comma separated list of full phone numbers (maximum
+ of 10) or a single partial phone number (minimum of 5 characters e.g.
+ '%2B1919').
+ example: "%2B15554443333"
+ schema:
+ type: string
+ destinationTn:
+ in: query
+ name: destinationTn
+ required: false
+ description: >-
+ The phone number that received the message. Accepted values are: a single
+ full phone number a comma separated list of full phone numbers (maximum
+ of 10) or a single partial phone number (minimum of 5 characters e.g.
+ '%2B1919').
+ example: "%2B15554443333"
+ schema:
+ type: string
+ messageStatus:
+ in: query
+ name: messageStatus
+ required: false
+ description: >-
+ The status of the message. One of RECEIVED QUEUED SENDING SENT FAILED
+ DELIVERED ACCEPTED UNDELIVERED.
+ schema:
+ $ref: "#/components/schemas/messageStatusEnum"
+ messageDirection:
+ in: query
+ name: messageDirection
+ required: false
+ description: The direction of the message. One of INBOUND OUTBOUND.
+ schema:
+ $ref: "#/components/schemas/listMessageDirectionEnum"
+ carrierName:
+ in: query
+ name: carrierName
+ required: false
+ description: >-
+ The name of the carrier used for this message. Possible values include
+ but are not limited to Verizon and TMobile. Special characters need to
+ be encoded using URL encoding (i.e. AT&T should be passed as AT%26T).
+ example: Verizon
+ schema:
+ type: string
+ messageType:
+ in: query
+ name: messageType
+ required: false
+ description: The type of message. Either sms or mms.
+ schema:
+ $ref: "#/components/schemas/messageTypeEnum"
+ errorCode:
+ in: query
+ name: errorCode
+ required: false
+ description: The error code of the message.
+ example: 9902
+ schema:
+ type: integer
+ fromDateTime:
+ in: query
+ name: fromDateTime
+ required: false
+ description: >-
+ The start of the date range to search in ISO 8601 format. Uses the
+ message receive time. The date range to search in is currently 14 days.
+ example: 2022-09-14T18:20:16.000Z
+ schema:
+ type: string
+ toDateTime:
+ in: query
+ name: toDateTime
+ required: false
+ description: >-
+ The end of the date range to search in ISO 8601 format. Uses the message
+ receive time. The date range to search in is currently 14 days.
+ example: 2022-09-14T18:20:16.000Z
+ schema:
+ type: string
+ campaignId:
+ in: query
+ name: campaignId
+ required: false
+ description: The campaign ID of the message.
+ example: CJEUMDK
+ schema:
+ type: string
+ sort:
+ in: query
+ name: sort
+ required: false
+ description: The field and direction to sort by combined with a colon. Direction is either asc or desc.
+ example: sourceTn:desc
+ schema:
+ type: string
+ pageToken:
+ in: query
+ name: pageToken
+ required: false
+ description: A base64 encoded value used for pagination of results.
+ example: gdEewhcJLQRB5
+ schema:
+ type: string
+ limit:
+ in: query
+ name: limit
+ required: false
+ description: >-
+ The maximum records requested in search result. Default 100. The sum of
+ limit and after cannot be more than 10000.
+ schema:
+ type: integer
+ example: 50
+ schemas:
+ priorityEnum:
+ type: string
+ description: |-
+ The priority specified by the user.
+
+ Not supported on MMS.
+ enum:
+ - default
+ - high
+ example: default
+ messageStatusEnum:
+ type: string
+ description: >-
+ The status of the message. One of RECEIVED QUEUED SENDING SENT FAILED
+ DELIVERED ACCEPTED UNDELIVERED.
+ enum:
+ - RECEIVED
+ - QUEUED
+ - SENDING
+ - SENT
+ - FAILED
+ - DELIVERED
+ - ACCEPTED
+ - UNDELIVERED
+ example: "RECEIVED"
+ listMessageDirectionEnum:
+ type: string
+ description: The direction of the message. One of INBOUND OUTBOUND.
+ enum:
+ - INBOUND
+ - OUTBOUND
+ messageDirectionEnum:
+ type: string
+ description: The direction of the message. One of in out.
+ enum:
+ - in
+ - out
+ messageTypeEnum:
+ type: string
+ description: The type of message. Either SMS or MMS.
+ enum:
+ - sms
+ - mms
+ example: sms
+ fieldError:
+ type: object
+ properties:
+ fieldName:
+ type: string
+ description: The name of the field that contains the error
+ example: from
+ description:
+ type: string
+ description: The error associated with the field
+ example: "'+invalid' must be replaced with a valid E164 formatted telephone number"
+ messagesList:
+ title: MessagesList
+ type: object
+ properties:
+ totalCount:
+ type: integer
+ description: Total number of messages matched by the search.
+ example: 100
+ pageInfo:
+ $ref: "#/components/schemas/pageInfo"
+ messages:
+ type: array
+ items:
+ $ref: "#/components/schemas/listMessageItem"
+ listMessageItem:
+ title: listMessageItem
+ type: object
+ properties:
+ messageId:
+ type: string
+ description: The message id
+ example: 1589228074636lm4k2je7j7jklbn2
+ accountId:
+ type: string
+ description: The account id associated with this message.
+ example: "9900000"
+ sourceTn:
+ type: string
+ description: The source phone number of the message.
+ example: "+15554443333"
+ destinationTn:
+ type: string
+ description: The recipient phone number of the message.
+ example: "+15554442222"
+ messageStatus:
+ $ref: "#/components/schemas/messageStatusEnum"
+ messageDirection:
+ $ref: "#/components/schemas/listMessageDirectionEnum"
+ messageType:
+ $ref: "#/components/schemas/messageTypeEnum"
+ segmentCount:
+ type: integer
+ description: The number of segments the message was sent as.
+ example: 1
+ errorCode:
+ type: integer
+ description: The numeric error code of the message.
+ example: 9902
+ receiveTime:
+ type: string
+ description: The ISO 8601 datetime of the message.
+ example: 2020-04-07T14:03:07.000Z
+ carrierName:
+ type: string
+ nullable: true
+ description: The name of the carrier. Not currently supported for MMS coming soon.
+ example: other
+ messageSize:
+ type: integer
+ description: The size of the message including message content and headers.
+ nullable: true
+ example: 27
+ messageLength:
+ type: integer
+ description: The length of the message content.
+ example: 18
+ attachmentCount:
+ type: integer
+ description: The number of attachments the message has.
+ nullable: true
+ example: 1
+ recipientCount:
+ type: integer
+ description: The number of recipients the message has.
+ nullable: true
+ example: 1
+ campaignClass:
+ type: string
+ description: The campaign class of the message if it has one.
+ nullable: true
+ example: T
+ campaignId:
+ type: string
+ description: The campaign ID of the message if it has one.
+ nullable: true
+ example: CJEUMDK
+ pageInfo:
+ title: PageInfo
+ type: object
+ properties:
+ prevPage:
+ type: string
+ description: The link to the previous page for pagination.
+ example: https://messaging.bandwidth.com/api/v2/users/accountId/messages?messageStatus=DLR_EXPIRED&nextPage=DLAPE902
+ nextPage:
+ type: string
+ description: The link to the next page for pagination.
+ example: https://messaging.bandwidth.com/api/v2/users/accountId/messages?messageStatus=DLR_EXPIRED&prevPage=GL83PD3C
+ prevPageToken:
+ type: string
+ description: The isolated pagination token for the previous page.
+ example: DLAPE902
+ nextPageToken:
+ type: string
+ description: The isolated pagination token for the next page.
+ example: GL83PD3C
+ messagingRequestError:
+ title: MessagingRequestError
+ type: object
+ properties:
+ type:
+ type: string
+ description:
+ type: string
+ required:
+ - type
+ - description
+ createMessageRequestError:
+ title: CreateMessageRequestError
+ type: object
+ properties:
+ type:
+ type: string
+ description:
+ type: string
+ fieldErrors:
+ type: array
+ items:
+ $ref: "#/components/schemas/fieldError"
+ required:
+ - type
+ - description
+ media:
+ title: Media
+ type: object
+ properties:
+ content:
+ type: string
+ contentLength:
+ type: integer
+ mediaName:
+ type: string
+ tag:
+ title: Tag
+ type: object
+ properties:
+ key:
+ type: string
+ value:
+ type: string
+ deferredResult:
+ title: DeferredResult
+ type: object
+ properties:
+ result:
+ type: object
+ setOrExpired:
+ type: boolean
+ message:
+ title: Message
+ type: object
+ properties:
+ id:
+ type: string
+ description: The id of the message.
+ example: 1589228074636lm4k2je7j7jklbn2
+ owner:
+ type: string
+ description: The Bandwidth phone number associated with the message.
+ example: "+15554443333"
+ applicationId:
+ type: string
+ description: The application ID associated with the message.
+ example: 93de2206-9669-4e07-948d-329f4b722ee2
+ time:
+ type: string
+ description: The datetime stamp of the message in ISO 8601
+ example: 2022-09-14T18:20:16Z
+ segmentCount:
+ type: integer
+ description: >-
+ The number of segments the original message from the user is broken
+ into before sending over to carrier networks.
+ example: 2
+ direction:
+ $ref: "#/components/schemas/messageDirectionEnum"
+ to:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ description: The phone number recipients of the message.
+ example:
+ - "+15552223333"
+ from:
+ type: string
+ description: The phone number the message was sent from.
+ example: "+15553332222"
+ media:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ description: >-
+ The list of media URLs sent in the message. Including a `filename`
+ field in the `Content-Disposition` header of the media linked with
+ a URL will set the displayed file name. This is a best practice to
+ ensure that your media has a readable file name.
+ example:
+ - https://dev.bandwidth.com/images/bandwidth-logo.png
+ text:
+ type: string
+ description: The contents of the message.
+ example: Hello world
+ tag:
+ type: string
+ description: The custom string set by the user.
+ example: custom tag
+ priority:
+ $ref: "#/components/schemas/priorityEnum"
+ expiration:
+ type: string
+ format: date-time
+ description: The expiration date-time set by the user.
+ example: "2021-02-01T11:29:18-05:00"
+ messageRequest:
+ title: MessageRequest
+ type: object
+ required:
+ - applicationId
+ - to
+ - from
+ properties:
+ applicationId:
+ type: string
+ description: The ID of the Application your from number is associated with in the Bandwidth Phone Number Dashboard.
+ example: 93de2206-9669-4e07-948d-329f4b722ee2
+ to:
+ uniqueItems: true
+ type: array
+ description: The phone number(s) the message should be sent to in E164 format.
+ example:
+ - "+15554443333"
+ - "+15552223333"
+ items:
+ type: string
+ from:
+ type: string
+ description: One of your telephone numbers the message should come from in E164 format.
+ example: "+15551113333"
+ text:
+ type: string
+ description: The contents of the text message. Must be 2048 characters or less.
+ maxLength: 2048
+ example: Hello world
+ media:
+ type: array
+ items:
+ type: string
+ format: uri
+ maxLength: 4096
+ description: >-
+ A list of URLs to include as media attachments as part of the message.
+
+ Each URL can be at most 4096 characters.
+ example:
+ - https://dev.bandwidth.com/images/bandwidth-logo.png
+ - https://dev.bandwidth.com/images/github_logo.png
+ tag:
+ type: string
+ description: A custom string that will be included in callback events of the message. Max 1024 characters.
+ example: custom string
+ priority:
+ $ref: "#/components/schemas/priorityEnum"
+ expiration:
+ type: string
+ format: date-time
+ description: >-
+ A string with the date/time value that the message will automatically
+ expire by. This must be a valid RFC-3339 value, e.g.,
+ 2021-03-14T01:59:26Z or 2021-03-13T20:59:26-05:00. Must be a date-time in the future.
+
+ Not supported on MMS.
+ example: "2021-02-01T11:29:18-05:00"
+ inboundMessageCallback:
+ description: Inbound Message Callback
+ type: object
+ properties:
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ type:
+ type: string
+ example: message-received
+ to:
+ type: string
+ example: "+15552223333"
+ description:
+ type: string
+ example: Incoming message received
+ message:
+ $ref: '#/components/schemas/inboundMessageCallbackMessage'
+ required:
+ - time
+ - type
+ - to
+ - description
+ - message
+ inboundMessageCallbackMessage:
+ description: Inbound Message Callback Message Schema
+ type: object
+ properties:
+ id:
+ type: string
+ example: 1661365814859loidf7mcwd4qacn7
+ owner:
+ type: string
+ example: "+15553332222"
+ applicationId:
+ type: string
+ example: 93de2206-9669-4e07-948d-329f4b722ee2
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ segmentCount:
+ type: integer
+ example: 1
+ direction:
+ $ref: "#/components/schemas/messageDirectionEnum"
+ to:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ example:
+ - "+15552223333"
+ from:
+ type: string
+ example: "+15553332222"
+ text:
+ type: string
+ example: Hello world
+ tag:
+ type: string
+ example: custom string
+ media:
+ type: array
+ items:
+ type: string
+ format: uri
+ example:
+ - >-
+ https://dev.bandwidth.com/images/bandwidth-logo.png
+ - https://dev.bandwidth.com/images/github_logo.png
+ priority:
+ $ref: "#/components/schemas/priorityEnum"
+ required:
+ - id
+ - owner
+ - applicationId
+ - time
+ - segmentCount
+ - direction
+ - to
+ - from
+ - text
+ messageSendingCallback:
+ type: object
+ description: Message Sending Callback
+ properties:
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ type:
+ type: string
+ example: message-sending
+ to:
+ type: string
+ example: "+15552223333"
+ description:
+ type: string
+ example: Message is sending to carrier
+ message:
+ $ref: '#/components/schemas/messageSendingCallbackMessage'
+ required:
+ - time
+ - type
+ - to
+ - description
+ - message
+ messageSendingCallbackMessage:
+ description: Message Sending Callback Message Schema
+ type: object
+ properties:
+ id:
+ type: string
+ example: 1661365814859loidf7mcwd4qacn7
+ owner:
+ type: string
+ example: "+15553332222"
+ applicationId:
+ type: string
+ example: 93de2206-9669-4e07-948d-329f4b722ee2
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ segmentCount:
+ type: integer
+ example: 1
+ direction:
+ $ref: "#/components/schemas/messageDirectionEnum"
+ to:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ example:
+ - "+15552223333"
+ from:
+ type: string
+ example: "+15553332222"
+ text:
+ type: string
+ example: Hello world
+ tag:
+ type: string
+ example: custom string
+ media:
+ type: array
+ items:
+ type: string
+ format: uri
+ example:
+ - >-
+ https://dev.bandwidth.com/images/bandwidth-logo.png
+ - https://dev.bandwidth.com/images/github_logo.png
+ priority:
+ $ref: "#/components/schemas/priorityEnum"
+ required:
+ - id
+ - owner
+ - applicationId
+ - time
+ - segmentCount
+ - direction
+ - to
+ - from
+ - text
+ - media
+ - priority
+ messageDeliveredCallback:
+ description: Message Delivered Callback
+ type: object
+ properties:
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ type:
+ type: string
+ example: message-delivered
+ to:
+ type: string
+ example: "+15552223333"
+ description:
+ type: string
+ example: Message delivered to carrier.
+ message:
+ $ref: '#/components/schemas/messageDeliveredCallbackMessage'
+ required:
+ - time
+ - type
+ - to
+ - description
+ - message
+ messageDeliveredCallbackMessage:
+ description: Message Delivered Callback Message Schema
+ type: object
+ properties:
+ id:
+ type: string
+ example: 1661365814859loidf7mcwd4qacn7
+ owner:
+ type: string
+ example: "+15553332222"
+ applicationId:
+ type: string
+ example: 93de2206-9669-4e07-948d-329f4b722ee2
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ segmentCount:
+ type: integer
+ example: 1
+ direction:
+ $ref: "#/components/schemas/messageDirectionEnum"
+ to:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ example:
+ - "+15552223333"
+ from:
+ type: string
+ example: "+15553332222"
+ text:
+ type: string
+ example: Hello world
+ tag:
+ type: string
+ example: custom string
+ media:
+ type: array
+ items:
+ type: string
+ format: uri
+ example:
+ - >-
+ https://dev.bandwidth.com/images/bandwidth-logo.png
+ - https://dev.bandwidth.com/images/github_logo.png
+ priority:
+ $ref: "#/components/schemas/priorityEnum"
+ required:
+ - id
+ - owner
+ - applicationId
+ - time
+ - segmentCount
+ - direction
+ - to
+ - from
+ - text
+ - tag
+ messageFailedCallback:
+ description: Message Failed Callback
+ type: object
+ properties:
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ type:
+ type: string
+ example: message-failed
+ to:
+ type: string
+ example: "+15552223333"
+ description:
+ type: string
+ example: rejected-unallocated-from-number
+ message:
+ $ref: '#/components/schemas/messageFailedCallbackMessage'
+ errorCode:
+ type: integer
+ example: 9902
+ required:
+ - time
+ - type
+ - to
+ - description
+ - message
+ - errorCode
+ messageFailedCallbackMessage:
+ description: Message Failed Callback Message Schema
+ type: object
+ properties:
+ id:
+ type: string
+ example: 1661365814859loidf7mcwd4qacn7
+ owner:
+ type: string
+ example: "+15553332222"
+ applicationId:
+ type: string
+ example: 93de2206-9669-4e07-948d-329f4b722ee2
+ time:
+ type: string
+ format: date-time
+ example: 2016-09-14T18:20:16.000Z
+ segmentCount:
+ type: integer
+ example: 1
+ direction:
+ $ref: "#/components/schemas/messageDirectionEnum"
+ to:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ example:
+ - "+15552223333"
+ from:
+ type: string
+ example: "+15553332222"
+ text:
+ type: string
+ example: Hello world
+ tag:
+ type: string
+ example: custom string
+ media:
+ type: array
+ items:
+ type: string
+ format: uri
+ example:
+ - >-
+ https://dev.bandwidth.com/images/bandwidth-logo.png
+ - https://dev.bandwidth.com/images/github_logo.png
+ priority:
+ $ref: "#/components/schemas/priorityEnum"
+ required:
+ - id
+ - owner
+ - applicationId
+ - time
+ - segmentCount
+ - direction
+ - to
+ - from
+ - text
+ - tag
+ - priority
+ requestBodies:
+ createMessageRequest:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messageRequest"
+ required: true
+ uploadMediaRequest:
+ content:
+ application/json:
+ schema:
+ type: string
+ format: binary
+ application/ogg:
+ schema:
+ type: string
+ format: binary
+ application/pdf:
+ schema:
+ type: string
+ format: binary
+ application/rtf:
+ schema:
+ type: string
+ format: binary
+ application/zip:
+ schema:
+ type: string
+ format: binary
+ application/x-tar:
+ schema:
+ type: string
+ format: binary
+ application/xml:
+ schema:
+ type: string
+ format: binary
+ application/gzip:
+ schema:
+ type: string
+ format: binary
+ application/x-bzip2:
+ schema:
+ type: string
+ format: binary
+ application/x-gzip:
+ schema:
+ type: string
+ format: binary
+ application/smil:
+ schema:
+ type: string
+ format: binary
+ application/javascript:
+ schema:
+ type: string
+ format: binary
+ audio/mp4:
+ schema:
+ type: string
+ format: binary
+ audio/mpeg:
+ schema:
+ type: string
+ format: binary
+ audio/ogg:
+ schema:
+ type: string
+ format: binary
+ audio/flac:
+ schema:
+ type: string
+ format: binary
+ audio/webm:
+ schema:
+ type: string
+ format: binary
+ audio/wav:
+ schema:
+ type: string
+ format: binary
+ audio/amr:
+ schema:
+ type: string
+ format: binary
+ audio/3gpp:
+ schema:
+ type: string
+ format: binary
+ image/bmp:
+ schema:
+ type: string
+ format: binary
+ image/gif:
+ schema:
+ type: string
+ format: binary
+ image/jpeg:
+ schema:
+ type: string
+ format: binary
+ image/pjpeg:
+ schema:
+ type: string
+ format: binary
+ image/png:
+ schema:
+ type: string
+ format: binary
+ image/svg+xml:
+ schema:
+ type: string
+ format: binary
+ image/tiff:
+ schema:
+ type: string
+ format: binary
+ image/webp:
+ schema:
+ type: string
+ format: binary
+ image/x-icon:
+ schema:
+ type: string
+ format: binary
+ text/css:
+ schema:
+ type: string
+ format: binary
+ text/csv:
+ schema:
+ type: string
+ format: binary
+ text/calendar:
+ schema:
+ type: string
+ format: binary
+ text/plain:
+ schema:
+ type: string
+ format: binary
+ text/javascript:
+ schema:
+ type: string
+ format: binary
+ text/vcard:
+ schema:
+ type: string
+ format: binary
+ text/vnd.wap.wml:
+ schema:
+ type: string
+ format: binary
+ text/xml:
+ schema:
+ type: string
+ format: binary
+ video/avi:
+ schema:
+ type: string
+ format: binary
+ video/mp4:
+ schema:
+ type: string
+ format: binary
+ video/mpeg:
+ schema:
+ type: string
+ format: binary
+ video/ogg:
+ schema:
+ type: string
+ format: binary
+ video/quicktime:
+ schema:
+ type: string
+ format: binary
+ video/webm:
+ schema:
+ type: string
+ format: binary
+ video/x-ms-wmv:
+ schema:
+ type: string
+ format: binary
+ required: true
+ responses:
+ createMessageResponse:
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/message"
+ listMessagesResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagesList"
+ getMediaResponse:
+ description: OK
+ content:
+ application/octet-stream:
+ schema:
+ type: string
+ description: Successful Operation
+ format: binary
+ listMediaResponse:
+ description: OK
+ headers:
+ Continuation-Token:
+ description: Continuation token used to retrieve subsequent media.
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: "#/components/schemas/media"
+ messagingBadRequestError:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ createMessageBadRequestError:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/createMessageRequestError"
+ messagingUnauthorizedError:
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ messagingForbiddenError:
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ messagingNotFoundError:
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ messagingInvalidMediaTypeError:
+ description: Unsupported Media Type
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ messagingTooManyRequestsError:
+ description: Too Many Requests
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ messagingInternalServerError:
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/messagingRequestError"
+ callbacks:
+ inboundCallback:
+ "{inboundCallbackUrl}":
+ post:
+ requestBody:
+ required: true
+ description: Inbound Message Callback Payload
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/inboundMessageCallback"
+ responses:
+ "200":
+ description: OK
+ statusCallback:
+ "{statusCallbackUrl}":
+ post:
+ requestBody:
+ required: true
+ description: Status Callback Payload
+ content:
+ application/json:
+ schema:
+ type: object
+ oneOf:
+ - $ref: "#/components/schemas/messageSendingCallback"
+ - $ref: "#/components/schemas/messageDeliveredCallback"
+ - $ref: "#/components/schemas/messageFailedCallback"
+ responses:
+ "200":
+ description: OK
+ securitySchemes:
+ Basic:
+ type: http
+ scheme: basic
+ description: |-
+ Basic authentication is a simple authentication scheme built into the
+ HTTP protocol. To use it, send your HTTP requests with an Authorization
+ header that contains the word Basic followed by a space and a
+ base64-encoded string `username:password`Example: `Authorization: Basic
+ ZGVtbZpwQDU1dzByZA==`
+security:
+ - Basic: []
+tags:
+ - name: Messages
+ - name: Media
diff --git a/test/fixtures/multi-factor-auth.yml b/test/fixtures/multi-factor-auth.yml
new file mode 100644
index 0000000..38e1956
--- /dev/null
+++ b/test/fixtures/multi-factor-auth.yml
@@ -0,0 +1,310 @@
+openapi: 3.0.3
+info:
+ title: Multi-Factor Authentication
+ description: |-
+ Bandwidth's Two-Factor Authentication service
+
+ ## Base Path
+
+ https://mfa.bandwidth.com/api/v1
+ contact:
+ name: Bandwidth Support
+ email: support@bandwidth.com
+ url: https://support.bandwidth.com
+ version: 3.1.0
+servers:
+ - url: https://mfa.bandwidth.com/api/v1
+ description: Production
+paths:
+ /accounts/{accountId}/code/voice:
+ post:
+ tags:
+ - MFA
+ summary: Voice Authentication Code
+ description: Send an MFA Code via a phone call.
+ operationId: generateVoiceCode
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ requestBody:
+ $ref: '#/components/requestBodies/codeRequest'
+ responses:
+ '200':
+ $ref: '#/components/responses/voiceCodeResponse'
+ '400':
+ $ref: '#/components/responses/mfaBadRequestError'
+ '401':
+ $ref: '#/components/responses/mfaUnauthorizedError'
+ '403':
+ $ref: '#/components/responses/mfaForbiddenError'
+ '500':
+ $ref: '#/components/responses/mfaInternalServerError'
+ /accounts/{accountId}/code/messaging:
+ post:
+ tags:
+ - MFA
+ summary: Messaging Authentication Code
+ description: Send an MFA code via text message (SMS).
+ operationId: generateMessagingCode
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ requestBody:
+ $ref: '#/components/requestBodies/codeRequest'
+ responses:
+ '200':
+ $ref: '#/components/responses/messagingCodeResponse'
+ '400':
+ $ref: '#/components/responses/mfaBadRequestError'
+ '401':
+ $ref: '#/components/responses/mfaUnauthorizedError'
+ '403':
+ $ref: '#/components/responses/mfaForbiddenError'
+ '500':
+ $ref: '#/components/responses/mfaInternalServerError'
+ /accounts/{accountId}/code/verify:
+ post:
+ tags:
+ - MFA
+ summary: Verify Authentication Code
+ description: Verify a previously sent MFA code.
+ operationId: verifyCode
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ requestBody:
+ $ref: '#/components/requestBodies/codeVerify'
+ responses:
+ '200':
+ $ref: '#/components/responses/verifyCodeResponse'
+ '400':
+ $ref: '#/components/responses/mfaBadRequestError'
+ '401':
+ $ref: '#/components/responses/mfaUnauthorizedError'
+ '403':
+ $ref: '#/components/responses/mfaForbiddenError'
+ '429':
+ $ref: '#/components/responses/mfaTooManyRequestsError'
+ '500':
+ $ref: '#/components/responses/mfaInternalServerError'
+components:
+ schemas:
+ codeRequest:
+ type: object
+ properties:
+ to:
+ type: string
+ description: The phone number to send the mfa code to.
+ pattern: '^\+[1-9]\d{1,14}$'
+ example: '+19195551234'
+ from:
+ type: string
+ description: The application phone number, the sender of the mfa code.
+ pattern: '^\+[1-9]\d{1,14}$'
+ maxLength: 32
+ example: '+19195554321'
+ applicationId:
+ type: string
+ description: The application unique ID, obtained from Bandwidth.
+ maxLength: 50
+ example: 66fd98ae-ac8d-a00f-7fcd-ba3280aeb9b1
+ scope:
+ type: string
+ description: >-
+ An optional field to denote what scope or action the mfa code is
+ addressing. If not supplied, defaults to "2FA".
+ maxLength: 25
+ example: 2FA
+ message:
+ type: string
+ description: >-
+ The message format of the mfa code. There are three values that the
+ system will replace "{CODE}", "{NAME}", "{SCOPE}". The "{SCOPE}"
+ and "{NAME} value template are optional, while "{CODE}" must be
+ supplied. As the name would suggest, code will be replace with the
+ actual mfa code. Name is replaced with the application name,
+ configured during provisioning of mfa. The scope value is the same
+ value sent during the call and partitioned by the server.
+ maxLength: 2048
+ example: 'Your temporary {NAME} {SCOPE} code is {CODE}'
+ digits:
+ type: integer
+ description: >-
+ The number of digits for your mfa code. The valid number ranges
+ from 2 to 8, inclusively.
+ minimum: 4
+ maximum: 8
+ example: 6
+ required:
+ - to
+ - from
+ - applicationId
+ - message
+ - digits
+ voiceCodeResponse:
+ type: object
+ properties:
+ callId:
+ type: string
+ description: Programmable Voice API Call ID.
+ example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ messagingCodeResponse:
+ type: object
+ properties:
+ messageId:
+ type: string
+ description: Messaging API Message ID.
+ example: 9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6
+ verifyCodeRequest:
+ type: object
+ properties:
+ to:
+ type: string
+ description: The phone number to send the mfa code to.
+ pattern: '^\+[1-9]\d{1,14}$'
+ example: '+19195551234'
+ scope:
+ type: string
+ description: >-
+ An optional field to denote what scope or action the mfa code is
+ addressing. If not supplied, defaults to "2FA".
+ example: 2FA
+ expirationTimeInMinutes:
+ type: number
+ description: >-
+ The time period, in minutes, to validate the mfa code. By setting
+ this to 3 minutes, it will mean any code generated within the last 3
+ minutes are still valid. The valid range for expiration time is
+ between 0 and 15 minutes, exclusively and inclusively, respectively.
+ minimum: 1
+ maximum: 15
+ example: 3
+ code:
+ type: string
+ description: The generated mfa code to check if valid.
+ minLength: 4
+ maxLength: 8
+ example: '123456'
+ required:
+ - to
+ - expirationTimeInMinutes
+ - code
+ verifyCodeResponse:
+ type: object
+ properties:
+ valid:
+ type: boolean
+ description: Whether or not the supplied code is valid.
+ example: true
+ mfaRequestError:
+ type: object
+ properties:
+ error:
+ type: string
+ description: A message describing the error with your request.
+ example: 400 Request is malformed or invalid
+ requestId:
+ type: string
+ description: The associated requestId from AWS.
+ example: 354cc8a3-6701-461e-8fa7-8671703dd898
+ mfaUnauthorizedRequestError:
+ type: object
+ properties:
+ message:
+ type: string
+ description: Unauthorized
+ example: Unauthorized
+ mfaForbiddenRequestError:
+ type: object
+ properties:
+ message:
+ type: string
+ description: The message containing the reason behind the request being forbidden.
+ example: Missing Authentication Token
+ responses:
+ voiceCodeResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceCodeResponse'
+ messagingCodeResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/messagingCodeResponse'
+ verifyCodeResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/verifyCodeResponse'
+ mfaBadRequestError:
+ description: Bad Request
+ headers: {}
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/mfaRequestError'
+ mfaUnauthorizedError:
+ description: Unauthorized
+ headers: {}
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/mfaUnauthorizedRequestError'
+ mfaForbiddenError:
+ description: Forbidden
+ headers: {}
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/mfaForbiddenRequestError'
+ mfaTooManyRequestsError:
+ description: Too Many Requests
+ headers: {}
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/mfaRequestError'
+ mfaInternalServerError:
+ description: Internal Server Error
+ headers: {}
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/mfaRequestError'
+ parameters:
+ accountId:
+ in: path
+ name: accountId
+ required: true
+ schema:
+ type: string
+ description: Your Bandwidth Account ID.
+ example: "9900000"
+ requestBodies:
+ codeRequest:
+ description: MFA code request body.
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/codeRequest'
+ codeVerify:
+ description: MFA code verify request body.
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/verifyCodeRequest'
+ securitySchemes:
+ Basic:
+ type: http
+ scheme: basic
+ description: >-
+ Basic authentication is a simple authentication scheme built into the HTTP protocol. To use it, send your HTTP requests with an Authorization header that contains the word Basic followed by a space and a base64-encoded string `username:password`.
+
+ Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==`
+security:
+ - Basic: []
+tags:
+ - name: MFA
diff --git a/test/fixtures/oas-merge-config.yml b/test/fixtures/oas-merge-config.yml
new file mode 100644
index 0000000..d9164b1
--- /dev/null
+++ b/test/fixtures/oas-merge-config.yml
@@ -0,0 +1,7 @@
+---
+inputs:
+- inputFile: "/messaging.yml"
+- inputFile: "/voice.yml"
+- inputFile: "/multi-factor-auth.yml"
+- inputFile: "/phone-number-lookup.yml"
+output: "/bandwidth.yml"
diff --git a/test/fixtures/phone-number-lookup.yml b/test/fixtures/phone-number-lookup.yml
new file mode 100644
index 0000000..76e56a3
--- /dev/null
+++ b/test/fixtures/phone-number-lookup.yml
@@ -0,0 +1,417 @@
+openapi: 3.0.3
+info:
+ title: Phone Number Lookup
+ version: 1.1.0
+ contact:
+ name: Bandwidth Support
+ email: support@bandwidth.com
+ url: https://support.bandwidth.com
+ description: >-
+ A Bandwidth API to provide carrier information for a telephone number or
+ batch of telephone numbers. Currently supports lookups of telephone numbers
+ in the mainland United States, Alaska, Hawaii, District of Columbia, and the
+ provinces of Canada. Telephone numbers submitted must be in E.164 format to
+ be processed.
+
+ ## Base Path
+
+ https://numbers.bandwidth.com/api/v1
+servers:
+ - url: https://numbers.bandwidth.com/api/v1
+ description: Production
+paths:
+ /accounts/{accountId}/tnlookup:
+ post:
+ summary: Create Lookup
+ description: Create a Phone Number Lookup Request.
+ operationId: createLookup
+ tags:
+ - Phone Number Lookup
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ requestBody:
+ $ref: '#/components/requestBodies/createLookupRequest'
+ responses:
+ '202':
+ $ref: '#/components/responses/createLookupResponse'
+ '400':
+ $ref: '#/components/responses/tnLookupBadRequestError'
+ '401':
+ $ref: '#/components/responses/tnLookupUnauthorizedError'
+ '403':
+ $ref: '#/components/responses/tnLookupForbiddenError'
+ '415':
+ $ref: '#/components/responses/tnLookupMediaTypeError'
+ '429':
+ $ref: '#/components/responses/tnLookupTooManyRequestsError'
+ '500':
+ $ref: '#/components/responses/tnLookupInternalServerError'
+ /accounts/{accountId}/tnlookup/{requestId}:
+ get:
+ summary: Get Lookup Request Status
+ description: Get an existing Phone Number Lookup Request.
+ operationId: getLookupStatus
+ tags:
+ - Phone Number Lookup
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ - $ref: '#/components/parameters/requestId'
+ responses:
+ '200':
+ $ref: '#/components/responses/getLookupResponse'
+ '400':
+ $ref: '#/components/responses/tnLookupBadRequestError'
+ '401':
+ $ref: '#/components/responses/tnLookupUnauthorizedError'
+ '403':
+ $ref: '#/components/responses/tnLookupForbiddenError'
+ '404':
+ description: Not Found
+ '429':
+ $ref: '#/components/responses/tnLookupTooManyRequestsError'
+ '500':
+ $ref: '#/components/responses/tnLookupInternalServerError'
+components:
+ schemas:
+ lookupStatusEnum:
+ type: string
+ description: >-
+ The status of the request (IN_PROGRESS, COMPLETE, PARTIAL_COMPLETE, or
+ FAILED).
+ enum:
+ - IN_PROGRESS
+ - COMPLETE
+ - PARTIAL_COMPLETE
+ - FAILED
+ example: COMPLETE
+ lookupRequest:
+ type: object
+ description: Create phone number lookup request.
+ properties:
+ tns:
+ type: array
+ items:
+ type: string
+ required:
+ - tns
+ createLookupResponse:
+ type: object
+ description: >-
+ The request has been accepted for processing but not yet finished and in
+ a terminal state (COMPLETE, PARTIAL_COMPLETE, or FAILED).
+ properties:
+ requestId:
+ type: string
+ description: The phone number lookup request ID from Bandwidth.
+ status:
+ $ref: '#/components/schemas/lookupStatusEnum'
+ lookupStatus:
+ type: object
+ description: >-
+ If requestId exists, the result for that request is returned. See the
+ Examples for details on the various responses that you can receive.
+ Generally, if you see a Response Code of 0 in a result for a TN,
+ information will be available for it. Any other Response Code will
+ indicate no information was available for the TN.
+ properties:
+ requestId:
+ type: string
+ description: The requestId.
+ example: 004223a0-8b17-41b1-bf81-20732adf5590
+ status:
+ $ref: '#/components/schemas/lookupStatusEnum'
+ result:
+ type: array
+ description: The carrier information results for the specified telephone number.
+ items:
+ $ref: '#/components/schemas/lookupResult'
+ failedTelephoneNumbers:
+ type: array
+ description: The telephone numbers whose lookup failed.
+ items:
+ type: string
+ example: ['+191955512345']
+ lookupResult:
+ type: object
+ description: Carrier information results for the specified telephone number.
+ properties:
+ Response Code:
+ type: integer
+ description: Our vendor's response code.
+ example: 0
+ Message:
+ type: string
+ description: Message associated with the response code.
+ example: NOERROR
+ E.164 Format:
+ type: string
+ description: The telephone number in E.164 format.
+ example: '+19195551234'
+ Formatted:
+ type: string
+ description: The formatted version of the telephone number.
+ example: '(919) 555-1234'
+ Country:
+ type: string
+ description: The country of the telephone number.
+ example: US
+ Line Type:
+ type: string
+ description: The line type of the telephone number.
+ example: Mobile
+ Line Provider:
+ type: string
+ description: The messaging service provider of the telephone number.
+ example: Verizon Wireless
+ Mobile Country Code:
+ type: string
+ description: The first half of the Home Network Identity (HNI).
+ example: '310'
+ Mobile Network Code:
+ type: string
+ description: The second half of the HNI.
+ example: '010'
+ tnLookupRequestError:
+ type: object
+ properties:
+ message:
+ type: string
+ description: A description of what validation error occurred.
+ example: example error message
+ responses:
+ createLookupResponse:
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/createLookupResponse'
+ examples:
+ lookupResponseExample:
+ $ref: '#/components/examples/lookupInProgressExample'
+ getLookupResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/lookupStatus'
+ examples:
+ lookupInProgressExample:
+ $ref: '#/components/examples/lookupInProgressExample'
+ lookupFailedExample:
+ $ref: '#/components/examples/lookupFailedExample'
+ lookupSingleNumberCompleteExample:
+ $ref: '#/components/examples/lookupSingleNumberCompleteExample'
+ lookupMultipleNumbersCompleteExample:
+ $ref: '#/components/examples/lookupMultipleNumbersCompleteExample'
+ lookupMultipleNumbersPartialCompleteExample:
+ $ref: '#/components/examples/lookupMultipleNumbersPartialCompleteExample'
+ lookupSingleNumberCompleteNoInfoExample:
+ $ref: '#/components/examples/lookupSingleNumberCompleteNoInfoExample'
+ tnLookupBadRequestError:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tnLookupRequestError'
+ examples:
+ badRequest:
+ summary: Example Bad Request Error
+ value:
+ message: 'Some tns do not match e164 format: 1234'
+ tnLookupUnauthorizedError:
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tnLookupRequestError'
+ examples:
+ unauthorized:
+ summary: Example Unauthorized Error
+ value:
+ message: Unauthorized
+ tnLookupForbiddenError:
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tnLookupRequestError'
+ examples:
+ forbidden:
+ summary: Example Forbidden Error
+ value:
+ message: >-
+ Authorization header requires 'Credential' parameter.
+ Authorization header requires 'Signature' parameter.
+ Authorization header requires 'SignedHeaders' parameter.
+ Authorization header requires existence of either a
+ 'X-Amz-Date' or a 'Date' header. Authorization=Basic
+ Y2tvZloPTGhHgywYIzGlcGVlcGvvcGovYTIGIt=='
+ tnLookupMediaTypeError:
+ description: Unsupported Media Type
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tnLookupRequestError'
+ examples:
+ mediaType:
+ summary: Example Unsupported Media Type Error
+ value:
+ message: Content-Type must be application/json.
+ tnLookupTooManyRequestsError:
+ description: Too Many Requests
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tnLookupRequestError'
+ examples:
+ mediaType:
+ summary: Example Too Many Requests Error
+ value:
+ message: Too many requests.
+ tnLookupInternalServerError:
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tnLookupRequestError'
+ examples:
+ mediaType:
+ summary: Example Internal Server Error Error
+ value:
+ message: Request has not been passed further.
+ parameters:
+ accountId:
+ in: path
+ name: accountId
+ required: true
+ schema:
+ type: string
+ description: Your Bandwidth Account ID.
+ example: "9900000"
+ requestId:
+ name: requestId
+ in: path
+ required: true
+ schema:
+ type: string
+ description: The phone number lookup request ID from Bandwidth.
+ example: 004223a0-8b17-41b1-bf81-20732adf5590
+ examples:
+ singleNumberRequestExample:
+ summary: Example Number Lookup Request for One Number
+ value:
+ tns:
+ - '+19195551234'
+ multipleNumberRequestExample:
+ summary: Example Number Lookup Request for Multiple Numbers
+ value:
+ tns:
+ - '+19195551234'
+ - '+19195554321'
+ lookupInProgressExample:
+ summary: Example Lookup In Progress Response
+ value:
+ requestId: 004223a0-8b17-41b1-bf81-20732adf5590
+ status: IN_PROGRESS
+ lookupFailedExample:
+ summary: Example Lookup Failed Response
+ value:
+ requestId: 004223a0-8b17-41b1-bf81-20732adf5590
+ status: FAILED
+ failedTelephoneNumbers:
+ - '+191955512345'
+ lookupSingleNumberCompleteExample:
+ summary: Example Single Number Lookup Complete Response
+ value:
+ requestId: 004223a0-8b17-41b1-bf81-20732adf5590
+ status: COMPLETE
+ result:
+ - Response Code: 0
+ Message: NOERROR
+ E.164 Format: '+19195551234'
+ Formatted: (919) 555-1234
+ Country: US
+ Line Type: Mobile
+ Line Provider: Verizon Wireless
+ Mobile Country Code: '310'
+ Mobile Network Code: '010'
+ lookupMultipleNumbersCompleteExample:
+ summary: Example Multiple Numbers Lookup Complete Response
+ value:
+ requestId: 004223a0-8b17-41b1-bf81-20732adf5590
+ status: COMPLETE
+ result:
+ - Response Code: 0
+ Message: NOERROR
+ E.164 Format: '+19195551234'
+ Formatted: (919) 555-1234
+ Country: US
+ Line Type: Mobile
+ Line Provider: Verizon Wireless
+ Mobile Country Code: '310'
+ Mobile Network Code: '010'
+ - Response Code: 0
+ Message: NOERROR
+ E.164 Format: '+19195554321'
+ Formatted: (919) 555-4321
+ Country: US
+ Line Type: Mobile
+ Line Provider: T-Mobile USA
+ Mobile Country Code: '310'
+ Mobile Network Code: '160'
+ lookupMultipleNumbersPartialCompleteExample:
+ summary: Example Multiple Numbers Lookup Partial Complete Response
+ value:
+ requestId: 004223a0-8b17-41b1-bf81-20732adf5590
+ status: PARTIAL_COMPLETE
+ result:
+ - Response Code: 0
+ Message: NOERROR
+ E.164 Format: '+19195551234'
+ Formatted: (919) 555-1234
+ Country: US
+ Line Type: Mobile
+ Line Provider: Verizon Wireless
+ Mobile Country Code: '310'
+ Mobile Network Code: '010'
+ failedTelephoneNumbers:
+ - '+191955512345'
+ lookupSingleNumberCompleteNoInfoExample:
+ summary: Example Single Number Lookup Complete with No Information Response
+ value:
+ requestId: 004223a0-8b17-41b1-bf81-20732adf5590
+ status: COMPLETE
+ result:
+ - Response Code: 3
+ Message: NXDOMAIN
+ E.164 Format: '+19195550000'
+ Formatted: (919) 555-0000
+ Country: US
+ requestBodies:
+ createLookupRequest:
+ description: Phone number lookup request.
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/lookupRequest'
+ examples:
+ singleNumberRequestExample:
+ $ref: '#/components/examples/singleNumberRequestExample'
+ multipleNumberRequestExample:
+ $ref: '#/components/examples/multipleNumberRequestExample'
+ securitySchemes:
+ Basic:
+ type: http
+ scheme: basic
+ description: >-
+ Basic authentication is a simple authentication scheme built into the
+ HTTP protocol. To use it, send your HTTP requests with an Authorization
+ header that contains the word Basic followed by a space and a
+ base64-encoded string `username:password`.
+
+ Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==`
+security:
+ - Basic: []
+tags:
+ - name: Phone Number Lookup
diff --git a/test/fixtures/voice.yml b/test/fixtures/voice.yml
new file mode 100644
index 0000000..c62f26e
--- /dev/null
+++ b/test/fixtures/voice.yml
@@ -0,0 +1,3118 @@
+---
+openapi: 3.0.3
+info:
+ title: Voice
+ version: 4.1.0
+ contact:
+ name: Bandwidth
+ url: https://support.bandwidth.com
+ email: support@bandwidth.com
+ description: |-
+ The API Specification for Bandwidth's Programmable Voice Platform
+
+ ## Base URL
+
+ `https://voice.bandwidth.com/api/v2`
+servers:
+ - url: 'https://voice.bandwidth.com/api/v2'
+ description: Production
+paths:
+ /accounts/{accountId}/calls:
+ post:
+ tags:
+ - Calls
+ summary: Create Call
+ description: |-
+ Creates an outbound phone call.
+
+ All calls are initially queued. Your outbound calls will initiated at a specific dequeueing rate, enabling your application to "fire and forget" when creating calls. Queued calls may not be modified until they are dequeued and placed, but may be removed from your queue on demand.
+
+ Please note: Calls submitted to your queue will be placed approximately in order, but exact ordering is not guaranteed.
+ operationId: createCall
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ requestBody:
+ $ref: "#/components/requestBodies/createCallRequest"
+ responses:
+ '201':
+ $ref: "#/components/responses/createCallResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}:
+ get:
+ tags:
+ - Calls
+ summary: Get Call State Information
+ description: |-
+ Retrieve the current state of a specific call. This information is near-realtime, so it may take a few minutes for your call to be accessible using this endpoint.
+
+ **Note**: Call information is kept for 7 days after the calls are hung up. If you attempt to retrieve information for a call that is older than 7 days, you will get an HTTP 404 response.
+ operationId: getCallState
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getCallStateResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ post:
+ tags:
+ - Calls
+ summary: Update Call
+ description: Interrupts and redirects a call to a different URL that should return a BXML document.
+ operationId: updateCall
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ requestBody:
+ $ref: "#/components/requestBodies/updateCallRequest"
+ responses:
+ '200':
+ description: Call was successfully modified.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '409':
+ $ref: "#/components/responses/voiceConflictError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}/bxml:
+ put:
+ tags:
+ - Calls
+ summary: Update Call BXML
+ description: Interrupts and replaces an active call's BXML document.
+ operationId: updateCallBxml
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ requestBody:
+ $ref: "#/components/requestBodies/updateCallBxmlRequest"
+ responses:
+ '204':
+ description: Call BXML was successfully replaced.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '409':
+ $ref: "#/components/responses/voiceConflictError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences:
+ get:
+ tags:
+ - Conferences
+ summary: Get Conferences
+ description: |-
+ Returns a max of 1000 conferences, sorted by `createdTime` from oldest to newest.
+
+ **NOTE:** If the number of conferences in the account is bigger than `pageSize`, a `Link` header (with format `<{url}>; rel="next"`) will be returned in the response. The url can be used to retrieve the next page of conference records.
+ operationId: listConferences
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/name"
+ - $ref: "#/components/parameters/minCreatedTime"
+ - $ref: "#/components/parameters/maxCreatedTime"
+ - $ref: "#/components/parameters/pageSize"
+ - $ref: "#/components/parameters/pageToken"
+ responses:
+ '200':
+ $ref: "#/components/responses/listConferencesResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences/{conferenceId}:
+ get:
+ tags:
+ - Conferences
+ summary: Get Conference Information
+ description: Returns information about the specified conference.
+ operationId: getConference
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getConferenceResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ post:
+ tags:
+ - Conferences
+ summary: Update Conference
+ description: Update the conference state.
+ operationId: updateConference
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ requestBody:
+ $ref: "#/components/requestBodies/updateConferenceRequest"
+ responses:
+ '204':
+ description: Conference was successfully modified.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences/{conferenceId}/bxml:
+ put:
+ tags:
+ - Conferences
+ summary: Update Conference BXML
+ description: Update the conference BXML document.
+ operationId: updateConferenceBxml
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ requestBody:
+ $ref: "#/components/requestBodies/updateConferenceBxmlRequest"
+ responses:
+ '204':
+ description: Conference successfully modified.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences/{conferenceId}/members/{memberId}:
+ get:
+ tags:
+ - Conferences
+ summary: Get Conference Member
+ description: Returns information about the specified conference member.
+ operationId: getConferenceMember
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ - $ref: "#/components/parameters/memberId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getConferenceMemberResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ put:
+ tags:
+ - Conferences
+ summary: Update Conference Member
+ description: Updates settings for a particular conference member.
+ operationId: updateConferenceMember
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ - $ref: "#/components/parameters/memberId"
+ requestBody:
+ $ref: "#/components/requestBodies/updateConferenceMemberRequest"
+ responses:
+ '204':
+ description: Conference member was successfully modified.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences/{conferenceId}/recordings:
+ get:
+ tags:
+ - Conferences
+ summary: Get Conference Recordings
+ description: Returns a (potentially empty) list of metadata for the recordings
+ that took place during the specified conference.
+ operationId: listConferenceRecordings
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ responses:
+ '200':
+ $ref: "#/components/responses/listConferenceRecordingsResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences/{conferenceId}/recordings/{recordingId}:
+ get:
+ tags:
+ - Conferences
+ summary: Get Conference Recording Information
+ description: Returns metadata for the specified recording.
+ operationId: getConferenceRecording
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getConferenceRecordingResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/conferences/{conferenceId}/recordings/{recordingId}/media:
+ get:
+ tags:
+ - Conferences
+ summary: Download Conference Recording
+ description: Downloads the specified recording file.
+ operationId: downloadConferenceRecording
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/conferenceId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '200':
+ $ref: "#/components/responses/downloadRecordingMediaResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/recordings:
+ get:
+ tags:
+ - Recordings
+ summary: Get Call Recordings
+ description: |-
+ Returns a list of metadata for the recordings associated with the
+ specified account. The list can be filtered by the optional from, to, minStartTime,
+ and maxStartTime arguments. The list is capped at 1000 entries and may be
+ empty if no recordings match the specified criteria.
+ operationId: listAccountCallRecordings
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/to"
+ - $ref: "#/components/parameters/from"
+ - $ref: "#/components/parameters/minStartTime"
+ - $ref: "#/components/parameters/maxStartTime"
+ responses:
+ '200':
+ $ref: "#/components/responses/listCallRecordingsResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}/recording:
+ put:
+ tags:
+ - Recordings
+ summary: Update Recording
+ description: Pause or resume a recording on an active phone call.
+ operationId: updateCallRecordingState
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ requestBody:
+ $ref: "#/components/requestBodies/updateCallRecordingRequest"
+ responses:
+ '200':
+ description: Recording state was successfully modified.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}/recordings:
+ get:
+ tags:
+ - Recordings
+ summary: List Call Recordings
+ description: |-
+ Returns a (potentially empty) list of metadata for the recordings
+ that took place during the specified call.
+ operationId: listCallRecordings
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ responses:
+ '200':
+ $ref: "#/components/responses/listCallRecordingsResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}/recordings/{recordingId}:
+ get:
+ tags:
+ - Recordings
+ summary: Get Call Recording
+ description: Returns metadata for the specified recording.
+ operationId: getCallRecording
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getCallRecordingResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ delete:
+ tags:
+ - Recordings
+ summary: Delete Recording
+ description: |-
+ Delete the recording information, media and transcription.
+
+ Note: After the deletion is requested and a `204` is returned, neither the recording metadata nor the actual media nor its transcription will be accessible anymore. However, the media of the specified recording is not deleted immediately. This deletion process, while transparent and irreversible, can take an additional 24 to 48 hours.
+ operationId: deleteRecording
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '204':
+ description: Recording was deleted.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}/recordings/{recordingId}/media:
+ get:
+ tags:
+ - Recordings
+ summary: Download Recording
+ description: Downloads the specified recording.
+ operationId: downloadCallRecording
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '200':
+ $ref: "#/components/responses/downloadRecordingMediaResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ delete:
+ tags:
+ - Recordings
+ summary: Delete Recording Media
+ description: Deletes the specified recording's media.
+ operationId: deleteRecordingMedia
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '204':
+ description: The recording media was successfully deleted.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/calls/{callId}/recordings/{recordingId}/transcription:
+ get:
+ tags:
+ - Recordings
+ summary: Get Transcription
+ description: |-
+ Downloads the specified transcription.
+
+ If the transcribed recording was multi-channel, then there will be 2 transcripts.
+ The caller/called party transcript will be the first item while [``](/docs/voice/bxml/playAudio) and [``](/docs/voice/bxml/speakSentence) transcript will be the second item.
+ During a [``](/docs/voice/bxml/transfer) the A-leg transcript will be the first item while the B-leg transcript will be the second item.
+ operationId: getCallTranscription
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getCallTranscriptionResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ post:
+ tags:
+ - Recordings
+ summary: Create Transcription Request
+ description: |-
+ Generate the transcription for a specific recording. Transcription
+ can succeed only for recordings of length greater than 500 milliseconds and
+ less than 4 hours.
+ operationId: transcribeCallRecording
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ requestBody:
+ $ref: "#/components/requestBodies/transcribeRecordingRequest"
+ responses:
+ '204':
+ description: Transcription was successfully requested.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ delete:
+ tags:
+ - Recordings
+ summary: Delete Transcription
+ description: |-
+ Deletes the specified recording's transcription.
+
+ Note: After the deletion is requested and a `204` is returned, the transcription will not be accessible anymore. However, it is not deleted immediately. This deletion process, while transparent and irreversible, can take an additional 24 to 48 hours.
+ operationId: deleteCallTranscription
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ - $ref: "#/components/parameters/callId"
+ - $ref: "#/components/parameters/recordingId"
+ responses:
+ '204':
+ description: The transcription was successfully deleted.
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+ /accounts/{accountId}/statistics:
+ get:
+ tags:
+ - Statistics
+ summary: Get Account Statistics
+ description: Returns details about the current state of the account.
+ operationId: getStatistics
+ parameters:
+ - $ref: "#/components/parameters/accountId"
+ responses:
+ '200':
+ $ref: "#/components/responses/getStatisticsResponse"
+ '400':
+ $ref: "#/components/responses/voiceBadRequestError"
+ '401':
+ $ref: "#/components/responses/voiceUnauthorizedError"
+ '403':
+ $ref: "#/components/responses/voiceForbiddenError"
+ '404':
+ $ref: "#/components/responses/voiceNotFoundError"
+ '405':
+ $ref: "#/components/responses/voiceNotAllowedError"
+ '415':
+ $ref: "#/components/responses/voiceUnsupportedMediaTypeError"
+ '429':
+ $ref: "#/components/responses/voiceTooManyRequestsError"
+ '500':
+ $ref: "#/components/responses/voiceInternalServerError"
+components:
+ schemas:
+ callbackMethodEnum:
+ type: string
+ nullable: true
+ default: POST
+ enum:
+ - GET
+ - POST
+ description: |-
+ The HTTP method to use to deliver the callback. GET or POST. Default value is POST.
+ example: POST
+ redirectMethodEnum:
+ type: string
+ nullable: true
+ default: POST
+ enum:
+ - GET
+ - POST
+ description: |-
+ The HTTP method to use for the request to `redirectUrl`. GET
+ or POST. Default value is POST.
Not allowed if `state` is `completed`.
+ example: POST
+ recordingStateEnum:
+ type: string
+ enum:
+ - paused
+ - recording
+ description: |-
+ The recording state. Possible values:
+
+ `paused` to pause an active recording
+
+ `recording` to resume a paused recording
+ example: paused
+ callDirectionEnum:
+ type: string
+ enum:
+ - inbound
+ - outbound
+ description: The direction of the call.
+ example: inbound
+ fileFormatEnum:
+ type: string
+ enum:
+ - mp3
+ - wav
+ description: The format that the recording is stored in.
+ example: wav
+ callStateEnum:
+ nullable: true
+ type: string
+ default: active
+ enum:
+ - active
+ - completed
+ description: |-
+ The call state. Possible values:
`active` to redirect the
+ call (default)
`completed` to hang up the call if it is answered, cancel
+ it if it is an unanswered outbound call, or reject it if it an unanswered
+ inbound call
+ example: completed
+ conferenceStateEnum:
+ nullable: true
+ type: string
+ default: active
+ enum:
+ - active
+ - completed
+ description: Setting the conference state to `completed` ends the conference and ejects all members.
+ example: completed
+ machineDetectionModeEnum:
+ type: string
+ default: async
+ enum:
+ - sync
+ - async
+ description: |-
+ The machine detection mode. If set to 'async', the detection
+ result will be sent in a 'machineDetectionComplete' callback. If set to
+ 'sync', the 'answer' callback will wait for the machine detection to complete
+ and will include its result.
+ example: async
+ createCall:
+ type: object
+ required:
+ - answerUrl
+ - applicationId
+ - from
+ - to
+ properties:
+ to:
+ type: string
+ description: |-
+ The destination to call (must be an E.164 formatted number
+ (e.g. `+15555551212`) or a SIP URI (e.g. `sip:user@server.example`)).
+ example: "+19195551234"
+ from:
+ type: string
+ description: |-
+ A Bandwidth phone number on your account the call should come
+ from (must be in E.164 format, like `+15555551212`, or be one of the following
+ strings: `Restricted`, `Anonymous`, `Private`, or `Unavailable`).
+ example: "+19195554321"
+ uui:
+ nullable: true
+ type: string
+ example: eyJhbGciOiJIUzI1NiJ9.WyJoaSJd.-znkjYyCkgz4djmHUPSXl9YrJ6Nix_XvmlwKGFh5ERM;encoding=jwt,aGVsbG8gd29ybGQ=;encoding=base64
+ description: |-
+ A comma-separated list of 'User-To-User' headers to be sent
+ in the INVITE when calling a SIP URI. Each value must end with an 'encoding'
+ parameter as described in RFC
+ 7433. Only 'jwt' and 'base64' encodings are allowed. The entire value
+ cannot exceed 350 characters, including parameters and separators.
+ applicationId:
+ type: string
+ description: The id of the application associated with the `from` number.
+ example: 1234-qwer-5679-tyui
+ answerUrl:
+ type: string
+ format: uri
+ description: |-
+ The full URL to send the Answer
+ event to when the called party answers. This endpoint should return the
+ first BXML document to be executed in the
+ call.
+
+ Must use `https` if specifying `username` and `password`.
+ maxLength: 2048
+ example: https://www.myCallbackServer.example/webhooks/answer
+ answerMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ username:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ password:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ answerFallbackUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: |-
+ A fallback url which, if provided, will be used to retry the
+ `answer` webhook delivery in case `answerUrl` fails to respond
+
+ Must use `https` if specifying `fallbackUsername` and `fallbackPassword`.
+ maxLength: 2048
+ example: https://www.myFallbackServer.example/webhooks/answer
+ answerFallbackMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ fallbackUsername:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ fallbackPassword:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ disconnectUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: The URL to send the Disconnect
+ event to when the call ends. This event does not expect a BXML response.
+ maxLength: 2048
+ example: https://www.myCallbackServer.example/webhooks/disconnect
+ disconnectMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ callTimeout:
+ nullable: true
+ type: number
+ format: double
+ description: |-
+ The timeout (in seconds) for the callee to answer the call
+ after it starts ringing. If the call does not start ringing within 30s,
+ the call will be cancelled regardless of this value. Can be any numeric
+ value (including decimals) between 1 and 300.
+ minimum: 1.0
+ maximum: 300.0
+ default: 30.0
+ example: 30.0
+ callbackTimeout:
+ nullable: true
+ type: number
+ format: double
+ description: |-
+ This is the timeout (in seconds) to use when delivering webhooks
+ for the call. Can be any numeric value (including decimals) between 1
+ and 25.
+ minimum: 1.0
+ maximum: 25.0
+ default: 15.0
+ example: 15.0
+ machineDetection:
+ $ref: "#/components/schemas/machineDetectionConfiguration"
+ priority:
+ nullable: true
+ type: integer
+ minimum: 1
+ maximum: 5
+ default: 5
+ description: |-
+ The priority of this call over other calls from your account. For example, if during a call
+ your application needs to place a new call and bridge it with the current
+ call, you might want to create the call with priority 1 so that it will
+ be the next call picked off your queue, ahead of other less time sensitive
+ calls. A lower value means higher priority, so a priority 1 call takes
+ precedence over a priority 2 call.
+ example: 5
+ tag:
+ nullable: true
+ type: string
+ description: |-
+ A custom string that will be sent with all webhooks for this
+ call unless overwritten by a future ``
+ verb or `tag` attribute on another verb, or cleared.
+
+ May be cleared by setting `tag=""`
+
+ Max length 256 characters.
+ maxLength: 256
+ example: arbitrary text here
+ createCallResponse:
+ type: object
+ required:
+ - accountId
+ - answerMethod
+ - answerUrl
+ - applicationId
+ - callId
+ - callUrl
+ - disconnectMethod
+ - from
+ - to
+ properties:
+ applicationId:
+ type: string
+ example: "04e88489-df02-4e34-a0ee-27a91849555f"
+ description: The id of the application associated with the `from` number.
+ accountId:
+ type: string
+ example: "9900000"
+ description: The bandwidth account ID associated with the call.
+ callId:
+ type: string
+ example: "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ description: Programmable Voice API Call ID.
+ to:
+ type: string
+ example: "+19195551234"
+ description: Recipient of the outgoing call.
+ from:
+ type: string
+ example: "+19195554321"
+ description: Phone number that created the outbound call.
+ enqueuedTime:
+ nullable: true
+ type: string
+ format: date-time
+ description: The time at which the call was accepted into the queue.
+ example: "2022-06-16T13:15:07.160Z"
+ callUrl:
+ type: string
+ format: uri
+ example: "https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ description: The URL to update this call's state.
+ callTimeout:
+ type: number
+ format: double
+ example: 30.0
+ description: The timeout (in seconds) for the callee to answer the call after it starts ringing.
+ callbackTimeout:
+ type: number
+ format: double
+ example: 15.0
+ description: This is the timeout (in seconds) to use when delivering webhooks for the call.
+ tag:
+ nullable: true
+ type: string
+ example: "My custom tag value"
+ description: Custom tag value.
+ answerMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ answerUrl:
+ type: string
+ format: uri
+ example: "https://myServer.example/bandwidth/webhooks/answer"
+ description: URL to deliver the `answer` event webhook.
+ answerFallbackMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ answerFallbackUrl:
+ nullable: true
+ type: string
+ format: uri
+ example: "https://myFallbackServer.example/bandwidth/webhooks/answer"
+ description: Fallback URL to deliver the `answer` event webhook.
+ disconnectMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ disconnectUrl:
+ nullable: true
+ type: string
+ format: uri
+ example: "https://myServer.example/bandwidth/webhooks/disconnect"
+ description: URL to deliver the `disconnect` event webhook.
+ username:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ password:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ fallbackUsername:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ fallbackPassword:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ priority:
+ nullable: true
+ type: integer
+ example: 5
+ description: The priority of this call over other calls from your account.
+ callState:
+ type: object
+ properties:
+ applicationId:
+ type: string
+ description: The application id associated with the call.
+ example: "04e88489-df02-4e34-a0ee-27a91849555f"
+ accountId:
+ type: string
+ description: The account id associated with the call.
+ example: "9900000"
+ callId:
+ type: string
+ description: The programmable voice API call ID.
+ example: "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ parentCallId:
+ nullable: true
+ type: string
+ description: |-
+ The A-leg call id, set only if this call is the B-leg of a [``](/docs/voice/bxml/transfer).
+ example: "c-25ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ to:
+ type: string
+ description: The phone number that received the call, in E.164 format (e.g.
+ +15555555555), or if the call was to a SIP URI, the SIP URI.
+ example: "+19195551234"
+ from:
+ type: string
+ description: The phone number that made the call, in E.164 format (e.g.
+ +15555555555).
+ example: "19195554321"
+ direction:
+ $ref: "#/components/schemas/callDirectionEnum"
+ state:
+ description: |-
+ The current state of the call. Current possible values are
+ `queued`, `initiated`, `answered` and `disconnected`. Additional states
+ may be added in the future, so your application must be tolerant of unknown
+ values.
+ type: string
+ example: "disconnected"
+ stirShaken:
+ nullable: true
+ type: object
+ description: |-
+ For inbound calls, the Bandwidth STIR/SHAKEN implementation will verify the information provided in the inbound invite request `Identity` header.
+ The verification status is stored in the call state `stirShaken` property as follows.
+
+ | Property | Description |
+ |:------------------|:------------|
+ | verstat | (optional) The verification status indicating whether the verification was successful or not. Possible values are `TN-Verification-Passed` or `TN-Verification-Failed`. |
+ | attestationIndicator | (optional) The attestation level verified by Bandwidth. Possible values are `A` (full), `B` (partial) or `C` (gateway). |
+ | originatingId | (optional) A unique origination identifier. |
+
+ Note that these are common properties but that the `stirShaken` object is free form and can contain other key-value pairs.
+
+ More information: [Understanding STIR/SHAKEN](https://www.bandwidth.com/regulations/stir-shaken).
+ additionalProperties:
+ type: string
+ example:
+ verstat: TN-Verification-Passed
+ attestationIndicator: A
+ originatingId: abc123
+ identity:
+ nullable: true
+ type: string
+ description: |-
+ The value of the `Identity` header from the inbound invite
+ request. Only present for inbound calls and if the account is configured
+ to forward this header.
+ example: "eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9idy1zaGFrZW4tY2VydC1wdWIuczMuYW1hem9uYXdzLmNvbS9iYW5kd2lkdGgtc2hha2VuLWNlcnRfMjAyMzA3MTYucGVtIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxOTg0MjgyMDI4MCJdfSwiaWF0IjoxNjU2NTM0MzM2LCJvcmlnIjp7InRuIjoiMTkxOTQ0NDI2ODMifSwib3JpZ2lkIjoiNDk0NTlhOGEtNDJmNi0zNTFjLTkzNjEtYWRmNTdhOWUwOGNhIn0.56un9sRw_uH-sbJvnUsqdevlVxbOVjn8MVlGTlBMicjaZuRRwxfiNp-C9zYCMKTTCbc-QdYPN05F61XNVN4D3w;info=;alg=ES256;ppt=shaken"
+ enqueuedTime:
+ nullable: true
+ type: string
+ format: date-time
+ description: The time this call was placed in queue.
+ example: "2022-06-16T13:15:07.160Z"
+ startTime:
+ nullable: true
+ type: string
+ format: date-time
+ description: The time the call was initiated, in ISO 8601 format. `null`
+ if the call is still in your queue.
+ example: "2022-06-16T13:15:07.160Z"
+ answerTime:
+ nullable: true
+ type: string
+ format: date-time
+ description: Populated once the call has been answered, with the time in
+ ISO 8601 format.
+ example: "2022-06-16T13:15:18.126Z"
+ endTime:
+ nullable: true
+ type: string
+ format: date-time
+ description: Populated once the call has ended, with the time in ISO 8601
+ format.
+ example: "2022-06-16T13:15:18.314Z"
+ disconnectCause:
+ nullable: true
+ type: string
+ description: |-
+ | Cause | Description |
+ |:------|:------------|
+ | `hangup`| One party hung up the call, a [``](../../bxml/verbs/hangup.md) verb was executed, or there was no more BXML to execute; it indicates that the call ended normally. |
+ | `busy` | Callee was busy. |
+ | `timeout` | Call wasn't answered before the `callTimeout` was reached. |
+ | `cancel` | Call was cancelled by its originator while it was ringing. |
+ | `rejected` | Call was rejected by the callee. |
+ | `callback-error` | BXML callback couldn't be delivered to your callback server. |
+ | `invalid-bxml` | Invalid BXML was returned in response to a callback. |
+ | `application-error` | An unsupported action was tried on the call, e.g. trying to play a .ogg audio. |
+ | `account-limit` | Account rate limits were reached. |
+ | `node-capacity-exceeded` | System maximum capacity was reached. |
+ | `error` | Some error not described in any of the other causes happened on the call. |
+ | `unknown` | Unknown error happened on the call. |
+
+ Note: This list is not exhaustive and other values can appear in the future.
+ errorMessage:
+ nullable: true
+ type: string
+ description: Populated only if the call ended with an error, with text explaining
+ the reason.
+ example: null
+ errorId:
+ nullable: true
+ type: string
+ description: Populated only if the call ended with an error, with a Bandwidth
+ internal id that references the error event.
+ example: null
+ lastUpdate:
+ type: string
+ format: date-time
+ description: The last time the call had a state update, in ISO 8601 format.
+ example: "2022-06-16T13:15:18.314Z"
+ updateCall:
+ type: object
+ properties:
+ state:
+ $ref: "#/components/schemas/callStateEnum"
+ redirectUrl:
+ description: |-
+ The URL to send the [Redirect](/docs/voice/bxml/redirect) event
+ to which will provide new BXML.
+
+ Required if `state` is `active`.
+
+ Not allowed if `state` is `completed`.
+ nullable: true
+ type: string
+ format: uri
+ example: "https://myServer.example/bandwidth/webhooks/redirect"
+ redirectMethod:
+ $ref: "#/components/schemas/redirectMethodEnum"
+ username:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ password:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ redirectFallbackUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: |-
+ A fallback url which, if provided, will be used to retry the
+ redirect callback delivery in case `redirectUrl` fails to respond.
+ example: "https://myFallbackServer.example/bandwidth/webhooks/redirect"
+ redirectFallbackMethod:
+ $ref: "#/components/schemas/redirectMethodEnum"
+ fallbackUsername:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ fallbackPassword:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ tag:
+ nullable: true
+ type: string
+ description: |-
+ A custom string that will be sent with this and all future
+ callbacks unless overwritten by a future `tag` attribute or [``](/docs/voice/bxml/tag)
+ verb, or cleared.
+
+ May be cleared by setting `tag=""`.
+
+ Max length 256 characters.
+
+ Not allowed if `state` is `completed`.
+ maxLength: 256
+ example: My Custom Tag
+ updateCallRecording:
+ type: object
+ required:
+ - state
+ properties:
+ state:
+ $ref: '#/components/schemas/recordingStateEnum'
+ accountStatistics:
+ type: object
+ properties:
+ currentCallQueueSize:
+ type: integer
+ description: The number of calls currently enqueued.
+ example: 0
+ maxCallQueueSize:
+ type: integer
+ description: The maximum size of the queue before outgoing calls start being rejected.
+ example: 900
+ callRecordingMetadata:
+ type: object
+ properties:
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ callId:
+ $ref: '#/components/schemas/callId'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ recordingId:
+ $ref: '#/components/schemas/recordingId'
+ to:
+ $ref: '#/components/schemas/to'
+ from:
+ $ref: '#/components/schemas/from'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ duration:
+ $ref: '#/components/schemas/duration'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ channels:
+ $ref: '#/components/schemas/channels'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ fileFormat:
+ $ref: '#/components/schemas/fileFormatEnum'
+ status:
+ $ref: '#/components/schemas/status'
+ mediaUrl:
+ $ref: '#/components/schemas/mediaUrl'
+ transcription:
+ $ref: "#/components/schemas/transcriptionMetadata"
+ conference:
+ type: object
+ properties:
+ id:
+ type: string
+ description: The Bandwidth-generated conference ID.
+ example: "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"
+ name:
+ type: string
+ description: The name of the conference, as specified by your application.
+ example: "my-conference-name"
+ createdTime:
+ type: string
+ format: date-time
+ description: The time the conference was initiated, in ISO 8601 format.
+ example: "2022-06-17T22:19:40.375Z"
+ completedTime:
+ nullable: true
+ type: string
+ format: date-time
+ description: The time the conference was terminated, in ISO 8601 format.
+ example: "2022-06-17T22:20:00.000Z"
+ conferenceEventUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: The URL to send the conference-related events.
+ example: "https://myServer.example/bandwidth/webhooks/conferenceEvent"
+ conferenceEventMethod:
+ $ref: '#/components/schemas/callbackMethodEnum'
+ tag:
+ nullable: true
+ type: string
+ description: The custom string attached to the conference that will be sent
+ with callbacks.
+ example: "my custom tag"
+ activeMembers:
+ type: array
+ nullable: true
+ items:
+ $ref: "#/components/schemas/conferenceMember"
+ description: |-
+ A list of active members of the conference. Omitted if this
+ is a response to the [Get Conferences endpoint](/apis/voice#tag/Conferences/operation/listConferences).
+ updateConference:
+ type: object
+ properties:
+ status:
+ $ref: "#/components/schemas/conferenceStateEnum"
+ redirectUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: |-
+ The URL to send the [conferenceRedirect](/docs/voice/webhooks/conferenceRedirect)
+ event which will provide new BXML. Not allowed if `state` is `completed`,
+ but required if `state` is `active`.
+ example: "https://myServer.example/bandwidth/webhooks/conferenceRedirect"
+ redirectMethod:
+ $ref: "#/components/schemas/redirectMethodEnum"
+ username:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ password:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ redirectFallbackUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: |-
+ A fallback url which, if provided, will be used to retry the
+ `conferenceRedirect` webhook delivery in case `redirectUrl` fails to respond. Not
+ allowed if `state` is `completed`.
+ example: "https://myFallbackServer.example/bandwidth/webhooks/conferenceRedirect"
+ redirectFallbackMethod:
+ $ref: "#/components/schemas/redirectMethodEnum"
+ fallbackUsername:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ fallbackPassword:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ conferenceMember:
+ type: object
+ properties:
+ callId:
+ $ref: '#/components/schemas/callId'
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ memberUrl:
+ type: string
+ description: |-
+ A URL that may be used to retrieve information about or update
+ the state of this conference member. This is the URL of this member's
+ [Get Conference Member](/apis/voice/#operation/getConferenceMember) endpoint
+ and [Modify Conference Member](/apis/voice/#operation/updateConferenceMember)
+ endpoint.
+ example: "https://voice.bandwidth.com/api/v2/accounts/9900000/conferences/conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9/members/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ mute:
+ type: boolean
+ description: |-
+ Whether or not this member is currently muted. Members who are muted are still able to hear other participants.
+
+ If used in a PUT request, updates this member's mute status. Has no effect if omitted.
+ example: false
+ hold:
+ type: boolean
+ description: |-
+ Whether or not this member is currently on hold. Members who are on hold are not able to hear or speak in the conference.
+
+ If used in a PUT request, updates this member's hold status. Has no effect if omitted.
+ example: false
+ callIdsToCoach:
+ nullable: true
+ type: array
+ items:
+ type: string
+ description: |-
+ If this member had a value set for `callIdsToCoach` in its [Conference](/docs/voice/bxml/conference) verb or this list was added with a previous PUT request to modify the member, this is that list of calls.
+
+ If present in a PUT request, modifies the calls that this member is coaching. Has no effect if omitted. See the documentation for the [Conference](/docs/voice/bxml/conference) verb for more details about coaching.
+ Note that this will not add the matching calls to the conference; each call must individually execute a Conference verb to join.
+ example:
+ - "c-25ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ updateConferenceMember:
+ type: object
+ properties:
+ mute:
+ type: boolean
+ description: |-
+ Whether or not this member is currently muted. Members who are muted are still able to hear other participants.
+
+ Updates this member's mute status. Has no effect if omitted.
+ example: false
+ hold:
+ type: boolean
+ description: |-
+ Whether or not this member is currently on hold. Members who are on hold are not able to hear or speak in the conference.
+
+ Updates this member's hold status. Has no effect if omitted.
+ example: false
+ callIdsToCoach:
+ nullable: true
+ type: array
+ items:
+ type: string
+ description: |-
+ If this member had a value set for `callIdsToCoach` in its [Conference](/docs/voice/bxml/conference) verb or this list was added with a previous PUT request to modify the member, this is that list of calls.
+
+ Modifies the calls that this member is coaching. Has no effect if omitted. See the documentation for the [Conference](/docs/voice/bxml/conference) verb for more details about coaching.
+
+ Note that this will not add the matching calls to the conference; each call must individually execute a Conference verb to join.
+ example:
+ - "c-25ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ conferenceRecordingMetadata:
+ type: object
+ properties:
+ accountId:
+ $ref: "#/components/schemas/accountId"
+ conferenceId:
+ $ref: "#/components/schemas/conferenceId"
+ name:
+ $ref: "#/components/schemas/name"
+ recordingId:
+ $ref: "#/components/schemas/recordingId"
+ duration:
+ $ref: "#/components/schemas/duration"
+ channels:
+ $ref: "#/components/schemas/channels"
+ startTime:
+ $ref: "#/components/schemas/startTime"
+ endTime:
+ $ref: "#/components/schemas/endTime"
+ fileFormat:
+ $ref: "#/components/schemas/fileFormatEnum"
+ status:
+ $ref: '#/components/schemas/status'
+ mediaUrl:
+ $ref: "#/components/schemas/mediaUrl"
+ machineDetectionConfiguration:
+ type: object
+ description: |-
+ The machine detection request used to perform machine detection on the call.
+ properties:
+ mode:
+ $ref: "#/components/schemas/machineDetectionModeEnum"
+ detectionTimeout:
+ nullable: true
+ type: number
+ format: double
+ description: |-
+ The timeout used for the whole operation, in seconds. If no
+ result is determined in this period, a callback with a `timeout` result
+ is sent.
+ default: 15
+ example: 15
+ silenceTimeout:
+ nullable: true
+ type: number
+ format: double
+ description: If no speech is detected in this period, a callback with a 'silence' result is sent.
+ default: 10
+ example: 10
+ speechThreshold:
+ nullable: true
+ type: number
+ format: double
+ description: |-
+ When speech has ended and a result couldn't be determined based
+ on the audio content itself, this value is used to determine if the speaker
+ is a machine based on the speech duration. If the length of the speech
+ detected is greater than or equal to this threshold, the result will be
+ 'answering-machine'. If the length of speech detected is below this threshold,
+ the result will be 'human'.
+ default: 10
+ example: 10
+ speechEndThreshold:
+ nullable: true
+ type: number
+ format: double
+ description: Amount of silence (in seconds) before assuming the callee has finished speaking.
+ default: 5
+ example: 5
+ machineSpeechEndThreshold:
+ nullable: true
+ type: number
+ format: double
+ description: |-
+ When an answering machine is detected, the amount of silence (in seconds) before assuming the message has finished playing.
+ If not provided it will default to the speechEndThreshold value.
+ example: 5
+ delayResult:
+ nullable: true
+ type: boolean
+ description: |-
+ If set to 'true' and if an answering machine is detected, the
+ 'answering-machine' callback will be delayed until the machine is done
+ speaking, or an end of message tone is detected, or until the 'detectionTimeout' is exceeded. If false, the 'answering-machine'
+ result is sent immediately.
+ default: false
+ example: false
+ callbackUrl:
+ nullable: true
+ description: |-
+ The URL to send the 'machineDetectionComplete' webhook when the detection is completed. Only for 'async' mode.
+ type: string
+ format: uri
+ maxLength: 2048
+ example: "https://myServer.example/bandwidth/webhooks/machineDetectionComplete"
+ callbackMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ username:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ password:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ fallbackUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: |-
+ A fallback URL which, if provided, will be used to retry the
+ machine detection complete webhook delivery in case `callbackUrl` fails
+ to respond
+ maxLength: 2048
+ example: "https://myFallbackServer.example/bandwidth/webhooks/machineDetectionComplete"
+ fallbackMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ fallbackUsername:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ fallbackPassword:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ transcribeRecording:
+ type: object
+ properties:
+ callbackUrl:
+ type: string
+ format: uri
+ description: |-
+ The URL to send the [TranscriptionAvailable](/docs/voice/webhooks/transcriptionAvailable)
+ event to. You should not include sensitive or personally-identifiable
+ information in the callbackUrl field! Always use the proper username and
+ password fields for authorization.
+ example: "https://myServer.example/bandwidth/webhooks/transcriptionAvailable"
+ callbackMethod:
+ $ref: "#/components/schemas/callbackMethodEnum"
+ username:
+ type: string
+ nullable: true
+ description: Basic auth username.
+ maxLength: 1024
+ example: mySecretUsername
+ password:
+ type: string
+ nullable: true
+ description: Basic auth password.
+ maxLength: 1024
+ example: mySecretPassword1!
+ tag:
+ $ref: "#/components/schemas/tag"
+ callbackTimeout:
+ nullable: true
+ type: number
+ format: double
+ minimum: 1.0
+ maximum: 25.0
+ default: 15.0
+ description: |-
+ This is the timeout (in seconds) to use when delivering the
+ webhook to `callbackUrl`. Can be any numeric value (including decimals)
+ between 1 and 25.
+ example: 5.5
+ detectLanguage:
+ type: boolean
+ nullable: true
+ description: A boolean value to indicate that the recording may not be in English, and the
+ transcription service will need to detect the dominant language the recording is in and transcribe accordingly.
+ Current supported languages are English, French, and Spanish.
+ default: false
+ example: true
+ transcriptionList:
+ type: object
+ properties:
+ transcripts:
+ type: array
+ items:
+ $ref: "#/components/schemas/transcription"
+ transcriptionMetadata:
+ nullable: true
+ type: object
+ description: If the recording was transcribed, metadata about the transcription
+ properties:
+ id:
+ type: string
+ description: The unique transcription ID
+ example: t-387bd648-18f3-4823-9d16-746bca0003c9
+ status:
+ $ref: '#/components/schemas/status'
+ completedTime:
+ type: string
+ description: The time that the transcription was completed
+ example: '2022-06-13T18:46:29.715Z'
+ url:
+ type: string
+ format: uri
+ description: The URL of the [transcription](#operation/getCallTranscription)
+ example: https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85/recordings/r-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85/transcription
+ voiceApiError:
+ type: object
+ properties:
+ type:
+ type: string
+ description:
+ type: string
+ id:
+ nullable: true
+ type: string
+ answerCallback:
+ type: object
+ description: The Answer event is sent to the answerUrl specified in the createCall request when an outbound call is answered.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ machineDetectionResult:
+ $ref: '#/components/schemas/machineDetectionResult'
+ bridgeCompleteCallback:
+ type: object
+ description: If the target call leaves the , then this callback is sent to the bridgeCompleteUrl, and the BXML returned in it is executed on the call. If this webhook is sent, the Bridge Target Complete webhook is NOT sent. This callback is also sent if any problem occurs that prevents the calls to be bridged.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ cause:
+ $ref: '#/components/schemas/cause'
+ errorMessage:
+ $ref: '#/components/schemas/errorMessage'
+ errorId:
+ $ref: '#/components/schemas/errorId'
+ bridgeTargetCompleteCallback:
+ type: object
+ description: If the originating call leaves the , then this callback is sent to the bridgeTargetCompleteUrl, and the BXML returned in it is executed on the target call. If this webhook is sent, the Bridge Complete webhook is NOT sent.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ conferenceCreatedCallback:
+ type: object
+ description: "The Conference Created event is fired whenever a new conference that specified a callbackUrl is created. The response may be either empty or a BXML document. Only the following verbs are valid for conferences: PlayAudio, SpeakSentence, StartRecording, StopRecording, PauseRecording, ResumeRecording. Audio verbs will be heard by all members of the conference. Recordings capture audio from all members who are not muted or on hold, as well as any audio verbs that are played into the conference."
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ name:
+ $ref: '#/components/schemas/name'
+ tag:
+ $ref: '#/components/schemas/tag'
+ conferenceRedirectCallback:
+ type: object
+ description: "The Conference Redirect event is fired whenever an existing conference is modified via a POST request made to the /conferences/{conferenceId} endpoint. The response may be either empty or a BXML document. Only the following verbs are valid for conferences: PlayAudio, SpeakSentence, StartRecording, StopRecording, PauseRecording, ResumeRecording. Audio verbs will be heard by all members of the conference. Recordings capture audio from all members who are not muted or on hold, as well as any audio verbs that are played into the conference."
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ name:
+ $ref: '#/components/schemas/name'
+ tag:
+ $ref: '#/components/schemas/tag'
+ conferenceMemberJoinCallback:
+ type: object
+ description: "The Conference Member Join event is fired whenever a caller joins a conference that specified a callbackUrl. The response may be either empty or a BXML document. Only the following verbs are valid for conferences: PlayAudio, SpeakSentence, StartRecording, StopRecording, PauseRecording, ResumeRecording. Audio verbs will be heard by all members of the conference. Recordings capture audio from all members who are not muted or on hold, as well as any audio verbs that are played into the conference."
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ name:
+ $ref: '#/components/schemas/name'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ callId:
+ $ref: '#/components/schemas/callId'
+ tag:
+ $ref: '#/components/schemas/tag'
+ conferenceMemberExitCallback:
+ type: object
+ description: "The Conference Member Exit event is fired whenever a caller exits a conference that specified a callbackUrl. The response may be either empty or a BXML document. Only the following verbs are valid for conferences: PlayAudio, SpeakSentence, StartRecording, StopRecording, PauseRecording, ResumeRecording. Audio verbs will be heard by all members of the conference. Recordings capture audio from all members who are not muted or on hold, as well as any audio verbs that are played into the conference."
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ name:
+ $ref: '#/components/schemas/name'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ callId:
+ $ref: '#/components/schemas/callId'
+ tag:
+ $ref: '#/components/schemas/tag'
+ conferenceCompletedCallback:
+ type: object
+ description: The Conference Completed event is fired when the last member leaves the conference. The response to this event may not contain BXML.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ name:
+ $ref: '#/components/schemas/name'
+ tag:
+ $ref: '#/components/schemas/tag'
+ conferenceRecordingAvailableCallback:
+ type: object
+ description: The Conference Recording Available event is sent after a conference recording has been processed. It indicates that the recording is available for download.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ conferenceId:
+ $ref: '#/components/schemas/conferenceId'
+ name:
+ $ref: '#/components/schemas/name'
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ recordingId:
+ $ref: '#/components/schemas/recordingId'
+ channels:
+ $ref: '#/components/schemas/channels'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ duration:
+ $ref: '#/components/schemas/duration'
+ fileFormat:
+ $ref: "#/components/schemas/fileFormatEnum"
+ mediaUrl:
+ $ref: '#/components/schemas/mediaUrl'
+ tag:
+ $ref: '#/components/schemas/tag'
+ status:
+ $ref: '#/components/schemas/status'
+ disconnectCallback:
+ type: object
+ description: The Disconnect event is fired when a call ends, for any reason.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ callId:
+ $ref: '#/components/schemas/callId'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ cause:
+ $ref: '#/components/schemas/cause'
+ errorMessage:
+ $ref: '#/components/schemas/errorMessage'
+ errorId:
+ $ref: '#/components/schemas/errorId'
+ tag:
+ $ref: '#/components/schemas/tag'
+ dtmfCallback:
+ type: object
+ description: The DTMF event is sent for every digit detected after a verb is executed. You may not respond to this event with BXML.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ callId:
+ $ref: '#/components/schemas/callId'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ digit:
+ $ref: '#/components/schemas/digit'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ tag:
+ $ref: '#/components/schemas/tag'
+ gatherCallback:
+ type: object
+ description: The gather event is sent after a verb is executed. Its purpose is to report the gathered digits to the calling application.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ digits:
+ $ref: '#/components/schemas/digits'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ terminatingDigit:
+ $ref: '#/components/schemas/terminatingDigit'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ tag:
+ $ref: '#/components/schemas/tag'
+ initiateCallback:
+ type: object
+ description: The Initiate event is fired when an inbound call is received for a Telephone Number on your Account. It is sent to the URL specified in the application associated with the location (sip-peer) that the called telephone number belongs to.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ diversion:
+ $ref: "#/components/schemas/diversion"
+ stirShaken:
+ $ref: "#/components/schemas/stirShaken"
+ machineDetectionCompleteCallback:
+ type: object
+ description: "This event is sent to the url informed when requesting a machine detection operation. It contains the machine detection operation result, which can be: human, answering-machine, silence, timeout, error. This event is not sent when sync answering machine detection mode is chosen."
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ machineDetectionResult:
+ $ref: '#/components/schemas/machineDetectionResult'
+ recordingCompleteCallback:
+ type: object
+ description: The Record Complete event is sent after a verb has executed if the call is still active. The BXML returned by this callback is executed next. When the recording is available for download, a Recording Available event will be sent.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ recordingId:
+ $ref: '#/components/schemas/recordingId'
+ mediaUrl:
+ $ref: '#/components/schemas/mediaUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ duration:
+ $ref: '#/components/schemas/duration'
+ fileFormat:
+ $ref: "#/components/schemas/fileFormatEnum"
+ channels:
+ $ref: '#/components/schemas/channels'
+ tag:
+ $ref: '#/components/schemas/tag'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ recordingAvailableCallback:
+ type: object
+ description: The Recording Available event is sent after a recording has been processed. It indicates that the recording is available for download.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ recordingId:
+ $ref: '#/components/schemas/recordingId'
+ mediaUrl:
+ $ref: '#/components/schemas/mediaUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ duration:
+ $ref: '#/components/schemas/duration'
+ fileFormat:
+ $ref: "#/components/schemas/fileFormatEnum"
+ channels:
+ $ref: '#/components/schemas/status'
+ tag:
+ $ref: '#/components/schemas/tag'
+ status:
+ $ref: '#/components/schemas/status'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ redirectCallback:
+ type: object
+ description: The Redirect event is fired when a verb is executed. Its purpose is to get the next set of verbs from the calling application.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ transcriptionAvailableCallback:
+ type: object
+ description: The Transcription Available event is sent when the recording transcription is available to be downloaded.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ mediaUrl:
+ $ref: '#/components/schemas/mediaUrl'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ recordingId:
+ $ref: '#/components/schemas/recordingId'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ duration:
+ $ref: '#/components/schemas/duration'
+ fileFormat:
+ $ref: "#/components/schemas/fileFormatEnum"
+ tag:
+ $ref: '#/components/schemas/tag'
+ transcription:
+ $ref: "#/components/schemas/transcription"
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ transferAnswerCallback:
+ type: object
+ description: "When processing a verb, this event is sent when a called party (B-leg) answers. The event is sent to the endpoint specified in the transferAnswerUrl attribute of the tag that answered. BXML returned by this callback will be executed for the called party only. After all BXML has been executed, the called party will be bridged to the original call. Most BXML verbs are allowed in response to a transferAnswer event, but some are not allowed."
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ transferCompleteCallback:
+ type: object
+ description: This event is sent to the transferCompleteUrl of the A-leg's verb when the transferred call (B-leg) completes. In a simultaneous ringing scenario, only one B-leg succeeds and this event corresponds to that successful leg. If none of the calls were answered, the transferComplete event corresponds to one of the legs.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ cause:
+ $ref: '#/components/schemas/cause'
+ errorMessage:
+ $ref: '#/components/schemas/errorMessage'
+ errorId:
+ $ref: '#/components/schemas/errorId'
+ transferDisconnectCallback:
+ type: object
+ description: This event is sent to the transferDisconnectUrl of each tag when its respective call leg ends for any reason. The event is sent in the normal case, when the transferred leg is answered and later hung up, but is also sent if the new leg was never answered in the first place, if it was rejected, and if the original call leg hung up before the transferred leg.
+ properties:
+ eventType:
+ $ref: '#/components/schemas/eventType'
+ eventTime:
+ $ref: "#/components/schemas/eventTime"
+ accountId:
+ $ref: '#/components/schemas/accountId'
+ applicationId:
+ $ref: '#/components/schemas/applicationId'
+ from:
+ $ref: '#/components/schemas/from'
+ to:
+ $ref: '#/components/schemas/to'
+ direction:
+ $ref: '#/components/schemas/callDirectionEnum'
+ callId:
+ $ref: '#/components/schemas/callId'
+ callUrl:
+ $ref: '#/components/schemas/callUrl'
+ parentCallId:
+ $ref: '#/components/schemas/parentCallId'
+ enqueuedTime:
+ $ref: '#/components/schemas/enqueuedTime'
+ startTime:
+ $ref: '#/components/schemas/startTime'
+ answerTime:
+ $ref: '#/components/schemas/answerTime'
+ endTime:
+ $ref: '#/components/schemas/endTime'
+ tag:
+ $ref: '#/components/schemas/tag'
+ transferCallerId:
+ $ref: '#/components/schemas/transferCallerId'
+ transferTo:
+ $ref: '#/components/schemas/transferTo'
+ cause:
+ $ref: '#/components/schemas/cause'
+ errorMessage:
+ $ref: '#/components/schemas/errorMessage'
+ errorId:
+ $ref: '#/components/schemas/errorId'
+ eventType:
+ type: string
+ description: "The event type, value can be one of the following: answer, bridgeComplete, bridgeTargetComplete, conferenceCreated, conferenceRedirect, conferenceMemberJoin, conferenceMemberExit, conferenceCompleted, conferenceRecordingAvailable, disconnect, dtmf, gather, initiate, machineDetectionComplete, recordingComplete, recordingAvailable, redirect, transcriptionAvailable, transferAnswer, transferComplete, transferDisconnect."
+ example: bridgeComplete
+ eventTime:
+ type: string
+ description: The approximate UTC date and time when the event was generated by the Bandwidth server, in ISO 8601 format. This may not be exactly the time of event execution.
+ accountId:
+ type: string
+ description: The user account associated with the call.
+ example: "920012"
+ applicationId:
+ type: string
+ description: The id of the application associated with the call.
+ example: "04e88489-df02-4e34-a0ee-27a91849555f"
+ to:
+ type: string
+ description: The phone number that received the call, in E.164 format (e.g. +15555555555).
+ example: "+15555555555"
+ from:
+ type: string
+ description: "The provided identifier of the caller: can be a phone number in E.164 format (e.g. +15555555555) or one of Private, Restricted, Unavailable, or Anonymous."
+ example: "+15555555555"
+ conferenceId:
+ type: string
+ description: The unique, Bandwidth-generated ID of the conference that was
+ recorded
+ example: "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"
+ name:
+ type: string
+ description: The user-specified name of the conference that was recorded
+ example: "my-conference-name"
+ recordingId:
+ type: string
+ description: The unique ID of this recording
+ example: "r-fbe05094-9fd2afe9-bf5b-4c68-820a-41a01c1c5833"
+ duration:
+ type: string
+ description: The duration of the recording in ISO-8601 format
+ example: "PT13.67S"
+ channels:
+ type: integer
+ format: int32
+ description: Always `1` for conference recordings; multi-channel recordings
+ are not supported on conferences.
+ example: 1
+ digit:
+ type: string
+ description: The digit collected in the call.
+ example: "2"
+ digits:
+ type: string
+ description: (optional) The digits, letters, and/or symbols entered by the user. The string is empty if a timeout occurred before any buttons were pressed.
+ example: "123"
+ terminatingDigit:
+ type: string
+ description: (optional) The digit the user pressed to end the gather. Empty string value if no terminating digit was pressed.
+ example: "#"
+ startTime:
+ type: string
+ format: date-time
+ description: Time the call was started, in ISO 8601 format.
+ example: "2022-06-17T22:19:40.375Z"
+ enqueuedTime:
+ type: string
+ format: date-time
+ description: (optional) If call queueing is enabled and this is an outbound call, time the call was queued, in ISO 8601 format.
+ example: "2022-06-17T22:20:00.000Z"
+ nullable: true
+ answerTime:
+ type: string
+ format: date-time
+ description: Time the call was answered, in ISO 8601 format.
+ example: "2022-06-17T22:20:00.000Z"
+ nullable: true
+ endTime:
+ type: string
+ format: date-time
+ description: The time that the recording ended in ISO-8601 format
+ example: "2022-06-17T22:20:00.000Z"
+ status:
+ type: string
+ description: The current status of the process. For recording, current possible values are 'processing', 'partial', 'complete', 'deleted', and 'error'. For transcriptions, current possible values are 'none', 'processing', 'available', 'error', 'timeout', 'file-size-too-big', and 'file-size-too-small'. Additional states may be added in the future, so your application must be tolerant of unknown values.
+ example: "completed"
+ transferCallerId:
+ type: string
+ description: The phone number used as the from field of the B-leg call, in E.164 format (e.g. +15555555555) or one of Restricted, Anonymous, Private, or Unavailable.
+ example: "+15555555555"
+ transferTo:
+ type: string
+ description: The phone number used as the to field of the B-leg call, in E.164 format (e.g. +15555555555).
+ example: "+15555555555)"
+ mediaUrl:
+ nullable: true
+ type: string
+ format: uri
+ description: The URL that can be used to download the recording. Only present
+ if the recording is finished and may be downloaded.
+ example: "https://voice.bandwidth.com/api/v2/accounts/9900000/conferences/conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9/recordings/r-fbe05094-9fd2afe9-bf5b-4c68-820a-41a01c1c5833/media"
+ callId:
+ type: string
+ description: The call id associated with the event.
+ example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ callUrl:
+ type: string
+ description: The URL of the call associated with the event.
+ example: "https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ parentCallId:
+ type: string
+ description: (optional) If the event is related to the B leg of a , the call id of the original call leg that executed the . Otherwise, this field will not be present.
+ example: "c-95ac8d6e-1a31c52e-b38f-4198-93c1-51633ec68f8d"
+ tag:
+ type: string
+ description: (optional) The tag specified on call creation. If no tag was specified or it was previously cleared, this field will not be present.
+ example: exampleTag
+ nullable: true
+ cause:
+ type: string
+ description: Reason the call failed - hangup, busy, timeout, cancel, rejected, callback-error, invalid-bxml, application-error, account-limit, node-capacity-exceeded, error, or unknown.
+ example: busy
+ errorMessage:
+ type: string
+ description: Text explaining the reason that caused the call to fail in case of errors.
+ example: "Call c-2a913f94-6a486f3a-3cae-4034-bcc3-f0c9fa77ca2f is already bridged with another call"
+ nullable: true
+ errorId:
+ type: string
+ description: Bandwidth's internal id that references the error event.
+ example: "4642074b-7b58-478b-96e4-3a60955c6765"
+ nullable: true
+ machineDetectionResult:
+ type: object
+ description: "(optional) if machine detection was requested in sync mode, the result will be specified here. Possible values are the same as the async counterpart: Machine Detection Complete"
+ properties:
+ value:
+ type: string
+ description: Possible values are answering-machine, human, silence, timeout, or error.
+ example: answering-machine
+ duration:
+ type: string
+ description: The amount of time it took to determine the result.
+ example: "PT4.9891287S"
+ nullable: true
+ diversion:
+ type: object
+ properties:
+ reason:
+ type: string
+ description: "The reason for the diversion. Common values: unknown, user-busy, no-answer, unavailable, unconditional, time-of-day, do-not-disturb, deflection, follow-me, out-of-service, away."
+ example: unavailable
+ privacy:
+ type: string
+ description: "off or full"
+ example: "off"
+ screen:
+ type: string
+ description: No if the number was provided by the user, yes if the number was provided by the network
+ example: "no"
+ counter:
+ type: string
+ description: The number of diversions that have occurred
+ example: "2"
+ limit:
+ type: string
+ description: The maximum number of diversions allowed for this session
+ example: "3"
+ unknown:
+ type: string
+ description: The normal list of values is not exhaustive. Your application must be tolerant of unlisted keys and unlisted values of those keys.
+ example: unknownValue
+ origTo:
+ type: string
+ description: Always present. Indicates the last telephone number that the call was diverted from.
+ example: "+15558884444"
+ transcription:
+ type: object
+ properties:
+ text:
+ type: string
+ description: The transcribed text
+ example: "Nice talking to you, friend!"
+ confidence:
+ type: number
+ format: double
+ description: The confidence on the recognized content, ranging from `0.0`
+ to `1.0` with `1.0` being the highest confidence.
+ example: 0.9
+ stirShaken:
+ type: object
+ properties:
+ verstat:
+ type: string
+ description: (optional) The verification status indicating whether the verification was successful or not. Possible values are TN-Verification-Passed and TN-Verification-Failed.
+ example: Tn-Verification-Passed
+ attestationIndicator:
+ type: string
+ description: (optional) The attestation level verified by Bandwidth. Possible values are A (full), B (partial) or C (gateway).
+ example: A
+ originatingId:
+ type: string
+ description: (optional) A unique origination identifier.
+ example: 99759086-1335-11ed-9bcf-5f7d464e91af
+ parameters:
+ accountId:
+ name: accountId
+ in: path
+ required: true
+ schema:
+ type: string
+ description: Your Bandwidth Account ID.
+ example: "9900000"
+ callId:
+ name: callId
+ in: path
+ required: true
+ schema:
+ type: string
+ description: Programmable Voice API Call ID.
+ example: "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ recordingId:
+ name: recordingId
+ in: path
+ required: true
+ schema:
+ type: string
+ description: Programmable Voice API Recording ID.
+ example: "r-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ conferenceId:
+ name: conferenceId
+ in: path
+ required: true
+ schema:
+ type: string
+ description: Programmable Voice API Conference ID.
+ example: "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"
+ memberId:
+ name: memberId
+ in: path
+ required: true
+ schema:
+ type: string
+ description: Programmable Voice API Conference Member ID.
+ example: "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ to:
+ name: to
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results by the `to` field.
+ example: "%2b19195551234"
+ from:
+ name: from
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results by the `from` field.
+ example: "%2b19195554321"
+ name:
+ name: name
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results by the `name` field.
+ example: my-custom-name
+ minCreatedTime:
+ name: minCreatedTime
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results to conferences which have a `createdTime` after or at `minCreatedTime` (in ISO8601 format).
+ example: "2022-06-21T19:13:21Z"
+ maxCreatedTime:
+ name: maxCreatedTime
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results to conferences which have a `createdTime` before or at `maxCreatedTime` (in ISO8601 format).
+ example: "2022-06-21T19:13:21Z"
+ minStartTime:
+ name: minStartTime
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results to recordings which have a `startTime` after or including `minStartTime` (in ISO8601 format).
+ example: "2022-06-21T19:13:21Z"
+ maxStartTime:
+ name: maxStartTime
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter results to recordings which have a `startTime` before `maxStartTime` (in ISO8601 format).
+ example: "2022-06-21T19:13:21Z"
+ pageSize:
+ name: pageSize
+ in: query
+ required: false
+ schema:
+ type: integer
+ format: int32
+ minimum: 1
+ maximum: 1000
+ default: 1000
+ description: 'Specifies the max number of conferences that will be returned.'
+ example: 500
+ pageToken:
+ name: pageToken
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Not intended for explicit use. To use pagination, follow the links in the `Link` header of the response, as indicated in the endpoint description.
+ requestBodies:
+ createCallRequest:
+ description: JSON object containing information to create an outbound call
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/createCall"
+ updateCallRequest:
+ description: JSON object containing information to redirect an existing call to a new BXML document
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/updateCall"
+ updateCallBxmlRequest:
+ required: true
+ content:
+ application/xml:
+ schema:
+ type: string
+ description: A valid BXML document to replace the call's current BXML.
+ examples:
+ speakSentence:
+ summary: Speak Sentence
+ value: |-
+
+
+ This is a test sentence.
+
+ redirectUrl:
+ summary: Redirect
+ value: |-
+
+
+
+
+ updateCallRecordingRequest:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/updateCallRecording"
+ transcribeRecordingRequest:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/transcribeRecording"
+ updateConferenceRequest:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/updateConference"
+ updateConferenceBxmlRequest:
+ required: true
+ content:
+ application/xml:
+ schema:
+ type: string
+ description: A valid BXML document to replace the call's current BXML.
+ examples:
+ stopRecording:
+ summary: Stop Recording
+ value: |-
+
+
+
+
+ updateConferenceMemberRequest:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/updateConferenceMember"
+ responses:
+ createCallResponse:
+ description: Call Successfully Created
+ headers:
+ Location:
+ description: The URL for further interactions with this call
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/createCallResponse"
+ examples:
+ createCall Response:
+ $ref: "#/components/examples/createCallResponseExample"
+ getCallStateResponse:
+ description: Call found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/callState"
+ getStatisticsResponse:
+ description: Statistics Found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/accountStatistics"
+ listCallRecordingsResponse:
+ description: Recordings retrieved successfully
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: "#/components/schemas/callRecordingMetadata"
+ getCallRecordingResponse:
+ description: Recording found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/callRecordingMetadata"
+ downloadRecordingMediaResponse:
+ description: Media found
+ content:
+ audio/vnd.wave:
+ schema:
+ type: string
+ format: binary
+ audio/mpeg:
+ schema:
+ type: string
+ format: binary
+ getCallTranscriptionResponse:
+ description: Transcription found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/transcriptionList"
+ listConferencesResponse:
+ description: Conferences retrieved successfully
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: "#/components/schemas/conference"
+ examples:
+ listConferences Response:
+ $ref: "#/components/examples/listConferencesResponseExample"
+ getConferenceResponse:
+ description: Conferences retrieved successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/conference"
+ getConferenceMemberResponse:
+ description: Conference member found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/conferenceMember"
+ listConferenceRecordingsResponse:
+ description: Conference recordings retrieved successfully
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: "#/components/schemas/conferenceRecordingMetadata"
+ getConferenceRecordingResponse:
+ description: Conference recording found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/conferenceRecordingMetadata"
+ voiceBadRequestError:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ badRequestErrorExample:
+ $ref: '#/components/examples/voiceBadRequestErrorExample'
+ voiceUnauthorizedError:
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ unauthorizedErrorExample:
+ $ref: '#/components/examples/voiceUnauthorizedErrorExample'
+ voiceForbiddenError:
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ forbiddenErrorExample:
+ $ref: '#/components/examples/voiceForbiddenErrorExample'
+ voiceNotFoundError:
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ notFoundErrorExample:
+ $ref: '#/components/examples/voiceNotFoundErrorExample'
+ voiceNotAllowedError:
+ description: Method Not Allowed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ notAllowedErrorExample:
+ $ref: '#/components/examples/voiceNotAllowedErrorExample'
+ voiceConflictError:
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ conflictErrorExample:
+ $ref: '#/components/examples/voiceConflictErrorExample'
+ voiceUnsupportedMediaTypeError:
+ description: Unsupported Media Type
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ tooManyRequestsErrorExample:
+ $ref: '#/components/examples/voiceUnsupportedMediaTypeErrorExample'
+ voiceTooManyRequestsError:
+ description: Too Many Requests
+ headers:
+ Retry-After:
+ description: When you should try your request again.
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ tooManyRequestsErrorExample:
+ $ref: '#/components/examples/voiceTooManyRequestsErrorExample'
+ voiceInternalServerError:
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/voiceApiError'
+ examples:
+ internalServerErrorExample:
+ $ref: '#/components/examples/voiceInternalServerErrorExample'
+ examples:
+ createCallResponseExample:
+ summary: Example of a createCall Response
+ value:
+ applicationId: "04e88489-df02-4e34-a0ee-27a91849555f"
+ accountId: "9900000"
+ callId: "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ to: "+19195551234"
+ from: "+19195554312"
+ enqueuedTime: "2022-06-16T13:15:07.160Z"
+ callUrl: "https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"
+ callTimeout: 30.0
+ callbackTimeout: 15.0
+ tag: "My custom tag value"
+ answerMethod: "POST"
+ answerUrl: "https://myServer.example/bandwidth/webhooks/answer"
+ answerFallbackMethod: "POST"
+ disconnectMethod: "POST"
+ disconnectUrl: "https://myServer.example/bandwidth/webhooks/disconnect"
+ username: "mySecretUsername"
+ password: "*****"
+ fallbackUsername: "mySecretUsername"
+ fallbackPassword: "*****"
+ priority: 5
+ listConferencesResponseExample:
+ summary: Example of a listConferences Response
+ value:
+ - id: "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"
+ name: "my-conference-name"
+ createdTime: "2022-06-17T22:19:40.375Z"
+ completedTime: "2022-06-17T22:20:00.000Z"
+ conferenceEventUrl: "https://myServer.example/bandwidth/webhooks/conferenceEvent"
+ conferenceEventMethod: "POST"
+ tag: "my custom tag"
+ voiceBadRequestErrorExample:
+ summary: Example of a Bad Request (400) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceUnauthorizedErrorExample:
+ summary: Example of an Unauthorized (401) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceForbiddenErrorExample:
+ summary: Example of a Forbidden (403) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceNotFoundErrorExample:
+ summary: Example of a Not Found (404) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceNotAllowedErrorExample:
+ summary: Example of a Not Allowed (405) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceConflictErrorExample:
+ summary: Example of a Conflict (409) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceUnsupportedMediaTypeErrorExample:
+ summary: Example of an Unsupported Media Type (415) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceTooManyRequestsErrorExample:
+ summary: Example of a Too Many Requests (429) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ voiceInternalServerErrorExample:
+ summary: Example of an Internal Server (500) Error
+ value:
+ type: "validation"
+ description: "Invalid answerUrl: only http and https are allowed."
+ securitySchemes:
+ Basic:
+ type: http
+ scheme: basic
+ description: |-
+ Basic authentication is a simple authentication scheme built into the HTTP protocol. To use it, send your HTTP requests with an Authorization header that contains the word `Basic` followed by a space and a base64-encoded string in the format of `username:password`.
+
+ Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==`
+security:
+ - Basic: []
+tags:
+ - name: Calls
+ - name: Conferences
+ - name: Recordings
+ - name: Statistics