diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 4c2af9cd..a7f44e8f 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -12,6 +12,5 @@ jobs: build-and-deploy: uses: ./.github/workflows/common-release.yml with: - registry-url: 'https://registry.npmjs.org' tag: beta secrets: inherit diff --git a/.github/workflows/common-ci.yml b/.github/workflows/common-ci.yml index b0723b93..92f51d18 100644 --- a/.github/workflows/common-ci.yml +++ b/.github/workflows/common-ci.yml @@ -12,9 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v3 with: - node-version: 14.17.6 + node-version: '20.x' - name: Install Packages run: npm install diff --git a/.github/workflows/common-release.yml b/.github/workflows/common-release.yml index 6ba89718..a752624d 100644 --- a/.github/workflows/common-release.yml +++ b/.github/workflows/common-release.yml @@ -3,9 +3,6 @@ name: Common Release Workflow on: workflow_call: inputs: - registry-url: - required: true - type: string tag: required: false type: string @@ -21,8 +18,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-node@v1 with: - node-version: 14.17.6 - registry-url: ${{ inputs.registry-url }} + node-version: 16.20.2 - name: Install Packages run: npm install diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index c3f5a63d..a87afa1d 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -15,6 +15,5 @@ jobs: call-common-workflow: uses: ./.github/workflows/common-release.yml with: - registry-url: 'https://prekarilabs.jfrog.io/prekarilabs/api/npm/npm/' tag: internal secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a7b7bfc..5ed01bb4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,5 @@ jobs: call-common-workflow: uses: ./.github/workflows/common-release.yml with: - registry-url: 'https://registry.npmjs.org' tag: public secrets: inherit diff --git a/package-lock.json b/package-lock.json index e9301565..25dbf60a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,25 @@ { "name": "skyflow-node", - "version": "1.14.0", - "lockfileVersion": 3, + "version": "2.0.0-beta.1-dev.ad67c9b", + "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "skyflow-node", - "version": "1.14.0", + "version": "2.0.0-beta.1-dev.ad67c9b", "license": "MIT", "dependencies": { - "axios": "^1.6.1", "dotenv": "^16.4.5", + "form-data": "^4.0.0", + "form-data-encoder": "^4.0.2", + "formdata-node": "^6.0.3", + "js-base64": "3.7.7", "jsonwebtoken": "^9.0.2", - "jwt-decode": "^2.2.0" + "jwt-decode": "^2.2.0", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", + "readable-stream": "^4.5.2", + "url-join": "4.0.1" }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.25.7", @@ -20,11 +27,20 @@ "@babel/plugin-transform-runtime": "^7.25.7", "@babel/preset-env": "^7.25.8", "@babel/preset-typescript": "^7.25.7", + "@types/jest": "^29.5.14", "@types/jsonwebtoken": "^9.0.6", - "@types/node": "12.11.5 - 12.20.42", + "@types/node": "^18.19.70", + "@types/node-fetch": "^2.6.12", + "@types/qs": "^6.9.17", + "@types/readable-stream": "^4.0.18", + "@types/url-join": "4.0.1", "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "typescript": "^4.0 || ^5.0" + "jest-environment-jsdom": "^29.7.0", + "prettier": "^3.4.2", + "ts-jest": "^29.1.1", + "ts-loader": "^9.5.1", + "typescript": "~5.7.2", + "webpack": "^5.97.1" } }, "node_modules/@ampproject/remapping": { @@ -41,12 +57,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.9.tgz", - "integrity": "sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -54,30 +71,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.9.tgz", - "integrity": "sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.9.tgz", - "integrity": "sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helpers": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -93,12 +110,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.9.tgz", - "integrity": "sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "dev": true, "dependencies": { - "@babel/types": "^7.25.9", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -119,26 +137,13 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -149,17 +154,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/traverse": "^7.27.0", "semver": "^6.3.1" }, "engines": { @@ -170,13 +175,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -187,9 +192,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -229,13 +234,12 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.9.tgz", - "integrity": "sha512-TvLZY/F3+GvdRYFZFyxMvnsKi+4oJdgZzU3BoGN9Uc2d9C6zfNwJcKKhjqLAhK8i46mv93jsO74fDh3ih6rpHA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, @@ -259,9 +263,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -285,14 +289,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -301,19 +305,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -369,40 +360,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.9.tgz", - "integrity": "sha512-oKWp3+usOJSzDZOucZUAMayhPz/xVjzymyDzUN8dk0Wd3RWMlGLXi07UCQ/CgQVb8LvXx3XBajJH4XGgkt7H7g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.9.tgz", - "integrity": "sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -586,9 +562,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.9.tgz", - "integrity": "sha512-4GHX5uzr5QMOOuzV0an9MFju4hKlm0OyePl/lHhcsTVae5t/IKVHnb8W67Vr6FuLlk5lPqLB7n7O+K5R46emYg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -601,9 +577,9 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.9.tgz", - "integrity": "sha512-u3EN9ub8LyYvgTnrgp8gboElouayiwPdnM7x5tcnW3iSt09/lQYPwMNK40I9IUxo7QOZhAsPHCmmuO7EPdruqg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -803,14 +779,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -837,12 +813,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -852,12 +828,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -883,9 +859,9 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.9.tgz", - "integrity": "sha512-UIf+72C7YJ+PJ685/PpATbCz00XqiFEzHX5iysRwfvNT0Ko+FaXSvRgLytFSp8xUItrG9pFM/KoBBZDrY/cYyg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1012,12 +988,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1043,12 +1018,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { @@ -1152,14 +1127,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1234,12 +1208,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1406,12 +1380,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1421,6 +1395,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", @@ -1437,15 +1427,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1503,12 +1493,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1518,12 +1508,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1533,14 +1523,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9" }, @@ -1615,14 +1605,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.9.tgz", - "integrity": "sha512-XqDEt+hfsQukahSX9JOBDHhpUHDhj2zGSxoqWQFCMajOSBnbhBdgON/bU/5PkBA1yX5tqW6tTzuIPVsZTQ7h5Q==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -1630,16 +1620,16 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.9", - "@babel/plugin-syntax-import-attributes": "^7.25.9", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", "@babel/plugin-transform-classes": "^7.25.9", "@babel/plugin-transform-computed-properties": "^7.25.9", "@babel/plugin-transform-destructuring": "^7.25.9", @@ -1647,21 +1637,21 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", "@babel/plugin-transform-function-name": "^7.25.9", "@babel/plugin-transform-json-strings": "^7.25.9", "@babel/plugin-transform-literals": "^7.25.9", "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -1672,21 +1662,22 @@ "@babel/plugin-transform-private-property-in-object": "^7.25.9", "@babel/plugin-transform-property-literals": "^7.25.9", "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", "@babel/plugin-transform-reserved-words": "^7.25.9", "@babel/plugin-transform-shorthand-properties": "^7.25.9", "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1711,16 +1702,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.9.tgz", - "integrity": "sha512-XWxw1AcKk36kgxf4C//fl0ikjLeqGUWn062/Fd8GtpTfDJOX6Ud95FK+4JlDA36BX4bNGndXi3a6Vr4Jo5/61A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -1730,9 +1721,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", - "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1742,30 +1733,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1774,9 +1765,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz", - "integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -1834,76 +1825,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/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/@jest/console/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/@jest/console/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/@jest/console/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/@jest/console/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/@jest/console/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/@jest/core": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", @@ -1951,76 +1872,6 @@ } } }, - "node_modules/@jest/core/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/@jest/core/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/@jest/core/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/@jest/core/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/@jest/core/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/@jest/core/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/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -2136,86 +1987,16 @@ } } }, - "node_modules/@jest/reporters/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==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/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/@jest/reporters/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/@jest/reporters/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/@jest/reporters/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/@jest/reporters/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/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { @@ -2288,76 +2069,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -2375,80 +2086,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -2477,6 +2118,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -2517,6 +2168,15 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2558,6 +2218,32 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -2591,27 +2277,103 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", - "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", "dev": true, "dependencies": { + "@types/ms": "*", "@types/node": "*" } }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, "node_modules/@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==", + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", "dev": true }, + "node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ==", + "dev": true + }, "node_modules/@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", @@ -2627,40 +2389,310 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "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==", + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "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, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "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": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -2696,16 +2728,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2727,76 +2749,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/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/babel-jest/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/babel-jest/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/babel-jest/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/babel-jest/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/babel-jest/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/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -2845,13 +2797,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -2859,25 +2811,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2931,6 +2883,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2954,9 +2925,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -2973,9 +2944,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -3006,6 +2977,29 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -3017,6 +3011,33 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3036,9 +3057,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001669", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", - "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", "dev": true, "funding": [ { @@ -3056,17 +3077,19 @@ ] }, "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==", + "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": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { @@ -3078,6 +3101,15 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -3094,9 +3126,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true }, "node_modules/cliui": { @@ -3130,18 +3162,21 @@ "dev": true }, "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==", + "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.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/combined-stream": { @@ -3155,6 +3190,12 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3168,12 +3209,12 @@ "dev": true }, "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", "dev": true, "dependencies": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.4" }, "funding": { "type": "opencollective", @@ -3201,94 +3242,62 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-jest/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/create-jest/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/create-jest/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==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/create-jest/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==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, - "node_modules/create-jest/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/create-jest/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==", + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "cssom": "~0.3.6" }, "engines": { "node": ">=8" } }, - "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==", + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">= 8" + "node": ">=12" } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { "ms": "^2.1.3" @@ -3302,6 +3311,12 @@ } } }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true + }, "node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -3351,10 +3366,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "engines": { "node": ">=12" }, @@ -3362,6 +3390,19 @@ "url": "https://dotenvx.com" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3386,9 +3427,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.43", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.43.tgz", - "integrity": "sha512-NxnmFBHDl5Sachd2P46O7UJiMaMHMLSofoIWVJq3mj8NJgG0umiSeljAVP9lGzjI0UDLJJ5jjoGjcrB8RSbjLQ==", + "version": "1.5.123", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", + "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", "dev": true }, "node_modules/emittery": { @@ -3409,6 +3450,31 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3418,6 +3484,53 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3428,12 +3541,55 @@ } }, "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==", + "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/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=4.0" } }, "node_modules/esprima": { @@ -3449,6 +3605,27 @@ "node": ">=4" } }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3458,6 +3635,22 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3506,12 +3699,34 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3576,38 +3791,36 @@ "node": ">=8" } }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==", + "engines": { + "node": ">= 18" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3632,7 +3845,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3655,6 +3867,29 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3664,6 +3899,18 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -3697,7 +3944,13 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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==", @@ -3706,6 +3959,17 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3713,19 +3977,43 @@ "dev": true }, "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==", + "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": ">=4" + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3733,12 +4021,51 @@ "node": ">= 0.4" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3748,6 +4075,37 @@ "node": ">=10.17.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", @@ -3800,9 +4158,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -3841,6 +4199,12 @@ "node": ">=0.12.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3885,9 +4249,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3910,27 +4274,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/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", @@ -3976,76 +4319,6 @@ "node": ">=10" } }, - "node_modules/jake/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/jake/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/jake/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/jake/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/jake/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/jake/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/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -4117,76 +4390,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/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/jest-circus/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/jest-circus/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/jest-circus/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/jest-circus/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/jest-circus/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/jest-cli": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", @@ -4220,80 +4423,10 @@ } } }, - "node_modules/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -4335,76 +4468,6 @@ } } }, - "node_modules/jest-config/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/jest-config/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/jest-config/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/jest-config/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/jest-config/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/jest-config/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/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -4420,76 +4483,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/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/jest-diff/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/jest-diff/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/jest-diff/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/jest-diff/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/jest-diff/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/jest-docblock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -4518,74 +4511,31 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/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/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/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" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/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/jest-each/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/jest-each/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" + "peerDependencies": { + "canvas": "^2.5.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, "node_modules/jest-environment-node": { @@ -4667,80 +4617,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/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/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -4757,76 +4637,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-message-util/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/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", @@ -4900,76 +4710,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-runner": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", @@ -5002,76 +4742,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/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/jest-runner/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/jest-runner/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/jest-runner/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/jest-runner/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/jest-runner/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/jest-runtime": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", @@ -5105,76 +4775,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-snapshot": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -5206,68 +4806,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/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/jest-snapshot/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/jest-snapshot/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/jest-snapshot/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/jest-snapshot/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/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5276,18 +4818,6 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/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/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", @@ -5305,76 +4835,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/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/jest-util/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/jest-util/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/jest-util/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/jest-util/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/jest-util/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/jest-validate": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", @@ -5392,21 +4852,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/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/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -5419,61 +4864,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/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/jest-validate/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/jest-validate/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/jest-validate/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/jest-validate/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/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -5493,169 +4883,5667 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/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, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-watcher/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==", + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, + "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": "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": { - "color-name": "~1.1.4" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/jest-watcher/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==", + "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/jest-watcher/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==", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-watcher/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, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { - "has-flag": "^4.0.0" + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-worker/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==", + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==" + }, + "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/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "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/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==", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "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.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "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/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "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/nwsapi": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.19.tgz", + "integrity": "sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==", + "dev": true + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "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.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "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/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "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": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/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-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/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/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/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-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/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-jest": { + "version": "29.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", + "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", + "dev": true, + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.37.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", + "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "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/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "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/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=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/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true + }, + "@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "requires": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "requires": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "requires": { + "@babel/types": "^7.27.0" + } + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@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-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@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-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.25.9.tgz", + "integrity": "sha512-I/Vl1aQnPsrrn837oLbo+VQtkNcjuuiATqwmuweg4fTauwHHQoxyjmjjOVKyO8OaTxgqYTKW3LuQsykXjDf5Ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" + } + }, + "@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@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" + } + }, + "@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": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.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": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@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": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.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.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/jsonwebtoken": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "dev": true, + "requires": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, + "@types/node": { + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true + }, + "@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "dev": true, + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "@types/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true + }, + "acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "requires": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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" + } + }, + "async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.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" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "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" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "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-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@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-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.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 + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "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.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "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 + }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "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.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "dev": true, + "requires": { + "browserslist": "^4.24.4" + } + }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + } + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "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": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, + "dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==" + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.5.123", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", + "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "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 + }, + "enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "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 + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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 + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "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": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "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" + } + }, + "form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + } + }, + "form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==" + }, + "formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==" + }, + "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.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "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-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "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" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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 + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "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.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "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-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.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.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" } }, - "node_modules/js-tokens": { + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.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": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "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": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "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-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, + "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": { + "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": { + "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } + "jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + } + }, + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true }, - "node_modules/json-parse-even-better-errors": { + "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": { + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/jsonwebtoken": { + "jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { + "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", @@ -5667,885 +10555,993 @@ "ms": "^2.1.1", "semver": "^7.5.4" }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" + } } }, - "node_modules/jwa": { + "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { + "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "node_modules/jws": { + "jws": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { + "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "node_modules/jwt-decode": { + "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==" }, - "node_modules/kleur": { + "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" - } + "dev": true }, - "node_modules/leven": { + "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" - } + "dev": true }, - "node_modules/lines-and-columns": { + "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": { + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "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, - "dependencies": { + "requires": { "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/lodash.debounce": { + "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.includes": { + "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, - "node_modules/lodash.isboolean": { + "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, - "node_modules/lodash.isinteger": { + "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, - "node_modules/lodash.isnumber": { + "lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, - "node_modules/lodash.isplainobject": { + "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, - "node_modules/lodash.isstring": { + "lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, - "node_modules/lodash.memoize": { + "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, - "node_modules/lodash.once": { + "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, - "node_modules/lru-cache": { + "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "dependencies": { + "requires": { "yallist": "^3.0.2" } }, - "node_modules/make-dir": { + "make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "dependencies": { + "requires": { "semver": "^7.5.3" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } } }, - "node_modules/make-error": { + "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/makeerror": { + "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "dependencies": { + "requires": { "tmpl": "1.0.5" } }, - "node_modules/merge-stream": { + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "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": { + "micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "dependencies": { + "requires": { "braces": "^3.0.3", "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" } }, - "node_modules/mime-db": { + "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, - "node_modules/mime-types": { + "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { + "requires": { "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" } }, - "node_modules/mimic-fn": { + "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" - } + "dev": true }, - "node_modules/minimatch": { + "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": { + "requires": { "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" } }, - "node_modules/ms": { + "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/natural-compare": { + "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": { + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "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.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true }, - "node_modules/normalize-path": { + "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" - } + "dev": true }, - "node_modules/npm-run-path": { + "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": { + "requires": { "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/once": { + "nwsapi": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.19.tgz", + "integrity": "sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==", + "dev": true + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "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": { + "requires": { "wrappy": "1" } }, - "node_modules/onetime": { + "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "dependencies": { + "requires": { "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-limit": { + "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": { + "requires": { "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { + "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": { + "requires": { "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" + "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" + } + } } }, - "node_modules/p-try": { + "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" - } + "dev": true }, - "node_modules/parse-json": { + "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": { + "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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-exists": { + "parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "requires": { + "entities": "^4.5.0" + } + }, + "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/path-is-absolute": { + "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" - } + "dev": true }, - "node_modules/path-key": { + "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" - } + "dev": true }, - "node_modules/path-parse": { + "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": { + "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, - "node_modules/picomatch": { + "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" - } + "dev": true }, - "node_modules/pirates": { + "pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } + "dev": true }, - "node_modules/pkg-dir": { + "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": { + "requires": { "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/pretty-format": { + "prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true + }, + "pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "dependencies": { + "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=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 + } } }, - "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" - } + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, - "node_modules/prompts": { + "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": { + "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } }, - "node_modules/pure-rand": { + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "pure-rand": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] + "requires": { + "safe-buffer": "^5.1.0" + } }, - "node_modules/react-is": { + "react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, - "node_modules/regenerate": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "node_modules/regenerate-unicode-properties": { + "regenerate-unicode-properties": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, - "dependencies": { + "requires": { "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" } }, - "node_modules/regenerator-runtime": { + "regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, - "node_modules/regenerator-transform": { + "regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "dependencies": { + "requires": { "@babel/runtime": "^7.8.4" } }, - "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, - "dependencies": { + "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/regjsgen": { + "regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true }, - "node_modules/regjsparser": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", - "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", + "regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, - "dependencies": { + "requires": { "jsesc": "~3.0.2" }, - "bin": { - "regjsparser": "bin/parser" + "dependencies": { + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + } } }, - "node_modules/require-directory": { + "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" - } + "dev": true }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", + "requires": { + "is-core-module": "^2.16.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": { + "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": { + "requires": { "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/resolve-from": { + "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": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "xmlchars": "^2.2.0" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { + "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "randombytes": "^2.1.0" } }, - "node_modules/shebang-command": { + "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": { + "requires": { "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/shebang-regex": { + "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" + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" } }, - "node_modules/signal-exit": { + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, + "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": { + "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": { + "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" - } + "dev": true }, - "node_modules/source-map": { + "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" - } + "dev": true }, - "node_modules/source-map-support": { + "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": { + "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/sprintf-js": { + "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": { + "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "dependencies": { + "requires": { "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, - "node_modules/string-length": { + "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": { + "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/string-width": { + "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": { + "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/strip-ansi": { + "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": { + "requires": { "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/strip-bom": { + "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" - } + "dev": true }, - "node_modules/strip-final-newline": { + "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" - } + "dev": true }, - "node_modules/strip-json-comments": { + "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" - } + "dev": true }, - "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==", + "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": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "has-flag": "^4.0.0" } }, - "node_modules/supports-preserve-symlinks-flag": { + "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/test-exclude": { + "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": { + "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" } }, - "node_modules/tmpl": { + "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-regex-range": { + "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": { + "requires": { "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" } }, - "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, - "dependencies": { + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "ts-jest": { + "version": "29.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", + "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", + "dev": true, + "requires": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", @@ -6553,285 +11549,315 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.1", + "type-fest": "^4.37.0", "yargs-parser": "^21.1.1" }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true }, - "esbuild": { - "optional": true + "type-fest": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", + "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "dev": true } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } } }, - "node_modules/type-detect": { + "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" - } + "dev": true }, - "node_modules/type-fest": { + "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" - } + "dev": true }, - "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } + "typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true }, - "node_modules/unicode-canonical-property-names-ecmascript": { + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unicode-match-property-ecmascript": { + "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "dependencies": { + "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/unicode-match-property-value-ecmascript": { + "unicode-match-property-value-ecmascript": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unicode-property-aliases-ecmascript": { + "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/v8-to-istanbul": { + "v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" } }, - "node_modules/walker": { + "w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "dependencies": { + "requires": { "makeerror": "1.0.12" } }, - "node_modules/which": { + "watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "dependencies": { + "requires": { "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/wrap-ansi": { + "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": { + "requires": { "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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": { + "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": { + "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": { + "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/y18n": { + "ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/yallist": { + "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yargs": { + "yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "dependencies": { + "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -6839,31 +11865,19 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" } }, - "node_modules/yargs-parser": { + "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" - } + "dev": true }, - "node_modules/yocto-queue": { + "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" - } + "dev": true } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index f9180486..21054320 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,17 @@ "tokenization" ], "dependencies": { - "axios": "^1.6.1", "dotenv": "^16.4.5", "jsonwebtoken": "^9.0.2", - "jwt-decode": "^2.2.0" + "jwt-decode": "^2.2.0", + "url-join": "4.0.1", + "form-data": "^4.0.0", + "formdata-node": "^6.0.3", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", + "readable-stream": "^4.5.2", + "js-base64": "3.7.7", + "form-data-encoder": "^4.0.2" }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.25.7", @@ -44,9 +51,18 @@ "@babel/preset-env": "^7.25.8", "@babel/preset-typescript": "^7.25.7", "@types/jsonwebtoken": "^9.0.6", - "@types/node": "12.11.5 - 12.20.42", + "@types/node": "^18.19.70", "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "typescript": "^4.0 || ^5.0" + "ts-jest": "^29.1.1", + "typescript": "~5.7.2", + "@types/url-join": "4.0.1", + "@types/qs": "^6.9.17", + "@types/node-fetch": "^2.6.12", + "@types/readable-stream": "^4.0.18", + "webpack": "^5.97.1", + "ts-loader": "^9.5.1", + "@types/jest": "^29.5.14", + "jest-environment-jsdom": "^29.7.0", + "prettier": "^3.4.2" } } diff --git a/src/ _generated_/rest/Client.ts b/src/ _generated_/rest/Client.ts new file mode 100644 index 00000000..ebbf651b --- /dev/null +++ b/src/ _generated_/rest/Client.ts @@ -0,0 +1,68 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "./environments"; +import * as core from "./core"; +import { Audit } from "./api/resources/audit/client/Client"; +import { BinLookup } from "./api/resources/binLookup/client/Client"; +import { Records } from "./api/resources/records/client/Client"; +import { Tokens } from "./api/resources/tokens/client/Client"; +import { Query } from "./api/resources/query/client/Client"; +import { Authentication } from "./api/resources/authentication/client/Client"; + +export declare namespace SkyflowClient { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class SkyflowClient { + protected _audit: Audit | undefined; + protected _binLookup: BinLookup | undefined; + protected _records: Records | undefined; + protected _tokens: Tokens | undefined; + protected _query: Query | undefined; + protected _authentication: Authentication | undefined; + + constructor(protected readonly _options: SkyflowClient.Options) {} + + public get audit(): Audit { + return (this._audit ??= new Audit(this._options)); + } + + public get binLookup(): BinLookup { + return (this._binLookup ??= new BinLookup(this._options)); + } + + public get records(): Records { + return (this._records ??= new Records(this._options)); + } + + public get tokens(): Tokens { + return (this._tokens ??= new Tokens(this._options)); + } + + public get query(): Query { + return (this._query ??= new Query(this._options)); + } + + public get authentication(): Authentication { + return (this._authentication ??= new Authentication(this._options)); + } +} diff --git a/src/ _generated_/rest/api.ts b/src/ _generated_/rest/api.ts deleted file mode 100644 index 0ac7e383..00000000 --- a/src/ _generated_/rest/api.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export * from './api/audit-api'; -export * from './api/binlookup-api'; -export * from './api/query-api'; -export * from './api/records-api'; -export * from './api/tokens-api'; -export * from './api/authentication-api'; - diff --git a/src/ _generated_/rest/api/audit-api.ts b/src/ _generated_/rest/api/audit-api.ts deleted file mode 100644 index a53d382c..00000000 --- a/src/ _generated_/rest/api/audit-api.ts +++ /dev/null @@ -1,546 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1AuditResponse } from '../models'; -/** - * AuditApi - axios parameter creator - * @export - */ -export const AuditApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - auditServiceListAuditEvents: async (filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'filterOpsAccountID' is not null or undefined - assertParamExists('auditServiceListAuditEvents', 'filterOpsAccountID', filterOpsAccountID) - const localVarPath = `/v1/audit/events`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (filterOpsContextChangeID !== undefined) { - localVarQueryParameter['filterOps.context.changeID'] = filterOpsContextChangeID; - } - - if (filterOpsContextRequestID !== undefined) { - localVarQueryParameter['filterOps.context.requestID'] = filterOpsContextRequestID; - } - - if (filterOpsContextTraceID !== undefined) { - localVarQueryParameter['filterOps.context.traceID'] = filterOpsContextTraceID; - } - - if (filterOpsContextSessionID !== undefined) { - localVarQueryParameter['filterOps.context.sessionID'] = filterOpsContextSessionID; - } - - if (filterOpsContextActor !== undefined) { - localVarQueryParameter['filterOps.context.actor'] = filterOpsContextActor; - } - - if (filterOpsContextActorType !== undefined) { - localVarQueryParameter['filterOps.context.actorType'] = filterOpsContextActorType; - } - - if (filterOpsContextAccessType !== undefined) { - localVarQueryParameter['filterOps.context.accessType'] = filterOpsContextAccessType; - } - - if (filterOpsContextIpAddress !== undefined) { - localVarQueryParameter['filterOps.context.ipAddress'] = filterOpsContextIpAddress; - } - - if (filterOpsContextOrigin !== undefined) { - localVarQueryParameter['filterOps.context.origin'] = filterOpsContextOrigin; - } - - if (filterOpsContextAuthMode !== undefined) { - localVarQueryParameter['filterOps.context.authMode'] = filterOpsContextAuthMode; - } - - if (filterOpsContextJwtID !== undefined) { - localVarQueryParameter['filterOps.context.jwtID'] = filterOpsContextJwtID; - } - - if (filterOpsContextBearerTokenContextID !== undefined) { - localVarQueryParameter['filterOps.context.bearerTokenContextID'] = filterOpsContextBearerTokenContextID; - } - - if (filterOpsParentAccountID !== undefined) { - localVarQueryParameter['filterOps.parentAccountID'] = filterOpsParentAccountID; - } - - if (filterOpsAccountID !== undefined) { - localVarQueryParameter['filterOps.accountID'] = filterOpsAccountID; - } - - if (filterOpsWorkspaceID !== undefined) { - localVarQueryParameter['filterOps.workspaceID'] = filterOpsWorkspaceID; - } - - if (filterOpsVaultID !== undefined) { - localVarQueryParameter['filterOps.vaultID'] = filterOpsVaultID; - } - - if (filterOpsResourceIDs !== undefined) { - localVarQueryParameter['filterOps.resourceIDs'] = filterOpsResourceIDs; - } - - if (filterOpsActionType !== undefined) { - localVarQueryParameter['filterOps.actionType'] = filterOpsActionType; - } - - if (filterOpsResourceType !== undefined) { - localVarQueryParameter['filterOps.resourceType'] = filterOpsResourceType; - } - - if (filterOpsTags !== undefined) { - localVarQueryParameter['filterOps.tags'] = filterOpsTags; - } - - if (filterOpsResponseCode !== undefined) { - localVarQueryParameter['filterOps.responseCode'] = filterOpsResponseCode; - } - - if (filterOpsStartTime !== undefined) { - localVarQueryParameter['filterOps.startTime'] = filterOpsStartTime; - } - - if (filterOpsEndTime !== undefined) { - localVarQueryParameter['filterOps.endTime'] = filterOpsEndTime; - } - - if (filterOpsApiName !== undefined) { - localVarQueryParameter['filterOps.apiName'] = filterOpsApiName; - } - - if (filterOpsResponseMessage !== undefined) { - localVarQueryParameter['filterOps.responseMessage'] = filterOpsResponseMessage; - } - - if (filterOpsHttpMethod !== undefined) { - localVarQueryParameter['filterOps.httpMethod'] = filterOpsHttpMethod; - } - - if (filterOpsHttpURI !== undefined) { - localVarQueryParameter['filterOps.httpURI'] = filterOpsHttpURI; - } - - if (sortOpsSortBy !== undefined) { - localVarQueryParameter['sortOps.sortBy'] = sortOpsSortBy; - } - - if (sortOpsOrderBy !== undefined) { - localVarQueryParameter['sortOps.orderBy'] = sortOpsOrderBy; - } - - if (afterOpsTimestamp !== undefined) { - localVarQueryParameter['afterOps.timestamp'] = afterOpsTimestamp; - } - - if (afterOpsChangeID !== undefined) { - localVarQueryParameter['afterOps.changeID'] = afterOpsChangeID; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (offset !== undefined) { - localVarQueryParameter['offset'] = offset; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AuditApi - functional programming interface - * @export - */ -export const AuditApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AuditApiAxiosParamCreator(configuration) - return { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.auditServiceListAuditEvents(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['AuditApi.auditServiceListAuditEvents']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * AuditApi - factory interface - * @export - */ -export const AuditApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AuditApiFp(configuration) - return { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.auditServiceListAuditEvents(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AuditApi - interface - * @export - * @interface AuditApi - */ -export interface AuditApiInterface { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuditApiInterface - */ - auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * AuditApi - object-oriented interface - * @export - * @class AuditApi - * @extends {BaseAPI} - */ -export class AuditApi extends BaseAPI implements AuditApiInterface { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuditApi - */ - public auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig) { - return AuditApiFp(this.configuration).auditServiceListAuditEvents(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, options).then((request) => request(this.axios, this.basePath)); - } -} - -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsContextActorTypeEnum = { - None: 'NONE', - User: 'USER', - ServiceAccount: 'SERVICE_ACCOUNT' -} as const; -export type AuditServiceListAuditEventsFilterOpsContextActorTypeEnum = typeof AuditServiceListAuditEventsFilterOpsContextActorTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsContextActorTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum = { - AccessNone: 'ACCESS_NONE', - Api: 'API', - Sql: 'SQL', - OktaLogin: 'OKTA_LOGIN' -} as const; -export type AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum = typeof AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsContextAuthModeEnum = { - AuthNone: 'AUTH_NONE', - OktaJwt: 'OKTA_JWT', - ServiceAccountJwt: 'SERVICE_ACCOUNT_JWT', - PatJwt: 'PAT_JWT' -} as const; -export type AuditServiceListAuditEventsFilterOpsContextAuthModeEnum = typeof AuditServiceListAuditEventsFilterOpsContextAuthModeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsContextAuthModeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsActionTypeEnum = { - None: 'NONE', - Assign: 'ASSIGN', - Create: 'CREATE', - Delete: 'DELETE', - Execute: 'EXECUTE', - List: 'LIST', - Read: 'READ', - Unassign: 'UNASSIGN', - Update: 'UPDATE', - Validate: 'VALIDATE', - Login: 'LOGIN', - Rotate: 'ROTATE', - Schedulerotation: 'SCHEDULEROTATION', - Schedulerotationalert: 'SCHEDULEROTATIONALERT', - Import: 'IMPORT', - Getimportparameters: 'GETIMPORTPARAMETERS', - Ping: 'PING', - Getcloudprovider: 'GETCLOUDPROVIDER' -} as const; -export type AuditServiceListAuditEventsFilterOpsActionTypeEnum = typeof AuditServiceListAuditEventsFilterOpsActionTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsActionTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsResourceTypeEnum = { - NoneApi: 'NONE_API', - Account: 'ACCOUNT', - Audit: 'AUDIT', - BaseDataType: 'BASE_DATA_TYPE', - FieldTemplate: 'FIELD_TEMPLATE', - File: 'FILE', - Key: 'KEY', - Policy: 'POLICY', - ProtoParse: 'PROTO_PARSE', - Record: 'RECORD', - Role: 'ROLE', - Rule: 'RULE', - Secret: 'SECRET', - ServiceAccount: 'SERVICE_ACCOUNT', - Token: 'TOKEN', - User: 'USER', - Vault: 'VAULT', - VaultTemplate: 'VAULT_TEMPLATE', - Workspace: 'WORKSPACE', - Table: 'TABLE', - PolicyTemplate: 'POLICY_TEMPLATE', - Member: 'MEMBER', - Tag: 'TAG', - Connection: 'CONNECTION', - Migration: 'MIGRATION', - ScheduledJob: 'SCHEDULED_JOB', - Job: 'JOB', - ColumnName: 'COLUMN_NAME', - NetworkToken: 'NETWORK_TOKEN', - Subscription: 'SUBSCRIPTION' -} as const; -export type AuditServiceListAuditEventsFilterOpsResourceTypeEnum = typeof AuditServiceListAuditEventsFilterOpsResourceTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsResourceTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsSortOpsOrderByEnum = { - Ascending: 'ASCENDING', - Descending: 'DESCENDING' -} as const; -export type AuditServiceListAuditEventsSortOpsOrderByEnum = typeof AuditServiceListAuditEventsSortOpsOrderByEnum[keyof typeof AuditServiceListAuditEventsSortOpsOrderByEnum]; diff --git a/src/ _generated_/rest/api/authentication-api.ts b/src/ _generated_/rest/api/authentication-api.ts deleted file mode 100644 index 82b78d0e..00000000 --- a/src/ _generated_/rest/api/authentication-api.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1GetAuthTokenRequest } from '../models'; -// @ts-ignore -import type { V1GetAuthTokenResponse } from '../models'; -/** - * AuthenticationApi - axios parameter creator - * @export - */ -export const AuthenticationApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - authenticationServiceGetAuthToken: async (body: V1GetAuthTokenRequest, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'body' is not null or undefined - assertParamExists('authenticationServiceGetAuthToken', 'body', body) - const localVarPath = `/v1/auth/sa/oauth/token`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AuthenticationApi - functional programming interface - * @export - */ -export const AuthenticationApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AuthenticationApiAxiosParamCreator(configuration) - return { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.authenticationServiceGetAuthToken(body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['AuthenticationApi.authenticationServiceGetAuthToken']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * AuthenticationApi - factory interface - * @export - */ -export const AuthenticationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AuthenticationApiFp(configuration) - return { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.authenticationServiceGetAuthToken(body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AuthenticationApi - interface - * @export - * @interface AuthenticationApi - */ -export interface AuthenticationApiInterface { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApiInterface - */ - authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * AuthenticationApi - object-oriented interface - * @export - * @class AuthenticationApi - * @extends {BaseAPI} - */ -export class AuthenticationApi extends BaseAPI implements AuthenticationApiInterface { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApi - */ - public authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig) { - return AuthenticationApiFp(this.configuration).authenticationServiceGetAuthToken(body, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/binlookup-api.ts b/src/ _generated_/rest/api/binlookup-api.ts deleted file mode 100644 index 457ef97b..00000000 --- a/src/ _generated_/rest/api/binlookup-api.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1BINListRequest } from '../models'; -// @ts-ignore -import type { V1BINListResponse } from '../models'; -/** - * BINLookupApi - axios parameter creator - * @export - */ -export const BINLookupApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - bINListServiceListCardsOfBIN: async (body: V1BINListRequest, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'body' is not null or undefined - assertParamExists('bINListServiceListCardsOfBIN', 'body', body) - const localVarPath = `/v1/card_lookup`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BINLookupApi - functional programming interface - * @export - */ -export const BINLookupApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BINLookupApiAxiosParamCreator(configuration) - return { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.bINListServiceListCardsOfBIN(body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['BINLookupApi.bINListServiceListCardsOfBIN']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * BINLookupApi - factory interface - * @export - */ -export const BINLookupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BINLookupApiFp(configuration) - return { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.bINListServiceListCardsOfBIN(body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BINLookupApi - interface - * @export - * @interface BINLookupApi - */ -export interface BINLookupApiInterface { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BINLookupApiInterface - */ - bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * BINLookupApi - object-oriented interface - * @export - * @class BINLookupApi - * @extends {BaseAPI} - */ -export class BINLookupApi extends BaseAPI implements BINLookupApiInterface { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BINLookupApi - */ - public bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig) { - return BINLookupApiFp(this.configuration).bINListServiceListCardsOfBIN(body, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/errors/BadRequestError.ts b/src/ _generated_/rest/api/errors/BadRequestError.ts new file mode 100644 index 00000000..e19131a1 --- /dev/null +++ b/src/ _generated_/rest/api/errors/BadRequestError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as core from "../../core"; + +export class BadRequestError extends errors.SkyflowError { + constructor(body: Record, rawResponse?: core.RawResponse) { + super({ + message: "BadRequestError", + statusCode: 400, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, BadRequestError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/NotFoundError.ts b/src/ _generated_/rest/api/errors/NotFoundError.ts new file mode 100644 index 00000000..ff59e84a --- /dev/null +++ b/src/ _generated_/rest/api/errors/NotFoundError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as core from "../../core"; + +export class NotFoundError extends errors.SkyflowError { + constructor(body: Record, rawResponse?: core.RawResponse) { + super({ + message: "NotFoundError", + statusCode: 404, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, NotFoundError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/UnauthorizedError.ts b/src/ _generated_/rest/api/errors/UnauthorizedError.ts new file mode 100644 index 00000000..73c2b114 --- /dev/null +++ b/src/ _generated_/rest/api/errors/UnauthorizedError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as core from "../../core"; + +export class UnauthorizedError extends errors.SkyflowError { + constructor(body: Record, rawResponse?: core.RawResponse) { + super({ + message: "UnauthorizedError", + statusCode: 401, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, UnauthorizedError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/index.ts b/src/ _generated_/rest/api/errors/index.ts new file mode 100644 index 00000000..f88b64db --- /dev/null +++ b/src/ _generated_/rest/api/errors/index.ts @@ -0,0 +1,3 @@ +export * from "./NotFoundError"; +export * from "./BadRequestError"; +export * from "./UnauthorizedError"; diff --git a/src/ _generated_/rest/api/index.ts b/src/ _generated_/rest/api/index.ts new file mode 100644 index 00000000..30060724 --- /dev/null +++ b/src/ _generated_/rest/api/index.ts @@ -0,0 +1,3 @@ +export * from "./resources"; +export * from "./types"; +export * from "./errors"; diff --git a/src/ _generated_/rest/api/query-api.ts b/src/ _generated_/rest/api/query-api.ts deleted file mode 100644 index 4e76fdd9..00000000 --- a/src/ _generated_/rest/api/query-api.ts +++ /dev/null @@ -1,170 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { QueryServiceExecuteQueryBody } from '../models'; -// @ts-ignore -import type { V1GetQueryResponse } from '../models'; -/** - * QueryApi - axios parameter creator - * @export - */ -export const QueryApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Returns records for a valid SQL query. This endpoint
  • Can return redacted record values.
  • Supports only the SELECT command.
  • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
  • Can\'t modify the vault or perform transactions.
  • Can\'t return tokens.
  • Can\'t return file download or render URLs.
  • Doesn\'t support the WHERE keyword with columns using transient tokenization.
  • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
    • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - queryServiceExecuteQuery: async (vaultID: string, body: QueryServiceExecuteQueryBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('queryServiceExecuteQuery', 'vaultID', vaultID) - // verify required parameter 'body' is not null or undefined - assertParamExists('queryServiceExecuteQuery', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/query` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * QueryApi - functional programming interface - * @export - */ -export const QueryApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = QueryApiAxiosParamCreator(configuration) - return { - /** - * Returns records for a valid SQL query. This endpoint
      • Can return redacted record values.
      • Supports only the SELECT command.
      • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
      • Can\'t modify the vault or perform transactions.
      • Can\'t return tokens.
      • Can\'t return file download or render URLs.
      • Doesn\'t support the WHERE keyword with columns using transient tokenization.
      • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
        • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.queryServiceExecuteQuery(vaultID, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['QueryApi.queryServiceExecuteQuery']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * QueryApi - factory interface - * @export - */ -export const QueryApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = QueryApiFp(configuration) - return { - /** - * Returns records for a valid SQL query. This endpoint
          • Can return redacted record values.
          • Supports only the SELECT command.
          • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
          • Can\'t modify the vault or perform transactions.
          • Can\'t return tokens.
          • Can\'t return file download or render URLs.
          • Doesn\'t support the WHERE keyword with columns using transient tokenization.
          • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
            • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.queryServiceExecuteQuery(vaultID, body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * QueryApi - interface - * @export - * @interface QueryApi - */ -export interface QueryApiInterface { - /** - * Returns records for a valid SQL query. This endpoint
              • Can return redacted record values.
              • Supports only the SELECT command.
              • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
              • Can\'t modify the vault or perform transactions.
              • Can\'t return tokens.
              • Can\'t return file download or render URLs.
              • Doesn\'t support the WHERE keyword with columns using transient tokenization.
              • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
                • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof QueryApiInterface - */ - queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * QueryApi - object-oriented interface - * @export - * @class QueryApi - * @extends {BaseAPI} - */ -export class QueryApi extends BaseAPI implements QueryApiInterface { - /** - * Returns records for a valid SQL query. This endpoint
                  • Can return redacted record values.
                  • Supports only the SELECT command.
                  • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
                  • Can\'t modify the vault or perform transactions.
                  • Can\'t return tokens.
                  • Can\'t return file download or render URLs.
                  • Doesn\'t support the WHERE keyword with columns using transient tokenization.
                  • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
                    • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof QueryApi - */ - public queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig) { - return QueryApiFp(this.configuration).queryServiceExecuteQuery(vaultID, body, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/records-api.ts b/src/ _generated_/rest/api/records-api.ts deleted file mode 100644 index b2de051e..00000000 --- a/src/ _generated_/rest/api/records-api.ts +++ /dev/null @@ -1,1275 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
                      • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
                      • Production: https://_*identifier*.vault.skyflowapis.com
                      When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -// import { FormData } from '../models'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { RecordServiceBatchOperationBody } from '../models'; -// @ts-ignore -import type { RecordServiceBulkDeleteRecordBody } from '../models'; -// @ts-ignore -import type { RecordServiceInsertRecordBody } from '../models'; -// @ts-ignore -import type { RecordServiceUpdateRecordBody } from '../models'; -// @ts-ignore -import type { V1BatchOperationResponse } from '../models'; -// @ts-ignore -import type { V1BulkDeleteRecordResponse } from '../models'; -// @ts-ignore -import type { V1BulkGetRecordResponse } from '../models'; -// @ts-ignore -import type { V1DeleteFileResponse } from '../models'; -// @ts-ignore -import type { V1DeleteRecordResponse } from '../models'; -// @ts-ignore -import type { V1FieldRecords } from '../models'; -// @ts-ignore -import type { V1GetFileScanStatusResponse } from '../models'; -// @ts-ignore -import type { V1InsertRecordResponse } from '../models'; -// @ts-ignore -import type { V1UpdateRecordResponse } from '../models'; -/** - * RecordsApi - axios parameter creator - * @export - */ -export const RecordsApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceDeleteFile: async (vaultID: string, tableName: string, iD: string, columnName: string, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'vaultID', vaultID) - // verify required parameter 'tableName' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'tableName', tableName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'iD', iD) - // verify required parameter 'columnName' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'columnName', columnName) - const localVarPath = `/v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"tableName"}}`, encodeURIComponent(String(tableName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))) - .replace(`{${"columnName"}}`, encodeURIComponent(String(columnName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceGetFileScanStatus: async (vaultID: string, tableName: string, iD: string, columnName: string, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'vaultID', vaultID) - // verify required parameter 'tableName' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'tableName', tableName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'iD', iD) - // verify required parameter 'columnName' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'columnName', columnName) - const localVarPath = `/v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}/scan-status` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"tableName"}}`, encodeURIComponent(String(tableName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))) - .replace(`{${"columnName"}}`, encodeURIComponent(String(columnName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceUploadFile: async (vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('fileServiceUploadFile', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('fileServiceUploadFile', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('fileServiceUploadFile', 'iD', iD) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}/files` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - const localVarFormParams = new FormData(); - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - if (fileColumnName !== undefined && fileColumnName.has('columnName')) { - localVarFormParams.append(`${fileColumnName.get('columnName')}`, new Blob([JSON.stringify(fileColumnName)], { type: "application/json", })); - } - - - localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = localVarFormParams; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBatchOperation: async (vaultID: string, body: RecordServiceBatchOperationBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceBatchOperation', 'vaultID', vaultID) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceBatchOperation', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkDeleteRecord: async (vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceBulkDeleteRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceBulkDeleteRecord', 'objectName', objectName) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceBulkDeleteRecord', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkGetRecord: async (vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceBulkGetRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceBulkGetRecord', 'objectName', objectName) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skyflowIds) { - localVarQueryParameter['skyflow_ids'] = skyflowIds; - } - - if (redaction !== undefined) { - localVarQueryParameter['redaction'] = redaction; - } - - if (tokenization !== undefined) { - localVarQueryParameter['tokenization'] = tokenization; - } - - if (fields) { - localVarQueryParameter['fields'] = fields; - } - - if (offset !== undefined) { - localVarQueryParameter['offset'] = offset; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (downloadURL !== undefined) { - localVarQueryParameter['downloadURL'] = downloadURL; - } - - if (columnName !== undefined) { - localVarQueryParameter['column_name'] = columnName; - } - - if (columnValues) { - localVarQueryParameter['column_values'] = columnValues; - } - - if (orderBy !== undefined) { - localVarQueryParameter['order_by'] = orderBy; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDeleteRecord: async (vaultID: string, objectName: string, iD: string, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceDeleteRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceDeleteRecord', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('recordServiceDeleteRecord', 'iD', iD) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceGetRecord: async (vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceGetRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceGetRecord', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('recordServiceGetRecord', 'iD', iD) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (redaction !== undefined) { - localVarQueryParameter['redaction'] = redaction; - } - - if (tokenization !== undefined) { - localVarQueryParameter['tokenization'] = tokenization; - } - - if (fields) { - localVarQueryParameter['fields'] = fields; - } - - if (downloadURL !== undefined) { - localVarQueryParameter['downloadURL'] = downloadURL; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceInsertRecord: async (vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceInsertRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceInsertRecord', 'objectName', objectName) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceInsertRecord', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceUpdateRecord: async (vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'iD', iD) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * RecordsApi - functional programming interface - * @export - */ -export const RecordsApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = RecordsApiAxiosParamCreator(configuration) - return { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.fileServiceDeleteFile(vaultID, tableName, iD, columnName, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.fileServiceDeleteFile']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.fileServiceGetFileScanStatus(vaultID, tableName, iD, columnName, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.fileServiceGetFileScanStatus']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.fileServiceUploadFile(vaultID, objectName, iD, fileColumnName, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.fileServiceUploadFile']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceBatchOperation(vaultID, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceBatchOperation']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceBulkDeleteRecord(vaultID, objectName, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceBulkDeleteRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceBulkGetRecord(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceBulkGetRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceDeleteRecord(vaultID, objectName, iD, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceDeleteRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceGetRecord(vaultID, objectName, iD, redaction, tokenization, fields, downloadURL, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceGetRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceInsertRecord(vaultID, objectName, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceInsertRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceUpdateRecord(vaultID, objectName, iD, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceUpdateRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * RecordsApi - factory interface - * @export - */ -export const RecordsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = RecordsApiFp(configuration) - return { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.fileServiceDeleteFile(vaultID, tableName, iD, columnName, options).then((request) => request(axios, basePath)); - }, - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.fileServiceGetFileScanStatus(vaultID, tableName, iD, columnName, options).then((request) => request(axios, basePath)); - }, - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.fileServiceUploadFile(vaultID, objectName, iD, fileColumnName, options).then((request) => request(axios, basePath)); - }, - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceBatchOperation(vaultID, body, options).then((request) => request(axios, basePath)); - }, - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceBulkDeleteRecord(vaultID, objectName, body, options).then((request) => request(axios, basePath)); - }, - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceBulkGetRecord(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, options).then((request) => request(axios, basePath)); - }, - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceDeleteRecord(vaultID, objectName, iD, options).then((request) => request(axios, basePath)); - }, - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceGetRecord(vaultID, objectName, iD, redaction, tokenization, fields, downloadURL, options).then((request) => request(axios, basePath)); - }, - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceInsertRecord(vaultID, objectName, body, options).then((request) => request(axios, basePath)); - }, - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceUpdateRecord(vaultID, objectName, iD, body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * RecordsApi - interface - * @export - * @interface RecordsApi - */ -export interface RecordsApiInterface { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * RecordsApi - object-oriented interface - * @export - * @class RecordsApi - * @extends {BaseAPI} - */ -export class RecordsApi extends BaseAPI implements RecordsApiInterface { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).fileServiceDeleteFile(vaultID, tableName, iD, columnName, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).fileServiceGetFileScanStatus(vaultID, tableName, iD, columnName, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).fileServiceUploadFile(vaultID, objectName, iD, fileColumnName, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceBatchOperation(vaultID, body, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceBulkDeleteRecord(vaultID, objectName, body, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceBulkGetRecord(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceDeleteRecord(vaultID, objectName, iD, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceGetRecord(vaultID, objectName, iD, redaction, tokenization, fields, downloadURL, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceInsertRecord(vaultID, objectName, body, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceUpdateRecord(vaultID, objectName, iD, body, options).then((request) => request(this.axios, this.basePath)); - } -} - -/** - * @export - */ -export const RecordServiceBulkGetRecordRedactionEnum = { - Default: 'DEFAULT', - Redacted: 'REDACTED', - Masked: 'MASKED', - PlainText: 'PLAIN_TEXT' -} as const; -export type RecordServiceBulkGetRecordRedactionEnum = typeof RecordServiceBulkGetRecordRedactionEnum[keyof typeof RecordServiceBulkGetRecordRedactionEnum]; -/** - * @export - */ -export const RecordServiceBulkGetRecordOrderByEnum = { - Ascending: 'ASCENDING', - Descending: 'DESCENDING', - None: 'NONE' -} as const; -export type RecordServiceBulkGetRecordOrderByEnum = typeof RecordServiceBulkGetRecordOrderByEnum[keyof typeof RecordServiceBulkGetRecordOrderByEnum]; -/** - * @export - */ -export const RecordServiceGetRecordRedactionEnum = { - Default: 'DEFAULT', - Redacted: 'REDACTED', - Masked: 'MASKED', - PlainText: 'PLAIN_TEXT' -} as const; -export type RecordServiceGetRecordRedactionEnum = typeof RecordServiceGetRecordRedactionEnum[keyof typeof RecordServiceGetRecordRedactionEnum]; diff --git a/src/ _generated_/rest/api/resources/audit/client/Client.ts b/src/ _generated_/rest/api/resources/audit/client/Client.ts new file mode 100644 index 00000000..89b42416 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/Client.ts @@ -0,0 +1,289 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Audit { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Audit { + constructor(protected readonly _options: Audit.Options) {} + + /** + * Lists audit events that match query parameters. + * + * @param {Skyflow.AuditServiceListAuditEventsRequest} request + * @param {Audit.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.audit.auditServiceListAuditEvents({ + * "filterOps.accountID": "filterOps.accountID" + * }) + */ + public auditServiceListAuditEvents( + request: Skyflow.AuditServiceListAuditEventsRequest, + requestOptions?: Audit.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__auditServiceListAuditEvents(request, requestOptions)); + } + + private async __auditServiceListAuditEvents( + request: Skyflow.AuditServiceListAuditEventsRequest, + requestOptions?: Audit.RequestOptions, + ): Promise> { + const { + "filterOps.context.changeID": filterOpsContextChangeId, + "filterOps.context.requestID": filterOpsContextRequestId, + "filterOps.context.traceID": filterOpsContextTraceId, + "filterOps.context.sessionID": filterOpsContextSessionId, + "filterOps.context.actor": filterOpsContextActor, + "filterOps.context.actorType": filterOpsContextActorType, + "filterOps.context.accessType": filterOpsContextAccessType, + "filterOps.context.ipAddress": filterOpsContextIpAddress, + "filterOps.context.origin": filterOpsContextOrigin, + "filterOps.context.authMode": filterOpsContextAuthMode, + "filterOps.context.jwtID": filterOpsContextJwtId, + "filterOps.context.bearerTokenContextID": filterOpsContextBearerTokenContextId, + "filterOps.parentAccountID": filterOpsParentAccountId, + "filterOps.accountID": filterOpsAccountId, + "filterOps.workspaceID": filterOpsWorkspaceId, + "filterOps.vaultID": filterOpsVaultId, + "filterOps.resourceIDs": filterOpsResourceIDs, + "filterOps.actionType": filterOpsActionType, + "filterOps.resourceType": filterOpsResourceType, + "filterOps.tags": filterOpsTags, + "filterOps.responseCode": filterOpsResponseCode, + "filterOps.startTime": filterOpsStartTime, + "filterOps.endTime": filterOpsEndTime, + "filterOps.apiName": filterOpsApiName, + "filterOps.responseMessage": filterOpsResponseMessage, + "filterOps.httpMethod": filterOpsHttpMethod, + "filterOps.httpURI": filterOpsHttpUri, + "sortOps.sortBy": sortOpsSortBy, + "sortOps.orderBy": sortOpsOrderBy, + "afterOps.timestamp": afterOpsTimestamp, + "afterOps.changeID": afterOpsChangeId, + limit, + offset, + } = request; + const _queryParams: Record = {}; + if (filterOpsContextChangeId != null) { + _queryParams["filterOps.context.changeID"] = filterOpsContextChangeId; + } + + if (filterOpsContextRequestId != null) { + _queryParams["filterOps.context.requestID"] = filterOpsContextRequestId; + } + + if (filterOpsContextTraceId != null) { + _queryParams["filterOps.context.traceID"] = filterOpsContextTraceId; + } + + if (filterOpsContextSessionId != null) { + _queryParams["filterOps.context.sessionID"] = filterOpsContextSessionId; + } + + if (filterOpsContextActor != null) { + _queryParams["filterOps.context.actor"] = filterOpsContextActor; + } + + if (filterOpsContextActorType != null) { + _queryParams["filterOps.context.actorType"] = filterOpsContextActorType; + } + + if (filterOpsContextAccessType != null) { + _queryParams["filterOps.context.accessType"] = filterOpsContextAccessType; + } + + if (filterOpsContextIpAddress != null) { + _queryParams["filterOps.context.ipAddress"] = filterOpsContextIpAddress; + } + + if (filterOpsContextOrigin != null) { + _queryParams["filterOps.context.origin"] = filterOpsContextOrigin; + } + + if (filterOpsContextAuthMode != null) { + _queryParams["filterOps.context.authMode"] = filterOpsContextAuthMode; + } + + if (filterOpsContextJwtId != null) { + _queryParams["filterOps.context.jwtID"] = filterOpsContextJwtId; + } + + if (filterOpsContextBearerTokenContextId != null) { + _queryParams["filterOps.context.bearerTokenContextID"] = filterOpsContextBearerTokenContextId; + } + + if (filterOpsParentAccountId != null) { + _queryParams["filterOps.parentAccountID"] = filterOpsParentAccountId; + } + + _queryParams["filterOps.accountID"] = filterOpsAccountId; + if (filterOpsWorkspaceId != null) { + _queryParams["filterOps.workspaceID"] = filterOpsWorkspaceId; + } + + if (filterOpsVaultId != null) { + _queryParams["filterOps.vaultID"] = filterOpsVaultId; + } + + if (filterOpsResourceIDs != null) { + _queryParams["filterOps.resourceIDs"] = filterOpsResourceIDs; + } + + if (filterOpsActionType != null) { + _queryParams["filterOps.actionType"] = filterOpsActionType; + } + + if (filterOpsResourceType != null) { + _queryParams["filterOps.resourceType"] = filterOpsResourceType; + } + + if (filterOpsTags != null) { + _queryParams["filterOps.tags"] = filterOpsTags; + } + + if (filterOpsResponseCode != null) { + _queryParams["filterOps.responseCode"] = filterOpsResponseCode.toString(); + } + + if (filterOpsStartTime != null) { + _queryParams["filterOps.startTime"] = filterOpsStartTime; + } + + if (filterOpsEndTime != null) { + _queryParams["filterOps.endTime"] = filterOpsEndTime; + } + + if (filterOpsApiName != null) { + _queryParams["filterOps.apiName"] = filterOpsApiName; + } + + if (filterOpsResponseMessage != null) { + _queryParams["filterOps.responseMessage"] = filterOpsResponseMessage; + } + + if (filterOpsHttpMethod != null) { + _queryParams["filterOps.httpMethod"] = filterOpsHttpMethod; + } + + if (filterOpsHttpUri != null) { + _queryParams["filterOps.httpURI"] = filterOpsHttpUri; + } + + if (sortOpsSortBy != null) { + _queryParams["sortOps.sortBy"] = sortOpsSortBy; + } + + if (sortOpsOrderBy != null) { + _queryParams["sortOps.orderBy"] = sortOpsOrderBy; + } + + if (afterOpsTimestamp != null) { + _queryParams["afterOps.timestamp"] = afterOpsTimestamp; + } + + if (afterOpsChangeId != null) { + _queryParams["afterOps.changeID"] = afterOpsChangeId; + } + + if (limit != null) { + _queryParams["limit"] = limit.toString(); + } + + if (offset != null) { + _queryParams["offset"] = offset.toString(); + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/audit/events", + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1AuditResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling GET /v1/audit/events."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/audit/client/index.ts b/src/ _generated_/rest/api/resources/audit/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts b/src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts new file mode 100644 index 00000000..761482c1 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts @@ -0,0 +1,146 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * "filterOps.accountID": "filterOps.accountID" + * } + */ +export interface AuditServiceListAuditEventsRequest { + /** + * ID for the audit event. + */ + "filterOps.context.changeID"?: string; + /** + * ID for the request that caused the event. + */ + "filterOps.context.requestID"?: string; + /** + * ID for the request set by the service that received the request. + */ + "filterOps.context.traceID"?: string; + /** + * ID for the session in which the request was sent. + */ + "filterOps.context.sessionID"?: string; + /** + * Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. + */ + "filterOps.context.actor"?: string; + /** + * Type of member who sent the request. + */ + "filterOps.context.actorType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsContextActorType; + /** + * Type of access for the request. + */ + "filterOps.context.accessType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsContextAccessType; + /** + * IP Address of the client that made the request. + */ + "filterOps.context.ipAddress"?: string; + /** + * HTTP Origin request header (including scheme, hostname, and port) of the request. + */ + "filterOps.context.origin"?: string; + /** + * Authentication mode the `actor` used. + */ + "filterOps.context.authMode"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsContextAuthMode; + /** + * ID of the JWT token. + */ + "filterOps.context.jwtID"?: string; + /** + * Embedded User Context. + */ + "filterOps.context.bearerTokenContextID"?: string; + /** + * Resources with the specified parent account ID. + */ + "filterOps.parentAccountID"?: string; + /** + * Resources with the specified account ID. + */ + "filterOps.accountID": string; + /** + * Resources with the specified workspace ID. + */ + "filterOps.workspaceID"?: string; + /** + * Resources with the specified vault ID. + */ + "filterOps.vaultID"?: string; + /** + * Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of "\/\". For example, "VAULT/12345, USER/67890". + */ + "filterOps.resourceIDs"?: string; + /** + * Events with the specified action type. + */ + "filterOps.actionType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsActionType; + /** + * Resources with the specified type. + */ + "filterOps.resourceType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsResourceType; + /** + * Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, "login, get". + */ + "filterOps.tags"?: string; + /** + * HTTP response code of the request. + */ + "filterOps.responseCode"?: number; + /** + * Start timestamp for the query, in SQL format. + */ + "filterOps.startTime"?: string; + /** + * End timestamp for the query, in SQL format. + */ + "filterOps.endTime"?: string; + /** + * Name of the API called in the request. + */ + "filterOps.apiName"?: string; + /** + * Response message of the request. + */ + "filterOps.responseMessage"?: string; + /** + * HTTP method of the request. + */ + "filterOps.httpMethod"?: string; + /** + * HTTP URI of the request. + */ + "filterOps.httpURI"?: string; + /** + * Fully-qualified field by which to sort results. Field names should be in camel case (for example, "capitalization.camelCase"). + */ + "sortOps.sortBy"?: string; + /** + * Ascending or descending ordering of results. + */ + "sortOps.orderBy"?: Skyflow.AuditServiceListAuditEventsRequestSortOpsOrderBy; + /** + * Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. + */ + "afterOps.timestamp"?: string; + /** + * Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. + */ + "afterOps.changeID"?: string; + /** + * Number of results to return. + */ + limit?: number; + /** + * Record position at which to start returning results. + */ + offset?: number; +} diff --git a/src/ _generated_/rest/api/resources/audit/client/requests/index.ts b/src/ _generated_/rest/api/resources/audit/client/requests/index.ts new file mode 100644 index 00000000..ac03b1b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/requests/index.ts @@ -0,0 +1 @@ +export { type AuditServiceListAuditEventsRequest } from "./AuditServiceListAuditEventsRequest"; diff --git a/src/ _generated_/rest/api/resources/audit/index.ts b/src/ _generated_/rest/api/resources/audit/index.ts new file mode 100644 index 00000000..c9240f83 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts new file mode 100644 index 00000000..69706d72 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsActionType = + | "NONE" + | "ASSIGN" + | "CREATE" + | "DELETE" + | "EXECUTE" + | "LIST" + | "READ" + | "UNASSIGN" + | "UPDATE" + | "VALIDATE" + | "LOGIN" + | "ROTATE" + | "SCHEDULEROTATION" + | "SCHEDULEROTATIONALERT" + | "IMPORT" + | "GETIMPORTPARAMETERS" + | "PING" + | "GETCLOUDPROVIDER"; +export const AuditServiceListAuditEventsRequestFilterOpsActionType = { + None: "NONE", + Assign: "ASSIGN", + Create: "CREATE", + Delete: "DELETE", + Execute: "EXECUTE", + List: "LIST", + Read: "READ", + Unassign: "UNASSIGN", + Update: "UPDATE", + Validate: "VALIDATE", + Login: "LOGIN", + Rotate: "ROTATE", + Schedulerotation: "SCHEDULEROTATION", + Schedulerotationalert: "SCHEDULEROTATIONALERT", + Import: "IMPORT", + Getimportparameters: "GETIMPORTPARAMETERS", + Ping: "PING", + Getcloudprovider: "GETCLOUDPROVIDER", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts new file mode 100644 index 00000000..3591fd9a --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsContextAccessType = "ACCESS_NONE" | "API" | "SQL" | "OKTA_LOGIN"; +export const AuditServiceListAuditEventsRequestFilterOpsContextAccessType = { + AccessNone: "ACCESS_NONE", + Api: "API", + Sql: "SQL", + OktaLogin: "OKTA_LOGIN", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts new file mode 100644 index 00000000..271f9b03 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsContextActorType = "NONE" | "USER" | "SERVICE_ACCOUNT"; +export const AuditServiceListAuditEventsRequestFilterOpsContextActorType = { + None: "NONE", + User: "USER", + ServiceAccount: "SERVICE_ACCOUNT", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts new file mode 100644 index 00000000..e10a492c --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsContextAuthMode = + | "AUTH_NONE" + | "OKTA_JWT" + | "SERVICE_ACCOUNT_JWT" + | "PAT_JWT"; +export const AuditServiceListAuditEventsRequestFilterOpsContextAuthMode = { + AuthNone: "AUTH_NONE", + OktaJwt: "OKTA_JWT", + ServiceAccountJwt: "SERVICE_ACCOUNT_JWT", + PatJwt: "PAT_JWT", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts new file mode 100644 index 00000000..2ccebbdb --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts @@ -0,0 +1,67 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsResourceType = + | "NONE_API" + | "ACCOUNT" + | "AUDIT" + | "BASE_DATA_TYPE" + | "FIELD_TEMPLATE" + | "FILE" + | "KEY" + | "POLICY" + | "PROTO_PARSE" + | "RECORD" + | "ROLE" + | "RULE" + | "SECRET" + | "SERVICE_ACCOUNT" + | "TOKEN" + | "USER" + | "VAULT" + | "VAULT_TEMPLATE" + | "WORKSPACE" + | "TABLE" + | "POLICY_TEMPLATE" + | "MEMBER" + | "TAG" + | "CONNECTION" + | "MIGRATION" + | "SCHEDULED_JOB" + | "JOB" + | "COLUMN_NAME" + | "NETWORK_TOKEN" + | "SUBSCRIPTION"; +export const AuditServiceListAuditEventsRequestFilterOpsResourceType = { + NoneApi: "NONE_API", + Account: "ACCOUNT", + Audit: "AUDIT", + BaseDataType: "BASE_DATA_TYPE", + FieldTemplate: "FIELD_TEMPLATE", + File: "FILE", + Key: "KEY", + Policy: "POLICY", + ProtoParse: "PROTO_PARSE", + Record: "RECORD", + Role: "ROLE", + Rule: "RULE", + Secret: "SECRET", + ServiceAccount: "SERVICE_ACCOUNT", + Token: "TOKEN", + User: "USER", + Vault: "VAULT", + VaultTemplate: "VAULT_TEMPLATE", + Workspace: "WORKSPACE", + Table: "TABLE", + PolicyTemplate: "POLICY_TEMPLATE", + Member: "MEMBER", + Tag: "TAG", + Connection: "CONNECTION", + Migration: "MIGRATION", + ScheduledJob: "SCHEDULED_JOB", + Job: "JOB", + ColumnName: "COLUMN_NAME", + NetworkToken: "NETWORK_TOKEN", + Subscription: "SUBSCRIPTION", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts new file mode 100644 index 00000000..8a12bebb --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestSortOpsOrderBy = "ASCENDING" | "DESCENDING"; +export const AuditServiceListAuditEventsRequestSortOpsOrderBy = { + Ascending: "ASCENDING", + Descending: "DESCENDING", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/index.ts b/src/ _generated_/rest/api/resources/audit/types/index.ts new file mode 100644 index 00000000..efdcfb41 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/index.ts @@ -0,0 +1,6 @@ +export * from "./AuditServiceListAuditEventsRequestFilterOpsContextActorType"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsContextAccessType"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsContextAuthMode"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsActionType"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsResourceType"; +export * from "./AuditServiceListAuditEventsRequestSortOpsOrderBy"; diff --git a/src/ _generated_/rest/api/resources/authentication/client/Client.ts b/src/ _generated_/rest/api/resources/authentication/client/Client.ts new file mode 100644 index 00000000..7c3b0039 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/Client.ts @@ -0,0 +1,137 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Authentication { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Authentication { + constructor(protected readonly _options: Authentication.Options) {} + + /** + *

Generates a Bearer Token to authenticate with Skyflow. This method doesn't require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

+ * + * @param {Skyflow.V1GetAuthTokenRequest} request + * @param {Authentication.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.authentication.authenticationServiceGetAuthToken({ + * grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", + * assertion: "eyLhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaXNzIjoiY29tcGFueSIsImV4cCI6MTYxNTE5MzgwNywiaWF0IjoxNjE1MTY1MDQwLCJhdWQiOiKzb21lYXVkaWVuY2UifQ.4pcPyMDQ9o1PSyXnrXCjTwXyr4BSezdI1AVTmud2fU3" + * }) + */ + public authenticationServiceGetAuthToken( + request: Skyflow.V1GetAuthTokenRequest, + requestOptions?: Authentication.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__authenticationServiceGetAuthToken(request, requestOptions)); + } + + private async __authenticationServiceGetAuthToken( + request: Skyflow.V1GetAuthTokenRequest, + requestOptions?: Authentication.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/auth/sa/oauth/token", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1GetAuthTokenResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError( + _response.error.body as Record, + _response.rawResponse, + ); + case 401: + throw new Skyflow.UnauthorizedError( + _response.error.body as Record, + _response.rawResponse, + ); + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/auth/sa/oauth/token."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/authentication/client/index.ts b/src/ _generated_/rest/api/resources/authentication/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts b/src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts new file mode 100644 index 00000000..a1ef4fba --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * { + * grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", + * assertion: "eyLhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaXNzIjoiY29tcGFueSIsImV4cCI6MTYxNTE5MzgwNywiaWF0IjoxNjE1MTY1MDQwLCJhdWQiOiKzb21lYXVkaWVuY2UifQ.4pcPyMDQ9o1PSyXnrXCjTwXyr4BSezdI1AVTmud2fU3" + * } + */ +export interface V1GetAuthTokenRequest { + /** Grant type of the request. Set this to `urn:ietf:params:oauth:grant-type:jwt-bearer`. */ + grant_type: string; + /** User-signed JWT token that contains the following fields:
  • iss: Issuer of the JWT.
  • key: Unique identifier for the key.
  • aud: Recipient the JWT is intended for.
  • exp: Time the JWT expires.
  • sub: Subject of the JWT.
  • ctx: (Optional) Value for Context-aware authorization.
*/ + assertion: string; + /** Subject token. */ + subject_token?: string; + /** Subject token type. */ + subject_token_type?: string; + /** Token use type. Either `delegation` or `impersonation`. */ + requested_token_use?: string; + /** Subset of available roles to associate with the requested token. Uses the format "role:\ role:\". */ + scope?: string; +} diff --git a/src/ _generated_/rest/api/resources/authentication/client/requests/index.ts b/src/ _generated_/rest/api/resources/authentication/client/requests/index.ts new file mode 100644 index 00000000..635fca22 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/requests/index.ts @@ -0,0 +1 @@ +export { type V1GetAuthTokenRequest } from "./V1GetAuthTokenRequest"; diff --git a/src/ _generated_/rest/api/resources/authentication/index.ts b/src/ _generated_/rest/api/resources/authentication/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/binLookup/client/Client.ts b/src/ _generated_/rest/api/resources/binLookup/client/Client.ts new file mode 100644 index 00000000..2a88056a --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/Client.ts @@ -0,0 +1,124 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace BinLookup { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class BinLookup { + constructor(protected readonly _options: BinLookup.Options) {} + + /** + * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. + * + * @param {Skyflow.V1BinListRequest} request + * @param {BinLookup.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.binLookup.binListServiceListCardsOfBin({ + * BIN: "012345" + * }) + */ + public binListServiceListCardsOfBin( + request: Skyflow.V1BinListRequest = {}, + requestOptions?: BinLookup.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__binListServiceListCardsOfBin(request, requestOptions)); + } + + private async __binListServiceListCardsOfBin( + request: Skyflow.V1BinListRequest = {}, + requestOptions?: BinLookup.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/card_lookup", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BinListResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/card_lookup."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/binLookup/client/index.ts b/src/ _generated_/rest/api/resources/binLookup/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts b/src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts new file mode 100644 index 00000000..7bf1c52e --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * BIN: "012345" + * } + */ +export interface V1BinListRequest { + /** Fields to return. If not specified, all fields are returned. */ + fields?: string[]; + /** BIN of the card. */ + BIN?: string; + vault_schema_config?: Skyflow.V1VaultSchemaConfig; + /** skyflow_id of the record. */ + skyflow_id?: string; +} diff --git a/src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts b/src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts new file mode 100644 index 00000000..b3ac57f5 --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts @@ -0,0 +1 @@ +export { type V1BinListRequest } from "./V1BinListRequest"; diff --git a/src/ _generated_/rest/api/resources/binLookup/index.ts b/src/ _generated_/rest/api/resources/binLookup/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/index.ts b/src/ _generated_/rest/api/resources/index.ts new file mode 100644 index 00000000..a6ae3aed --- /dev/null +++ b/src/ _generated_/rest/api/resources/index.ts @@ -0,0 +1,14 @@ +export * as audit from "./audit"; +export * from "./audit/types"; +export * as records from "./records"; +export * from "./records/types"; +export * as binLookup from "./binLookup"; +export * as tokens from "./tokens"; +export * as query from "./query"; +export * as authentication from "./authentication"; +export * from "./audit/client/requests"; +export * from "./binLookup/client/requests"; +export * from "./records/client/requests"; +export * from "./tokens/client/requests"; +export * from "./query/client/requests"; +export * from "./authentication/client/requests"; diff --git a/src/ _generated_/rest/api/resources/query/client/Client.ts b/src/ _generated_/rest/api/resources/query/client/Client.ts new file mode 100644 index 00000000..d6339a16 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/Client.ts @@ -0,0 +1,127 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Query { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Query { + constructor(protected readonly _options: Query.Options) {} + + /** + * Returns records for a valid SQL query. This endpoint
  • Can return redacted record values.
  • Supports only the SELECT command.
  • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
  • Can't modify the vault or perform transactions.
  • Can't return tokens.
  • Can't return file download or render URLs.
  • Doesn't support the WHERE keyword with columns using transient tokenization.
  • Doesn't support `?` conditional for columns with column-level encryption disabled.
    • + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.QueryServiceExecuteQueryBody} request + * @param {Query.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.query.queryServiceExecuteQuery("vaultID", { + * query: "select * from opportunities where id=\"01010000ade21cded569d43944544ec6\"" + * }) + */ + public queryServiceExecuteQuery( + vaultId: string, + request: Skyflow.QueryServiceExecuteQueryBody = {}, + requestOptions?: Query.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__queryServiceExecuteQuery(vaultId, request, requestOptions)); + } + + private async __queryServiceExecuteQuery( + vaultId: string, + request: Skyflow.QueryServiceExecuteQueryBody = {}, + requestOptions?: Query.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/query`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1GetQueryResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/vaults/{vaultID}/query."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/query/client/index.ts b/src/ _generated_/rest/api/resources/query/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts b/src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts new file mode 100644 index 00000000..45b1a14c --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * { + * query: "select * from opportunities where id=\"01010000ade21cded569d43944544ec6\"" + * } + */ +export interface QueryServiceExecuteQueryBody { + /** The SQL query to execute.

      Supported commands:
      • SELECT
      Supported operators:
      • >
      • <
      • =
      • AND
      • OR
      • NOT
      • LIKE
      • ILIKE
      • NULL
      • NOT NULL
      Supported keywords:
      • FROM
      • JOIN
      • INNER JOIN
      • LEFT OUTER JOIN
      • LEFT JOIN
      • RIGHT OUTER JOIN
      • RIGHT JOIN
      • FULL OUTER JOIN
      • FULL JOIN
      • OFFSET
      • LIMIT
      • WHERE
      Supported functions:
      • AVG()
      • SUM()
      • COUNT()
      • MIN()
      • MAX()
      • REDACTION()
      */ + query?: string; +} diff --git a/src/ _generated_/rest/api/resources/query/client/requests/index.ts b/src/ _generated_/rest/api/resources/query/client/requests/index.ts new file mode 100644 index 00000000..25ea32e1 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/requests/index.ts @@ -0,0 +1 @@ +export { type QueryServiceExecuteQueryBody } from "./QueryServiceExecuteQueryBody"; diff --git a/src/ _generated_/rest/api/resources/query/index.ts b/src/ _generated_/rest/api/resources/query/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/records/client/Client.ts b/src/ _generated_/rest/api/resources/records/client/Client.ts new file mode 100644 index 00000000..96ea98ce --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/Client.ts @@ -0,0 +1,1140 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; +import * as fs from "fs"; +import { Blob } from "buffer"; + +export declare namespace Records { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Records { + constructor(protected readonly _options: Records.Options) {} + + /** + * Performs multiple record operations in a single transaction. + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.RecordServiceBatchOperationBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceBatchOperation("vaultID", { + * records: [{ + * fields: { + * "drivers_license_number": "89867453", + * "name": "Connor", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * }, + * tableName: "persons", + * method: "POST", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * downloadURL: false, + * upsert: "drivers_license_number" + * }, { + * tableName: "persons", + * method: "GET", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * ID: "f1dbc55c-7c9b-495d-9a36-72bb2b619202", + * downloadURL: true + * }] + * }) + */ + public recordServiceBatchOperation( + vaultId: string, + request: Skyflow.RecordServiceBatchOperationBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceBatchOperation(vaultId, request, requestOptions), + ); + } + + private async __recordServiceBatchOperation( + vaultId: string, + request: Skyflow.RecordServiceBatchOperationBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BatchOperationResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/vaults/{vaultID}."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Gets the specified records from a table. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table that contains the records. + * @param {Skyflow.RecordServiceBulkGetRecordRequest} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceBulkGetRecord("vaultID", "objectName") + */ + public recordServiceBulkGetRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceBulkGetRecord(vaultId, objectName, request, requestOptions), + ); + } + + private async __recordServiceBulkGetRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const { + skyflow_ids: skyflowIds, + redaction, + tokenization, + fields, + offset, + limit, + downloadURL: downloadUrl, + column_name: columnName, + column_values: columnValues, + order_by: orderBy, + } = request; + const _queryParams: Record = {}; + if (skyflowIds != null) { + if (Array.isArray(skyflowIds)) { + _queryParams["skyflow_ids"] = skyflowIds.map((item) => item); + } else { + _queryParams["skyflow_ids"] = skyflowIds; + } + } + + if (redaction != null) { + _queryParams["redaction"] = redaction; + } + + if (tokenization != null) { + _queryParams["tokenization"] = tokenization.toString(); + } + + if (fields != null) { + if (Array.isArray(fields)) { + _queryParams["fields"] = fields.map((item) => item); + } else { + _queryParams["fields"] = fields; + } + } + + if (offset != null) { + _queryParams["offset"] = offset; + } + + if (limit != null) { + _queryParams["limit"] = limit; + } + + if (downloadUrl != null) { + _queryParams["downloadURL"] = downloadUrl.toString(); + } + + if (columnName != null) { + _queryParams["column_name"] = columnName; + } + + if (columnValues != null) { + if (Array.isArray(columnValues)) { + _queryParams["column_values"] = columnValues.map((item) => item); + } else { + _queryParams["column_values"] = columnValues; + } + } + + if (orderBy != null) { + _queryParams["order_by"] = orderBy; + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BulkGetRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling GET /v1/vaults/{vaultID}/{objectName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Inserts a record in the specified table.

      The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

      Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {Skyflow.RecordServiceInsertRecordBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceInsertRecord("vaultID", "objectName", { + * records: [{ + * fields: { + * "drivers_license_number": "13456789", + * "name": "John", + * "phone_number": "1236784563", + * "ssn": "123-45-6789" + * } + * }, { + * fields: { + * "drivers_license_number": "98765432", + * "name": "James", + * "phone_number": "9876543215", + * "ssn": "345-45-9876" + * } + * }], + * tokenization: true, + * upsert: "drivers_license_number", + * homogeneous: false + * }) + */ + public recordServiceInsertRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceInsertRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceInsertRecord(vaultId, objectName, request, requestOptions), + ); + } + + private async __recordServiceInsertRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceInsertRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1InsertRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/{objectName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Deletes the specified records from a table. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {Skyflow.RecordServiceBulkDeleteRecordBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceBulkDeleteRecord("vaultID", "objectName", { + * skyflow_ids: ["51782ea4-91a5-4430-a06d-f4b76efd3d2f", "110ce08f-6059-4874-b1ae-7c6651d286ff"] + * }) + */ + public recordServiceBulkDeleteRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkDeleteRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceBulkDeleteRecord(vaultId, objectName, request, requestOptions), + ); + } + + private async __recordServiceBulkDeleteRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkDeleteRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}`, + ), + method: "DELETE", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BulkDeleteRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling DELETE /v1/vaults/{vaultID}/{objectName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns the specified record from a table. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {Skyflow.RecordServiceGetRecordRequest} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceGetRecord("vaultID", "objectName", "ID") + */ + public recordServiceGetRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceGetRecord(vaultId, objectName, id, request, requestOptions), + ); + } + + private async __recordServiceGetRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const { redaction, tokenization, fields, downloadURL: downloadUrl } = request; + const _queryParams: Record = {}; + if (redaction != null) { + _queryParams["redaction"] = redaction; + } + + if (tokenization != null) { + _queryParams["tokenization"] = tokenization.toString(); + } + + if (fields != null) { + if (Array.isArray(fields)) { + _queryParams["fields"] = fields.map((item) => item); + } else { + _queryParams["fields"] = fields; + } + } + + if (downloadUrl != null) { + _queryParams["downloadURL"] = downloadUrl.toString(); + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1FieldRecords, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling GET /v1/vaults/{vaultID}/{objectName}/{ID}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Updates the specified record in a table.

      When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed.

      The time-to-live (TTL) for a transient field resets when the field value is updated. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {Skyflow.RecordServiceUpdateRecordBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceUpdateRecord("vaultID", "objectName", "ID", { + * record: { + * fields: { + * "drivers_license_number": "89867453", + * "name": "Steve Smith", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * } + * }, + * tokenization: true + * }) + */ + public recordServiceUpdateRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceUpdateRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceUpdateRecord(vaultId, objectName, id, request, requestOptions), + ); + } + + private async __recordServiceUpdateRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceUpdateRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}`, + ), + method: "PUT", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1UpdateRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling PUT /v1/vaults/{vaultID}/{objectName}/{ID}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Deletes the specified record from a table.

      Note: This method doesn't delete transient field tokens. Transient field values are available until they expire based on the fields' time-to-live (TTL) setting. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {string} id - `skyflow_id` of the record to delete. + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceDeleteRecord("vaultID", "objectName", "ID") + */ + public recordServiceDeleteRecord( + vaultId: string, + objectName: string, + id: string, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceDeleteRecord(vaultId, objectName, id, requestOptions), + ); + } + + private async __recordServiceDeleteRecord( + vaultId: string, + objectName: string, + id: string, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}`, + ), + method: "DELETE", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DeleteRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling DELETE /v1/vaults/{vaultID}/{objectName}/{ID}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Uploads a file to the specified record. + * + * @param {File | fs.ReadStream | Blob | undefined} file + * @param {string} vaultId + * @param {string} objectName + * @param {string} id + * @param {Skyflow.FileServiceUploadFileRequest} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.fileServiceUploadFile(fs.createReadStream("/path/to/your/file"), "vaultID", "objectName", "ID", {}) + */ + public fileServiceUploadFile( + file: File | fs.ReadStream | Blob | undefined, + vaultId: string, + objectName: string, + id: string, + request: Skyflow.FileServiceUploadFileRequest, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__fileServiceUploadFile(file, vaultId, objectName, id, request, requestOptions), + ); + } + + private async __fileServiceUploadFile( + file: File | fs.ReadStream | Blob | undefined, + vaultId: string, + objectName: string, + id: string, + request: Skyflow.FileServiceUploadFileRequest, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _request = await core.newFormData(); + if (file != null && request.columnName != null) { + await _request.appendFile(request.columnName, file); + + } + + const _maybeEncodedRequest = await _request.getRequest(); + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}/files`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ..._maybeEncodedRequest.headers, + ...requestOptions?.headers, + }, + requestType: "file", + duplex: _maybeEncodedRequest.duplex, + body: _maybeEncodedRequest.body, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1UpdateRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/{objectName}/{ID}/files.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Deletes a file from the specified record. + * + * @param {string} vaultId - ID of the vault. + * @param {string} tableName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {string} columnName - Name of the column that contains the file. + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.fileServiceDeleteFile("vaultID", "tableName", "ID", "columnName") + */ + public fileServiceDeleteFile( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__fileServiceDeleteFile(vaultId, tableName, id, columnName, requestOptions), + ); + } + + private async __fileServiceDeleteFile( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(tableName)}/${encodeURIComponent(id)}/files/${encodeURIComponent(columnName)}`, + ), + method: "DELETE", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DeleteFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling DELETE /v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns the anti-virus scan status of a file. + * + * @param {string} vaultId - ID of the vault. + * @param {string} tableName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {string} columnName - Name of the column that contains the file. + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.fileServiceGetFileScanStatus("vaultID", "tableName", "ID", "columnName") + */ + public fileServiceGetFileScanStatus( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__fileServiceGetFileScanStatus(vaultId, tableName, id, columnName, requestOptions), + ); + } + + private async __fileServiceGetFileScanStatus( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(tableName)}/${encodeURIComponent(id)}/files/${encodeURIComponent(columnName)}/scan-status`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1GetFileScanStatusResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling GET /v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}/scan-status.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/records/client/index.ts b/src/ _generated_/rest/api/resources/records/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts new file mode 100644 index 00000000..9a4af29f --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * {} + */ +export interface FileServiceUploadFileRequest { + /** Name of the column to store the file in. The column must have a file data type. */ + columnName?: string; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts new file mode 100644 index 00000000..e2b9c606 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * records: [{ + * fields: { + * "drivers_license_number": "89867453", + * "name": "Connor", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * }, + * tableName: "persons", + * method: "POST", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * downloadURL: false, + * upsert: "drivers_license_number" + * }, { + * tableName: "persons", + * method: "GET", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * ID: "f1dbc55c-7c9b-495d-9a36-72bb2b619202", + * downloadURL: true + * }] + * } + */ +export interface RecordServiceBatchOperationBody { + /** Record operations to perform. */ + records?: Skyflow.V1BatchRecord[]; + /** Continue performing operations on partial errors. */ + continueOnError?: boolean; + byot?: Skyflow.V1Byot; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts new file mode 100644 index 00000000..c919ac55 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * { + * skyflow_ids: ["51782ea4-91a5-4430-a06d-f4b76efd3d2f", "110ce08f-6059-4874-b1ae-7c6651d286ff"] + * } + */ +export interface RecordServiceBulkDeleteRecordBody { + /** `skyflow_id` values of the records to delete. If `*` is specified, this operation deletes all records in the table. */ + skyflow_ids?: string[]; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts new file mode 100644 index 00000000..a0753c0e --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts @@ -0,0 +1,52 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * {} + */ +export interface RecordServiceBulkGetRecordRequest { + /** + * `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.

      If not specified, returns the first 25 records in the table. + */ + skyflow_ids?: string | string[]; + /** + * Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. + */ + redaction?: Skyflow.RecordServiceBulkGetRecordRequestRedaction; + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. + */ + tokenization?: boolean; + /** + * Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.

      If not specified, returns all fields. + */ + fields?: string | string[]; + /** + * Record position at which to start receiving data. + */ + offset?: string; + /** + * Number of record to return. Maximum 25. + */ + limit?: string; + /** + * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. + */ + downloadURL?: boolean; + /** + * Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. + */ + column_name?: string; + /** + * Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.

      `column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. + */ + column_values?: string | string[]; + /** + * Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. + */ + order_by?: Skyflow.RecordServiceBulkGetRecordRequestOrderBy; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts new file mode 100644 index 00000000..2bfb3b93 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * {} + */ +export interface RecordServiceGetRecordRequest { + /** + * Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. + */ + redaction?: Skyflow.RecordServiceGetRecordRequestRedaction; + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. + */ + tokenization?: boolean; + /** + * Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.

      If not specified, returns all fields. + */ + fields?: string | string[]; + /** + * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. + */ + downloadURL?: boolean; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts new file mode 100644 index 00000000..fa2d157b --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts @@ -0,0 +1,40 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * records: [{ + * fields: { + * "drivers_license_number": "13456789", + * "name": "John", + * "phone_number": "1236784563", + * "ssn": "123-45-6789" + * } + * }, { + * fields: { + * "drivers_license_number": "98765432", + * "name": "James", + * "phone_number": "9876543215", + * "ssn": "345-45-9876" + * } + * }], + * tokenization: true, + * upsert: "drivers_license_number", + * homogeneous: false + * } + */ +export interface RecordServiceInsertRecordBody { + /** Record values and tokens. */ + records?: Skyflow.V1FieldRecords[]; + /** If `true`, this operation returns tokens for fields with tokenization enabled. */ + tokenization?: boolean; + /** Name of a unique column in the table. Uses upsert operations to check if a record exists based on the unique column's value. If a matching record exists, the record updates with the values you provide. If a matching record doesn't exist, the upsert operation inserts a new record.

      When you upsert a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed. */ + upsert?: string; + /** If `true`, this operation mandates that all the records have the same fields. This parameter does not work with upsert. */ + homogeneous?: boolean; + byot?: Skyflow.V1Byot; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts new file mode 100644 index 00000000..c9f6df32 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * record: { + * fields: { + * "drivers_license_number": "89867453", + * "name": "Steve Smith", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * } + * }, + * tokenization: true + * } + */ +export interface RecordServiceUpdateRecordBody { + record?: Skyflow.V1FieldRecords; + /** If `true`, this operation returns tokens for fields with tokenization enabled. */ + tokenization?: boolean; + byot?: Skyflow.V1Byot; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/index.ts b/src/ _generated_/rest/api/resources/records/client/requests/index.ts new file mode 100644 index 00000000..85290118 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/index.ts @@ -0,0 +1,7 @@ +export { type RecordServiceBatchOperationBody } from "./RecordServiceBatchOperationBody"; +export { type RecordServiceBulkGetRecordRequest } from "./RecordServiceBulkGetRecordRequest"; +export { type RecordServiceInsertRecordBody } from "./RecordServiceInsertRecordBody"; +export { type RecordServiceBulkDeleteRecordBody } from "./RecordServiceBulkDeleteRecordBody"; +export { type RecordServiceGetRecordRequest } from "./RecordServiceGetRecordRequest"; +export { type RecordServiceUpdateRecordBody } from "./RecordServiceUpdateRecordBody"; +export { type FileServiceUploadFileRequest } from "./FileServiceUploadFileRequest"; diff --git a/src/ _generated_/rest/api/resources/records/index.ts b/src/ _generated_/rest/api/resources/records/index.ts new file mode 100644 index 00000000..c9240f83 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts new file mode 100644 index 00000000..b2f4cefb --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RecordServiceBulkGetRecordRequestOrderBy = "ASCENDING" | "DESCENDING" | "NONE"; +export const RecordServiceBulkGetRecordRequestOrderBy = { + Ascending: "ASCENDING", + Descending: "DESCENDING", + None: "NONE", +} as const; diff --git a/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts new file mode 100644 index 00000000..d8be1627 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RecordServiceBulkGetRecordRequestRedaction = "DEFAULT" | "REDACTED" | "MASKED" | "PLAIN_TEXT"; +export const RecordServiceBulkGetRecordRequestRedaction = { + Default: "DEFAULT", + Redacted: "REDACTED", + Masked: "MASKED", + PlainText: "PLAIN_TEXT", +} as const; diff --git a/src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts b/src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts new file mode 100644 index 00000000..06bd6235 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RecordServiceGetRecordRequestRedaction = "DEFAULT" | "REDACTED" | "MASKED" | "PLAIN_TEXT"; +export const RecordServiceGetRecordRequestRedaction = { + Default: "DEFAULT", + Redacted: "REDACTED", + Masked: "MASKED", + PlainText: "PLAIN_TEXT", +} as const; diff --git a/src/ _generated_/rest/api/resources/records/types/index.ts b/src/ _generated_/rest/api/resources/records/types/index.ts new file mode 100644 index 00000000..23472a04 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/index.ts @@ -0,0 +1,3 @@ +export * from "./RecordServiceBulkGetRecordRequestRedaction"; +export * from "./RecordServiceBulkGetRecordRequestOrderBy"; +export * from "./RecordServiceGetRecordRequestRedaction"; diff --git a/src/ _generated_/rest/api/resources/tokens/client/Client.ts b/src/ _generated_/rest/api/resources/tokens/client/Client.ts new file mode 100644 index 00000000..5f5b90fc --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/Client.ts @@ -0,0 +1,225 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Tokens { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Tokens { + constructor(protected readonly _options: Tokens.Options) {} + + /** + * Returns records that correspond to the specified tokens. + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.V1DetokenizePayload} request + * @param {Tokens.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.tokens.recordServiceDetokenize("vaultID", { + * detokenizationParameters: [{ + * token: "afbd1074-51c1-4a16-9eee-e2c0ecb52125", + * redaction: "PLAIN_TEXT" + * }, { + * token: "05383487-fcae-42e5-a48e-5bd62a51af12", + * redaction: "DEFAULT" + * }], + * downloadURL: false + * }) + */ + public recordServiceDetokenize( + vaultId: string, + request: Skyflow.V1DetokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__recordServiceDetokenize(vaultId, request, requestOptions)); + } + + private async __recordServiceDetokenize( + vaultId: string, + request: Skyflow.V1DetokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/detokenize`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DetokenizeResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/detokenize.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

      Note: This endpoint doesn't insert records—it returns tokens for existing values. To insert records and tokenize that new record's values, see Insert Record and the tokenization parameter. + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.V1TokenizePayload} request + * @param {Tokens.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.tokens.recordServiceTokenize("vaultID") + */ + public recordServiceTokenize( + vaultId: string, + request: Skyflow.V1TokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__recordServiceTokenize(vaultId, request, requestOptions)); + } + + private async __recordServiceTokenize( + vaultId: string, + request: Skyflow.V1TokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/tokenize`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1TokenizeResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/tokenize.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/tokens/client/index.ts b/src/ _generated_/rest/api/resources/tokens/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts b/src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts new file mode 100644 index 00000000..cbb631a3 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * detokenizationParameters: [{ + * token: "afbd1074-51c1-4a16-9eee-e2c0ecb52125", + * redaction: "PLAIN_TEXT" + * }, { + * token: "05383487-fcae-42e5-a48e-5bd62a51af12", + * redaction: "DEFAULT" + * }], + * downloadURL: false + * } + */ +export interface V1DetokenizePayload { + /** Detokenization details. */ + detokenizationParameters?: Skyflow.V1DetokenizeRecordRequest[]; + /** If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. */ + downloadURL?: boolean; + /** If `true`, the detokenization request continues even if an error occurs. */ + continueOnError?: boolean; +} diff --git a/src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts b/src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts new file mode 100644 index 00000000..3564355a --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * {} + */ +export interface V1TokenizePayload { + /** Tokenization details. */ + tokenizationParameters?: Skyflow.V1TokenizeRecordRequest[]; +} diff --git a/src/ _generated_/rest/api/resources/tokens/client/requests/index.ts b/src/ _generated_/rest/api/resources/tokens/client/requests/index.ts new file mode 100644 index 00000000..6f3f1781 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/requests/index.ts @@ -0,0 +1,2 @@ +export { type V1DetokenizePayload } from "./V1DetokenizePayload"; +export { type V1TokenizePayload } from "./V1TokenizePayload"; diff --git a/src/ _generated_/rest/api/resources/tokens/index.ts b/src/ _generated_/rest/api/resources/tokens/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/tokens-api.ts b/src/ _generated_/rest/api/tokens-api.ts deleted file mode 100644 index 7f3bc5c2..00000000 --- a/src/ _generated_/rest/api/tokens-api.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
      • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
      • Production: https://_*identifier*.vault.skyflowapis.com
      When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1DetokenizePayload } from '../models'; -// @ts-ignore -import type { V1DetokenizeResponse } from '../models'; -// @ts-ignore -import type { V1TokenizePayload } from '../models'; -// @ts-ignore -import type { V1TokenizeResponse } from '../models'; -/** - * TokensApi - axios parameter creator - * @export - */ -export const TokensApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDetokenize: async (vaultID: string, detokenizePayload: V1DetokenizePayload, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceDetokenize', 'vaultID', vaultID) - // verify required parameter 'detokenizePayload' is not null or undefined - assertParamExists('recordServiceDetokenize', 'detokenizePayload', detokenizePayload) - const localVarPath = `/v1/vaults/{vaultID}/detokenize` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(detokenizePayload, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceTokenize: async (vaultID: string, tokenizePayload: V1TokenizePayload, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceTokenize', 'vaultID', vaultID) - // verify required parameter 'tokenizePayload' is not null or undefined - assertParamExists('recordServiceTokenize', 'tokenizePayload', tokenizePayload) - const localVarPath = `/v1/vaults/{vaultID}/tokenize` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(tokenizePayload, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * TokensApi - functional programming interface - * @export - */ -export const TokensApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = TokensApiAxiosParamCreator(configuration) - return { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceDetokenize(vaultID, detokenizePayload, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['TokensApi.recordServiceDetokenize']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceTokenize(vaultID, tokenizePayload, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['TokensApi.recordServiceTokenize']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * TokensApi - factory interface - * @export - */ -export const TokensApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = TokensApiFp(configuration) - return { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceDetokenize(vaultID, detokenizePayload, options).then((request) => request(axios, basePath)); - }, - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceTokenize(vaultID, tokenizePayload, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * TokensApi - interface - * @export - * @interface TokensApi - */ -export interface TokensApiInterface { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApiInterface - */ - recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApiInterface - */ - recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * TokensApi - object-oriented interface - * @export - * @class TokensApi - * @extends {BaseAPI} - */ -export class TokensApi extends BaseAPI implements TokensApiInterface { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApi - */ - public recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig) { - return TokensApiFp(this.configuration).recordServiceDetokenize(vaultID, detokenizePayload, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApi - */ - public recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig) { - return TokensApiFp(this.configuration).recordServiceTokenize(vaultID, tokenizePayload, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts b/src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts new file mode 100644 index 00000000..a54b5edb --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts @@ -0,0 +1,70 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of the resource. + */ +export type AuditEventAuditResourceType = + | "NONE_API" + | "ACCOUNT" + | "AUDIT" + | "BASE_DATA_TYPE" + | "FIELD_TEMPLATE" + | "FILE" + | "KEY" + | "POLICY" + | "PROTO_PARSE" + | "RECORD" + | "ROLE" + | "RULE" + | "SECRET" + | "SERVICE_ACCOUNT" + | "TOKEN" + | "USER" + | "VAULT" + | "VAULT_TEMPLATE" + | "WORKSPACE" + | "TABLE" + | "POLICY_TEMPLATE" + | "MEMBER" + | "TAG" + | "CONNECTION" + | "MIGRATION" + | "SCHEDULED_JOB" + | "JOB" + | "COLUMN_NAME" + | "NETWORK_TOKEN" + | "SUBSCRIPTION"; +export const AuditEventAuditResourceType = { + NoneApi: "NONE_API", + Account: "ACCOUNT", + Audit: "AUDIT", + BaseDataType: "BASE_DATA_TYPE", + FieldTemplate: "FIELD_TEMPLATE", + File: "FILE", + Key: "KEY", + Policy: "POLICY", + ProtoParse: "PROTO_PARSE", + Record: "RECORD", + Role: "ROLE", + Rule: "RULE", + Secret: "SECRET", + ServiceAccount: "SERVICE_ACCOUNT", + Token: "TOKEN", + User: "USER", + Vault: "VAULT", + VaultTemplate: "VAULT_TEMPLATE", + Workspace: "WORKSPACE", + Table: "TABLE", + PolicyTemplate: "POLICY_TEMPLATE", + Member: "MEMBER", + Tag: "TAG", + Connection: "CONNECTION", + Migration: "MIGRATION", + ScheduledJob: "SCHEDULED_JOB", + Job: "JOB", + ColumnName: "COLUMN_NAME", + NetworkToken: "NETWORK_TOKEN", + Subscription: "SUBSCRIPTION", +} as const; diff --git a/src/ _generated_/rest/api/types/AuditEventContext.ts b/src/ _generated_/rest/api/types/AuditEventContext.ts new file mode 100644 index 00000000..659eeb8f --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventContext.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Context for an audit event. + */ +export interface AuditEventContext { + /** ID for the audit event. */ + changeID?: string; + /** ID for the request that caused the event. */ + requestID?: string; + /** ID for the request set by the service that received the request. */ + traceID?: string; + /** ID for the session in which the request was sent. */ + sessionID?: string; + /** Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. */ + actor?: string; + actorType?: Skyflow.V1MemberType; + accessType?: Skyflow.ContextAccessType; + /** IP Address of the client that made the request. */ + ipAddress?: string; + /** HTTP Origin request header (including scheme, hostname, and port) of the request. */ + origin?: string; + authMode?: Skyflow.ContextAuthMode; + /** ID of the JWT token. */ + jwtID?: string; + /** Embedded User Context. */ + bearerTokenContextID?: string; +} diff --git a/src/ _generated_/rest/api/types/AuditEventData.ts b/src/ _generated_/rest/api/types/AuditEventData.ts new file mode 100644 index 00000000..d842bbec --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventData.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Any Sensitive data that needs to be wrapped. + */ +export interface AuditEventData { + /** The entire body of the data requested or the query fired. */ + content?: string; +} diff --git a/src/ _generated_/rest/api/types/AuditEventHttpInfo.ts b/src/ _generated_/rest/api/types/AuditEventHttpInfo.ts new file mode 100644 index 00000000..6ebab4d7 --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventHttpInfo.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface AuditEventHttpInfo { + /** The http URI that is used. */ + URI?: string; + /** http method used. */ + method?: string; +} diff --git a/src/ _generated_/rest/api/types/BatchRecordMethod.ts b/src/ _generated_/rest/api/types/BatchRecordMethod.ts new file mode 100644 index 00000000..3aafa2fe --- /dev/null +++ b/src/ _generated_/rest/api/types/BatchRecordMethod.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Method of the operation. + */ +export type BatchRecordMethod = "NONE" | "POST" | "PUT" | "GET" | "DELETE"; +export const BatchRecordMethod = { + None: "NONE", + Post: "POST", + Put: "PUT", + Get: "GET", + Delete: "DELETE", +} as const; diff --git a/src/ _generated_/rest/api/types/ContextAccessType.ts b/src/ _generated_/rest/api/types/ContextAccessType.ts new file mode 100644 index 00000000..59b4e99b --- /dev/null +++ b/src/ _generated_/rest/api/types/ContextAccessType.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of access for the request. + */ +export type ContextAccessType = "ACCESS_NONE" | "API" | "SQL"; +export const ContextAccessType = { + AccessNone: "ACCESS_NONE", + Api: "API", + Sql: "SQL", +} as const; diff --git a/src/ _generated_/rest/api/types/ContextAuthMode.ts b/src/ _generated_/rest/api/types/ContextAuthMode.ts new file mode 100644 index 00000000..8276167e --- /dev/null +++ b/src/ _generated_/rest/api/types/ContextAuthMode.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Authentication mode the `actor` used. + */ +export type ContextAuthMode = "AUTH_NONE" | "OKTA_JWT" | "SERVICE_ACCOUNT_JWT" | "PAT_JWT"; +export const ContextAuthMode = { + AuthNone: "AUTH_NONE", + OktaJwt: "OKTA_JWT", + ServiceAccountJwt: "SERVICE_ACCOUNT_JWT", + PatJwt: "PAT_JWT", +} as const; diff --git a/src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts b/src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts new file mode 100644 index 00000000..3e196ac9 --- /dev/null +++ b/src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type DetokenizeRecordResponseValueType = + | "NONE" + | "STRING" + | "INTEGER" + | "FLOAT" + | "BOOL" + | "DATETIME" + | "JSON" + | "ARRAY" + | "DATE"; +export const DetokenizeRecordResponseValueType = { + None: "NONE", + String: "STRING", + Integer: "INTEGER", + Float: "FLOAT", + Bool: "BOOL", + Datetime: "DATETIME", + Json: "JSON", + Array: "ARRAY", + Date: "DATE", +} as const; diff --git a/src/ _generated_/rest/api/types/GooglerpcStatus.ts b/src/ _generated_/rest/api/types/GooglerpcStatus.ts new file mode 100644 index 00000000..70e20691 --- /dev/null +++ b/src/ _generated_/rest/api/types/GooglerpcStatus.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface GooglerpcStatus { + code?: number; + message?: string; + details?: Skyflow.ProtobufAny[]; +} diff --git a/src/ _generated_/rest/api/types/ProtobufAny.ts b/src/ _generated_/rest/api/types/ProtobufAny.ts new file mode 100644 index 00000000..9f90a613 --- /dev/null +++ b/src/ _generated_/rest/api/types/ProtobufAny.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ProtobufAny { + "@type"?: string; +} diff --git a/src/ _generated_/rest/api/types/RedactionEnumRedaction.ts b/src/ _generated_/rest/api/types/RedactionEnumRedaction.ts new file mode 100644 index 00000000..9787dfb5 --- /dev/null +++ b/src/ _generated_/rest/api/types/RedactionEnumRedaction.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Redaction type. Subject to policies assigned to the API caller. When used for detokenization, only supported for vaults that support [column groups](/tokenization-column-groups/). + */ +export type RedactionEnumRedaction = "DEFAULT" | "REDACTED" | "MASKED" | "PLAIN_TEXT"; +export const RedactionEnumRedaction = { + Default: "DEFAULT", + Redacted: "REDACTED", + Masked: "MASKED", + PlainText: "PLAIN_TEXT", +} as const; diff --git a/src/ _generated_/rest/api/types/RequestActionType.ts b/src/ _generated_/rest/api/types/RequestActionType.ts new file mode 100644 index 00000000..41a68d0b --- /dev/null +++ b/src/ _generated_/rest/api/types/RequestActionType.ts @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RequestActionType = + | "NONE" + | "ASSIGN" + | "CREATE" + | "DELETE" + | "EXECUTE" + | "LIST" + | "READ" + | "UNASSIGN" + | "UPDATE" + | "VALIDATE" + | "LOGIN" + | "ROTATE" + | "SCHEDULEROTATION" + | "SCHEDULEROTATIONALERT" + | "IMPORT" + | "GETIMPORTPARAMETERS" + | "PING" + | "GETCLOUDPROVIDER"; +export const RequestActionType = { + None: "NONE", + Assign: "ASSIGN", + Create: "CREATE", + Delete: "DELETE", + Execute: "EXECUTE", + List: "LIST", + Read: "READ", + Unassign: "UNASSIGN", + Update: "UPDATE", + Validate: "VALIDATE", + Login: "LOGIN", + Rotate: "ROTATE", + Schedulerotation: "SCHEDULEROTATION", + Schedulerotationalert: "SCHEDULEROTATIONALERT", + Import: "IMPORT", + Getimportparameters: "GETIMPORTPARAMETERS", + Ping: "PING", + Getcloudprovider: "GETCLOUDPROVIDER", +} as const; diff --git a/src/ _generated_/rest/api/types/V1AuditAfterOptions.ts b/src/ _generated_/rest/api/types/V1AuditAfterOptions.ts new file mode 100644 index 00000000..5f48d4a7 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditAfterOptions.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1AuditAfterOptions { + /** Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. */ + timestamp?: string; + /** Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. */ + changeID?: string; +} diff --git a/src/ _generated_/rest/api/types/V1AuditEventResponse.ts b/src/ _generated_/rest/api/types/V1AuditEventResponse.ts new file mode 100644 index 00000000..1f952068 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditEventResponse.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains fields for defining Response Properties. + */ +export interface V1AuditEventResponse { + /** The status of the overall operation. */ + code?: number; + /** The status message for the overall operation. */ + message?: string; + data?: Skyflow.AuditEventData; + /** time when this response is generated, use extention method to set it. */ + timestamp?: string; +} diff --git a/src/ _generated_/rest/api/types/V1AuditResponse.ts b/src/ _generated_/rest/api/types/V1AuditResponse.ts new file mode 100644 index 00000000..7103d1b7 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1AuditResponse { + /** Events matching the query. */ + event?: Skyflow.V1AuditResponseEvent[]; + nextOps?: Skyflow.V1AuditAfterOptions; +} diff --git a/src/ _generated_/rest/api/types/V1AuditResponseEvent.ts b/src/ _generated_/rest/api/types/V1AuditResponseEvent.ts new file mode 100644 index 00000000..95da80d3 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditResponseEvent.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Audit event details. + */ +export interface V1AuditResponseEvent { + context?: Skyflow.AuditEventContext; + request?: Skyflow.V1AuditResponseEventRequest; + response?: Skyflow.V1AuditEventResponse; + /** Parent account ID of the account that made the request, if any. */ + parentAccountID?: string; + /** ID of the account that made the request. */ + accountID?: string; + /** IDs for resources involved in the event. Presented in `{resourceType}/{resourceID}` format. For example, `VAULT/cd1d815aa09b4cbfbb803bd20349f202`. */ + resourceIDs?: string[]; +} diff --git a/src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts b/src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts new file mode 100644 index 00000000..868caa87 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains fields for defining Request Properties. + */ +export interface V1AuditResponseEventRequest { + data?: Skyflow.AuditEventData; + /** API name. */ + apiName?: string; + /** The workspaceID (if any) of the request. */ + workspaceID?: string; + /** The vaultID (if any) of the request. */ + vaultID?: string; + /** Tags associated with the event. To provide better search capabilities. Like login. */ + tags?: string[]; + /** time when this request is generated, use extention method to set it. */ + timestamp?: string; + actionType?: Skyflow.RequestActionType; + resourceType?: Skyflow.AuditEventAuditResourceType; + httpInfo?: Skyflow.AuditEventHttpInfo; +} diff --git a/src/ _generated_/rest/api/types/V1BatchOperationResponse.ts b/src/ _generated_/rest/api/types/V1BatchOperationResponse.ts new file mode 100644 index 00000000..35fc2db7 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BatchOperationResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1BatchOperationResponse { + /** ID of the vault. */ + vaultID?: string; + /** Responses in the same order as in the request. Responses have the same payload structure as their corresponding APIs:
  • `POST` returns an Insert Records response.
  • `PUT` returns an Update Record response.
  • `GET` returns a Get Record response.
  • `DELETE` returns a Delete Record response.
*/ + responses?: Record[]; +} diff --git a/src/ _generated_/rest/api/types/V1BatchRecord.ts b/src/ _generated_/rest/api/types/V1BatchRecord.ts new file mode 100644 index 00000000..8b6ec36d --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BatchRecord.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1BatchRecord { + /** Field and value key pairs. For example, `{'field_1':'value_1', 'field_2':'value_2'}`. Only valid when `method` is `POST` or `PUT`. */ + fields?: Record; + /** Name of the table to perform the operation on. */ + tableName?: string; + method?: Skyflow.BatchRecordMethod; + /** ID to group operations by. Operations in the same group are executed sequentially. */ + batchID?: string; + redaction?: Skyflow.RedactionEnumRedaction; + /** If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. */ + tokenization?: boolean; + /** `skyflow_id` for the record. Only valid when `method` is `GET`, `DELETE`, or `PUT`. */ + ID?: string; + /** If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. */ + downloadURL?: boolean; + /** Column that stores primary keys for upsert operations. The column must be marked as unique in the vault schema. Only valid when `method` is `POST`. */ + upsert?: string; + /** Fields and tokens for the record. For example, `{'field_1':'token_1', 'field_2':'token_2'}`. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1BinListResponse.ts b/src/ _generated_/rest/api/types/V1BinListResponse.ts new file mode 100644 index 00000000..3b833b9e --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BinListResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Response to the Get BIN request. + */ +export interface V1BinListResponse { + /** Card metadata associated with the specified BIN. */ + cards_data?: Skyflow.V1Card[]; +} diff --git a/src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts b/src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts new file mode 100644 index 00000000..7a8c518f --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1BulkDeleteRecordResponse { + /** IDs for the deleted records, or `*` if all records were deleted. */ + RecordIDResponse?: string[]; +} diff --git a/src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts b/src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts new file mode 100644 index 00000000..a088ae08 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1BulkGetRecordResponse { + /** The specified records. */ + records?: Skyflow.V1FieldRecords[]; +} diff --git a/src/ _generated_/rest/api/types/V1Byot.ts b/src/ _generated_/rest/api/types/V1Byot.ts new file mode 100644 index 00000000..de5c2ef8 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1Byot.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Token insertion behavior. + * + * - DISABLE: Tokens aren't allowed for any fields. If tokens are specified, the request fails. + * - ENABLE: Tokens are allowed—but not required—for all fields. If tokens are specified, they're inserted. + * - ENABLE_STRICT: Tokens are required for all fields. If tokens are specified, they're inserted. If not, the request fails. + */ +export type V1Byot = "DISABLE" | "ENABLE" | "ENABLE_STRICT"; +export const V1Byot = { + Disable: "DISABLE", + Enable: "ENABLE", + EnableStrict: "ENABLE_STRICT", +} as const; diff --git a/src/ _generated_/rest/api/types/V1Card.ts b/src/ _generated_/rest/api/types/V1Card.ts new file mode 100644 index 00000000..5d04bb6e --- /dev/null +++ b/src/ _generated_/rest/api/types/V1Card.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Card metadata of the requested BIN. + */ +export interface V1Card { + /** BIN of the card. */ + BIN?: string; + /** Name of the card issuer bank. */ + issuer_name?: string; + /** Country code of the card. */ + country_code?: string; + /** Currency of the card. */ + currency?: string; + /** Type of the card. */ + card_type?: string; + /** Category of the card. */ + card_category?: string; + /** Scheme of the card. */ + card_scheme?: string; + /** Last four digits of the card number. */ + card_last_four_digits?: string; + /** Expiry date of the card. */ + card_expiry?: string; +} diff --git a/src/ _generated_/rest/api/types/V1DeleteFileResponse.ts b/src/ _generated_/rest/api/types/V1DeleteFileResponse.ts new file mode 100644 index 00000000..33d46c8b --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DeleteFileResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1DeleteFileResponse { + /** ID of the record. */ + skyflow_id?: string; + /** If `true`, the file was deleted. */ + deleted?: boolean; +} diff --git a/src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts b/src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts new file mode 100644 index 00000000..9449ad38 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1DeleteRecordResponse { + /** ID of the deleted record. */ + skyflow_id?: string; + /** If `true`, the record was deleted. */ + deleted?: boolean; +} diff --git a/src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts b/src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts new file mode 100644 index 00000000..e5f40632 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1DetokenizeRecordRequest { + /** Token that identifies the record to detokenize. */ + token?: string; + redaction?: Skyflow.RedactionEnumRedaction; +} diff --git a/src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts b/src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts new file mode 100644 index 00000000..f340e9ed --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1DetokenizeRecordResponse { + /** Token of the record. */ + token?: string; + valueType?: Skyflow.DetokenizeRecordResponseValueType; + /** Data corresponding to the token. */ + value?: string; + /** Error if token isn't found. */ + error?: string; +} diff --git a/src/ _generated_/rest/api/types/V1DetokenizeResponse.ts b/src/ _generated_/rest/api/types/V1DetokenizeResponse.ts new file mode 100644 index 00000000..ccf01437 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetokenizeResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1DetokenizeResponse { + /** Records corresponding to the specified tokens. */ + records?: Skyflow.V1DetokenizeRecordResponse[]; +} diff --git a/src/ _generated_/rest/api/types/V1FieldRecords.ts b/src/ _generated_/rest/api/types/V1FieldRecords.ts new file mode 100644 index 00000000..ac2ea289 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1FieldRecords.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Record values and tokens. + */ +export interface V1FieldRecords { + /** Fields and values for the record. For example, `{'field_1':'value_1', 'field_2':'value_2'}`. */ + fields?: Record; + /** Fields and tokens for the record. For example, `{'field_1':'token_1', 'field_2':'token_2'}`. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1FileAvScanStatus.ts b/src/ _generated_/rest/api/types/V1FileAvScanStatus.ts new file mode 100644 index 00000000..d5fd19c9 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1FileAvScanStatus.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Anti-virus scan status of the file. + */ +export type V1FileAvScanStatus = + | "SCAN_NONE" + | "SCAN_CLEAN" + | "SCAN_INFECTED" + | "SCAN_DELETED" + | "SCAN_ERROR" + | "SCAN_PENDING" + | "SCAN_UNSCANNABLE" + | "SCAN_FILE_NOT_FOUND" + | "SCAN_INVALID"; +export const V1FileAvScanStatus = { + ScanNone: "SCAN_NONE", + ScanClean: "SCAN_CLEAN", + ScanInfected: "SCAN_INFECTED", + ScanDeleted: "SCAN_DELETED", + ScanError: "SCAN_ERROR", + ScanPending: "SCAN_PENDING", + ScanUnscannable: "SCAN_UNSCANNABLE", + ScanFileNotFound: "SCAN_FILE_NOT_FOUND", + ScanInvalid: "SCAN_INVALID", +} as const; diff --git a/src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts b/src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts new file mode 100644 index 00000000..860942f1 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1GetAuthTokenResponse { + /** AccessToken. */ + accessToken?: string; + /** TokenType : Bearer. */ + tokenType?: string; +} diff --git a/src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts b/src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts new file mode 100644 index 00000000..22388127 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1GetFileScanStatusResponse { + av_scan_status?: Skyflow.V1FileAvScanStatus; +} diff --git a/src/ _generated_/rest/api/types/V1GetQueryResponse.ts b/src/ _generated_/rest/api/types/V1GetQueryResponse.ts new file mode 100644 index 00000000..0e257ff4 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1GetQueryResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1GetQueryResponse { + /** Records returned by the query. */ + records?: Skyflow.V1FieldRecords[]; +} diff --git a/src/ _generated_/rest/api/types/V1InsertRecordResponse.ts b/src/ _generated_/rest/api/types/V1InsertRecordResponse.ts new file mode 100644 index 00000000..f92f7939 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1InsertRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1InsertRecordResponse { + /** Identifiers for the inserted records. */ + records?: Skyflow.V1RecordMetaProperties[]; +} diff --git a/src/ _generated_/rest/api/types/V1MemberType.ts b/src/ _generated_/rest/api/types/V1MemberType.ts new file mode 100644 index 00000000..d0024f29 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1MemberType.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of the member. + */ +export type V1MemberType = "NONE" | "USER" | "SERVICE_ACCOUNT"; +export const V1MemberType = { + None: "NONE", + User: "USER", + ServiceAccount: "SERVICE_ACCOUNT", +} as const; diff --git a/src/ _generated_/rest/api/types/V1RecordMetaProperties.ts b/src/ _generated_/rest/api/types/V1RecordMetaProperties.ts new file mode 100644 index 00000000..cc680523 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1RecordMetaProperties.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1RecordMetaProperties { + /** ID of the inserted record. */ + skyflow_id?: string; + /** Tokens for the record. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts b/src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts new file mode 100644 index 00000000..c00e4a84 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1TokenizeRecordRequest { + /** Existing value to return a token for. */ + value?: string; + /** Name of the column group that the value belongs to. */ + columnGroup?: string; +} diff --git a/src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts b/src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts new file mode 100644 index 00000000..4945257f --- /dev/null +++ b/src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1TokenizeRecordResponse { + /** Token corresponding to a value. */ + token?: string; +} diff --git a/src/ _generated_/rest/api/types/V1TokenizeResponse.ts b/src/ _generated_/rest/api/types/V1TokenizeResponse.ts new file mode 100644 index 00000000..3bc9f865 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1TokenizeResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1TokenizeResponse { + /** Tokens corresponding to the specified values. */ + records?: Skyflow.V1TokenizeRecordResponse[]; +} diff --git a/src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts b/src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts new file mode 100644 index 00000000..50ac89ce --- /dev/null +++ b/src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1UpdateRecordResponse { + /** ID of the updated record. */ + skyflow_id?: string; + /** Tokens for the record. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1VaultFieldMapping.ts b/src/ _generated_/rest/api/types/V1VaultFieldMapping.ts new file mode 100644 index 00000000..691ef47c --- /dev/null +++ b/src/ _generated_/rest/api/types/V1VaultFieldMapping.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Mapping of the fields in the vault to the fields to use for the lookup. + */ +export interface V1VaultFieldMapping { + /** Name of the column that stores the card number. */ + card_number?: string; + /** Name of the column that stores the card number suffix. */ + card_last_four_digits?: string; + /** Name of the column that stores the expiry date. */ + card_expiry?: string; +} diff --git a/src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts b/src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts new file mode 100644 index 00000000..e8b6aaf1 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Details of the vault that stores additional card details. + */ +export interface V1VaultSchemaConfig { + /** ID of the vault that stores card details. */ + id?: string; + /** Name of the table that stores card details. */ + table_name?: string; + mapping?: Skyflow.V1VaultFieldMapping; +} diff --git a/src/ _generated_/rest/api/types/index.ts b/src/ _generated_/rest/api/types/index.ts new file mode 100644 index 00000000..b3448324 --- /dev/null +++ b/src/ _generated_/rest/api/types/index.ts @@ -0,0 +1,43 @@ +export * from "./AuditEventAuditResourceType"; +export * from "./AuditEventContext"; +export * from "./AuditEventData"; +export * from "./AuditEventHttpInfo"; +export * from "./BatchRecordMethod"; +export * from "./ContextAccessType"; +export * from "./ContextAuthMode"; +export * from "./DetokenizeRecordResponseValueType"; +export * from "./V1GetAuthTokenResponse"; +export * from "./RedactionEnumRedaction"; +export * from "./RequestActionType"; +export * from "./GooglerpcStatus"; +export * from "./ProtobufAny"; +export * from "./V1AuditAfterOptions"; +export * from "./V1AuditEventResponse"; +export * from "./V1AuditResponse"; +export * from "./V1AuditResponseEvent"; +export * from "./V1AuditResponseEventRequest"; +export * from "./V1BinListResponse"; +export * from "./V1Byot"; +export * from "./V1BatchOperationResponse"; +export * from "./V1BatchRecord"; +export * from "./V1BulkDeleteRecordResponse"; +export * from "./V1BulkGetRecordResponse"; +export * from "./V1Card"; +export * from "./V1DeleteFileResponse"; +export * from "./V1DeleteRecordResponse"; +export * from "./V1DetokenizeRecordRequest"; +export * from "./V1DetokenizeRecordResponse"; +export * from "./V1DetokenizeResponse"; +export * from "./V1FieldRecords"; +export * from "./V1FileAvScanStatus"; +export * from "./V1GetFileScanStatusResponse"; +export * from "./V1GetQueryResponse"; +export * from "./V1InsertRecordResponse"; +export * from "./V1MemberType"; +export * from "./V1RecordMetaProperties"; +export * from "./V1TokenizeRecordRequest"; +export * from "./V1TokenizeRecordResponse"; +export * from "./V1TokenizeResponse"; +export * from "./V1UpdateRecordResponse"; +export * from "./V1VaultFieldMapping"; +export * from "./V1VaultSchemaConfig"; diff --git a/src/ _generated_/rest/base.ts b/src/ _generated_/rest/base.ts deleted file mode 100644 index d20af695..00000000 --- a/src/ _generated_/rest/base.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from './configuration'; -// Some imports not used depending on template conditions -// @ts-ignore -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; - -export const BASE_PATH = "https://identifier.vault.skyflowapis.com".replace(/\/+$/, ""); - -/** - * - * @export - */ -export const COLLECTION_FORMATS = { - csv: ",", - ssv: " ", - tsv: "\t", - pipes: "|", -}; - -/** - * - * @export - * @interface RequestArgs - */ -export interface RequestArgs { - url: string; - options: RawAxiosRequestConfig; -} - -/** - * - * @export - * @class BaseAPI - */ -export class BaseAPI { - protected configuration: Configuration | undefined; - - constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) { - if (configuration) { - this.configuration = configuration; - this.basePath = configuration.basePath ?? basePath; - } - } -}; - -/** - * - * @export - * @class RequiredError - * @extends {Error} - */ -export class RequiredError extends Error { - constructor(public field: string, msg?: string) { - super(msg); - this.name = "RequiredError" - } -} - -interface ServerMap { - [key: string]: { - url: string, - description: string, - }[]; -} - -/** - * - * @export - */ -export const operationServerMap: ServerMap = { -} diff --git a/src/ _generated_/rest/common.ts b/src/ _generated_/rest/common.ts deleted file mode 100644 index 33461d93..00000000 --- a/src/ _generated_/rest/common.ts +++ /dev/null @@ -1,151 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from "./configuration"; -import type { RequestArgs } from "./base"; -import type { AxiosInstance, AxiosResponse } from 'axios'; -import { RequiredError } from "./base"; -import { URL, URLSearchParams } from 'url'; - -/** - * - * @export - */ -export const DUMMY_BASE_URL = 'https://example.com' - -/** - * - * @throws {RequiredError} - * @export - */ -export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) { - if (paramValue === null || paramValue === undefined) { - throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`); - } -} - -/** - * - * @export - */ -export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) { - if (configuration && configuration.apiKey) { - const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? await configuration.apiKey(keyParamName) - : await configuration.apiKey; - object[keyParamName] = localVarApiKeyValue; - } -} - -/** - * - * @export - */ -export const setBasicAuthToObject = function (object: any, configuration?: Configuration) { - if (configuration && (configuration.username || configuration.password)) { - object["auth"] = { username: configuration.username, password: configuration.password }; - } -} - -/** - * - * @export - */ -export const setBearerAuthToObject = async function (object: any, configuration?: Configuration) { - if (configuration && configuration.accessToken) { - const accessToken = typeof configuration.accessToken === 'function' - ? await configuration.accessToken() - : await configuration.accessToken; - object["Authorization"] = "Bearer " + accessToken; - } -} - -/** - * - * @export - */ -export const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) { - if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? await configuration.accessToken(name, scopes) - : await configuration.accessToken; - object["Authorization"] = "Bearer " + localVarAccessTokenValue; - } -} - -function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { - if (parameter == null) return; - if (typeof parameter === "object") { - if (Array.isArray(parameter)) { - (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); - } - else { - Object.keys(parameter).forEach(currentKey => - setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`) - ); - } - } - else { - if (urlSearchParams.has(key)) { - urlSearchParams.append(key, parameter); - } - else { - urlSearchParams.set(key, parameter); - } - } -} - -/** - * - * @export - */ -export const setSearchParams = function (url: URL, ...objects: any[]) { - const searchParams = new URLSearchParams(url.search); - setFlattenedQueryParams(searchParams, objects); - url.search = searchParams.toString(); -} - -/** - * - * @export - */ -export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { - const nonString = typeof value !== 'string'; - const needsSerialization = nonString && configuration && configuration.isJsonMime - ? configuration.isJsonMime(requestOptions.headers['Content-Type']) - : nonString; - return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) - : (value || ""); -} - -/** - * - * @export - */ -export const toPathString = function (url: URL) { - return url.pathname + url.search + url.hash -} - -/** - * - * @export - */ -export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) { - return >(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { - const axiosRequestArgs = {...axiosArgs.options, url: (axios.defaults.baseURL ? '' : configuration?.basePath ?? basePath) + axiosArgs.url}; - return axios.request(axiosRequestArgs); - }; -} diff --git a/src/ _generated_/rest/configuration.ts b/src/ _generated_/rest/configuration.ts deleted file mode 100644 index dd958991..00000000 --- a/src/ _generated_/rest/configuration.ts +++ /dev/null @@ -1,110 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export interface ConfigurationParameters { - apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); - username?: string; - password?: string; - accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); - basePath?: string; - serverIndex?: number; - baseOptions?: any; - formDataCtor?: new () => any; -} - -export class Configuration { - /** - * parameter for apiKey security - * @param name security name - * @memberof Configuration - */ - apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); - /** - * parameter for basic security - * - * @type {string} - * @memberof Configuration - */ - username?: string; - /** - * parameter for basic security - * - * @type {string} - * @memberof Configuration - */ - password?: string; - /** - * parameter for oauth2 security - * @param name security name - * @param scopes oauth2 scope - * @memberof Configuration - */ - accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); - /** - * override base path - * - * @type {string} - * @memberof Configuration - */ - basePath?: string; - /** - * override server index - * - * @type {number} - * @memberof Configuration - */ - serverIndex?: number; - /** - * base options for axios calls - * - * @type {any} - * @memberof Configuration - */ - baseOptions?: any; - /** - * The FormData constructor that will be used to create multipart form data - * requests. You can inject this here so that execution environments that - * do not support the FormData class can still run the generated client. - * - * @type {new () => FormData} - */ - formDataCtor?: new () => any; - - constructor(param: ConfigurationParameters = {}) { - this.apiKey = param.apiKey; - this.username = param.username; - this.password = param.password; - this.accessToken = param.accessToken; - this.basePath = param.basePath; - this.serverIndex = param.serverIndex; - this.baseOptions = param.baseOptions; - this.formDataCtor = param.formDataCtor; - } - - /** - * Check if the given MIME is a JSON MIME. - * JSON MIME examples: - * application/json - * application/json; charset=UTF8 - * APPLICATION/JSON - * application/vnd.company+json - * @param mime - MIME (Multipurpose Internet Mail Extensions) - * @return True if the given MIME is JSON, false otherwise. - */ - public isJsonMime(mime: string): boolean { - const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); - return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); - } -} diff --git a/src/ _generated_/rest/core/auth/BasicAuth.ts b/src/ _generated_/rest/core/auth/BasicAuth.ts new file mode 100644 index 00000000..146df215 --- /dev/null +++ b/src/ _generated_/rest/core/auth/BasicAuth.ts @@ -0,0 +1,31 @@ +import { Base64 } from "js-base64"; + +export interface BasicAuth { + username: string; + password: string; +} + +const BASIC_AUTH_HEADER_PREFIX = /^Basic /i; + +export const BasicAuth = { + toAuthorizationHeader: (basicAuth: BasicAuth | undefined): string | undefined => { + if (basicAuth == null) { + return undefined; + } + const token = Base64.encode(`${basicAuth.username}:${basicAuth.password}`); + return `Basic ${token}`; + }, + fromAuthorizationHeader: (header: string): BasicAuth => { + const credentials = header.replace(BASIC_AUTH_HEADER_PREFIX, ""); + const decoded = Base64.decode(credentials); + const [username, password] = decoded.split(":", 2); + + if (username == null || password == null) { + throw new Error("Invalid basic auth"); + } + return { + username, + password, + }; + }, +}; diff --git a/src/ _generated_/rest/core/auth/BearerToken.ts b/src/ _generated_/rest/core/auth/BearerToken.ts new file mode 100644 index 00000000..fe987fc9 --- /dev/null +++ b/src/ _generated_/rest/core/auth/BearerToken.ts @@ -0,0 +1,15 @@ +export type BearerToken = string; + +const BEARER_AUTH_HEADER_PREFIX = /^Bearer /i; + +export const BearerToken = { + toAuthorizationHeader: (token: BearerToken | undefined): string | undefined => { + if (token == null) { + return undefined; + } + return `Bearer ${token}`; + }, + fromAuthorizationHeader: (header: string): BearerToken => { + return header.replace(BEARER_AUTH_HEADER_PREFIX, "").trim() as BearerToken; + }, +}; diff --git a/src/ _generated_/rest/core/auth/index.ts b/src/ _generated_/rest/core/auth/index.ts new file mode 100644 index 00000000..ee293b34 --- /dev/null +++ b/src/ _generated_/rest/core/auth/index.ts @@ -0,0 +1,2 @@ +export { BasicAuth } from "./BasicAuth"; +export { BearerToken } from "./BearerToken"; diff --git a/src/ _generated_/rest/core/fetcher/APIResponse.ts b/src/ _generated_/rest/core/fetcher/APIResponse.ts new file mode 100644 index 00000000..6335291b --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/APIResponse.ts @@ -0,0 +1,23 @@ +import { RawResponse } from "./RawResponse"; + +/** + * The response of an API call. + * It is a successful response or a failed response. + */ +export type APIResponse = SuccessfulResponse | FailedResponse; + +export interface SuccessfulResponse { + ok: true; + body: T; + /** + * @deprecated Use `rawResponse` instead + */ + headers?: Record; + rawResponse: RawResponse; +} + +export interface FailedResponse { + ok: false; + error: T; + rawResponse: RawResponse; +} diff --git a/src/ _generated_/rest/core/fetcher/Fetcher.ts b/src/ _generated_/rest/core/fetcher/Fetcher.ts new file mode 100644 index 00000000..336ee10b --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/Fetcher.ts @@ -0,0 +1,151 @@ +import { toJson } from "../json"; +import { APIResponse } from "./APIResponse"; +import { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse"; +import { createRequestUrl } from "./createRequestUrl"; +import { getFetchFn } from "./getFetchFn"; +import { getRequestBody } from "./getRequestBody"; +import { getResponseBody } from "./getResponseBody"; +import { makeRequest } from "./makeRequest"; +import { requestWithRetries } from "./requestWithRetries"; + +export type FetchFunction = (args: Fetcher.Args) => Promise>; + +export declare namespace Fetcher { + export interface Args { + url: string; + method: string; + contentType?: string; + headers?: Record; + queryParameters?: Record; + body?: unknown; + timeoutMs?: number; + maxRetries?: number; + withCredentials?: boolean; + abortSignal?: AbortSignal; + requestType?: "json" | "file" | "bytes"; + responseType?: "json" | "blob" | "sse" | "streaming" | "text" | "arrayBuffer"; + duplex?: "half"; + } + + export type Error = FailedStatusCodeError | NonJsonError | TimeoutError | UnknownError; + + export interface FailedStatusCodeError { + reason: "status-code"; + statusCode: number; + body: unknown; + } + + export interface NonJsonError { + reason: "non-json"; + statusCode: number; + rawBody: string; + } + + export interface TimeoutError { + reason: "timeout"; + } + + export interface UnknownError { + reason: "unknown"; + errorMessage: string; + } +} + +export async function fetcherImpl(args: Fetcher.Args): Promise> { + const headers: Record = {}; + if (args.body !== undefined && args.contentType != null) { + headers["Content-Type"] = args.contentType; + } + + if (args.headers != null) { + for (const [key, value] of Object.entries(args.headers)) { + if (value != null) { + headers[key] = value; + } + } + } + + const url = createRequestUrl(args.url, args.queryParameters); + const requestBody: BodyInit | undefined = await getRequestBody({ + body: args.body, + type: args.requestType === "json" ? "json" : "other", + }); + const fetchFn = await getFetchFn(); + + try { + const response = await requestWithRetries( + async () => + makeRequest( + fetchFn, + url, + args.method, + headers, + requestBody, + args.timeoutMs, + args.abortSignal, + args.withCredentials, + args.duplex, + ), + args.maxRetries, + ); + const responseBody = await getResponseBody(response, args.responseType); + + if (response.status >= 200 && response.status < 400) { + return { + ok: true, + body: responseBody as R, + headers: response.headers, + rawResponse: toRawResponse(response), + }; + } else { + return { + ok: false, + error: { + reason: "status-code", + statusCode: response.status, + body: responseBody, + }, + rawResponse: toRawResponse(response), + }; + } + } catch (error) { + if (args.abortSignal != null && args.abortSignal.aborted) { + return { + ok: false, + error: { + reason: "unknown", + errorMessage: "The user aborted a request", + }, + rawResponse: abortRawResponse, + }; + } else if (error instanceof Error && error.name === "AbortError") { + return { + ok: false, + error: { + reason: "timeout", + }, + rawResponse: abortRawResponse, + }; + } else if (error instanceof Error) { + return { + ok: false, + error: { + reason: "unknown", + errorMessage: error.message, + }, + rawResponse: unknownRawResponse, + }; + } + + return { + ok: false, + error: { + reason: "unknown", + errorMessage: toJson(error), + }, + rawResponse: unknownRawResponse, + }; + } +} + +export const fetcher: FetchFunction = fetcherImpl; diff --git a/src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts b/src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts new file mode 100644 index 00000000..6b0bc4fc --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts @@ -0,0 +1,116 @@ +import { WithRawResponse } from "./RawResponse"; + +/** + * A promise that returns the parsed response and lets you retrieve the raw response too. + */ +export class HttpResponsePromise extends Promise { + private innerPromise: Promise>; + private unwrappedPromise: Promise | undefined; + + private constructor(promise: Promise>) { + // Initialize with a no-op to avoid premature parsing + super((resolve) => { + resolve(undefined as unknown as T); + }); + this.innerPromise = promise; + } + + /** + * Creates an `HttpResponsePromise` from a function that returns a promise. + * + * @param fn - A function that returns a promise resolving to a `WithRawResponse` object. + * @param args - Arguments to pass to the function. + * @returns An `HttpResponsePromise` instance. + */ + public static fromFunction Promise>, T>( + fn: F, + ...args: Parameters + ): HttpResponsePromise { + return new HttpResponsePromise(fn(...args)); + } + + /** + * Creates a function that returns an `HttpResponsePromise` from a function that returns a promise. + * + * @param fn - A function that returns a promise resolving to a `WithRawResponse` object. + * @returns A function that returns an `HttpResponsePromise` instance. + */ + public static interceptFunction< + F extends (...args: never[]) => Promise>, + T = Awaited>["data"], + >(fn: F): (...args: Parameters) => HttpResponsePromise { + return (...args: Parameters): HttpResponsePromise => { + return HttpResponsePromise.fromPromise(fn(...args)); + }; + } + + /** + * Creates an `HttpResponsePromise` from an existing promise. + * + * @param promise - A promise resolving to a `WithRawResponse` object. + * @returns An `HttpResponsePromise` instance. + */ + public static fromPromise(promise: Promise>): HttpResponsePromise { + return new HttpResponsePromise(promise); + } + + /** + * Creates an `HttpResponsePromise` from an executor function. + * + * @param executor - A function that takes resolve and reject callbacks to create a promise. + * @returns An `HttpResponsePromise` instance. + */ + public static fromExecutor( + executor: (resolve: (value: WithRawResponse) => void, reject: (reason?: unknown) => void) => void, + ): HttpResponsePromise { + const promise = new Promise>(executor); + return new HttpResponsePromise(promise); + } + + /** + * Creates an `HttpResponsePromise` from a resolved result. + * + * @param result - A `WithRawResponse` object to resolve immediately. + * @returns An `HttpResponsePromise` instance. + */ + public static fromResult(result: WithRawResponse): HttpResponsePromise { + const promise = Promise.resolve(result); + return new HttpResponsePromise(promise); + } + + private unwrap(): Promise { + if (!this.unwrappedPromise) { + this.unwrappedPromise = this.innerPromise.then(({ data }) => data); + } + return this.unwrappedPromise; + } + + /** @inheritdoc */ + public override then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onrejected?: ((reason: unknown) => TResult2 | PromiseLike) | null, + ): Promise { + return this.unwrap().then(onfulfilled, onrejected); + } + + /** @inheritdoc */ + public override catch( + onrejected?: ((reason: unknown) => TResult | PromiseLike) | null, + ): Promise { + return this.unwrap().catch(onrejected); + } + + /** @inheritdoc */ + public override finally(onfinally?: (() => void) | null): Promise { + return this.unwrap().finally(onfinally); + } + + /** + * Retrieves the data and raw response. + * + * @returns A promise resolving to a `WithRawResponse` object. + */ + public async withRawResponse(): Promise> { + return await this.innerPromise; + } +} diff --git a/src/ _generated_/rest/core/fetcher/RawResponse.ts b/src/ _generated_/rest/core/fetcher/RawResponse.ts new file mode 100644 index 00000000..c975f23c --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/RawResponse.ts @@ -0,0 +1,59 @@ +/** + * The raw response from the fetch call excluding the body. + */ +export type RawResponse = Omit< + { + [K in keyof Response as Response[K] extends Function ? never : K]: Response[K]; // strips out functions + }, + "ok" | "body" | "bodyUsed" +>; // strips out body and bodyUsed + +/** + * A raw response indicating that the request was aborted. + */ +export const abortRawResponse: RawResponse = { + headers: new Headers(), + redirected: false, + status: 499, + statusText: "Client Closed Request", + type: "error", + url: "", +} as const; + +/** + * A raw response indicating an unknown error. + */ +export const unknownRawResponse: RawResponse = { + headers: new Headers(), + redirected: false, + status: 0, + statusText: "Unknown Error", + type: "error", + url: "", +} as const; + +/** + * Converts a `RawResponse` object into a `RawResponse` by extracting its properties, + * excluding the `body` and `bodyUsed` fields. + * + * @param response - The `RawResponse` object to convert. + * @returns A `RawResponse` object containing the extracted properties of the input response. + */ +export function toRawResponse(response: Response): RawResponse { + return { + headers: response.headers, + redirected: response.redirected, + status: response.status, + statusText: response.statusText, + type: response.type, + url: response.url, + }; +} + +/** + * Creates a `RawResponse` from a standard `Response` object. + */ +export interface WithRawResponse { + readonly data: T; + readonly rawResponse: RawResponse; +} diff --git a/src/ _generated_/rest/core/fetcher/Supplier.ts b/src/ _generated_/rest/core/fetcher/Supplier.ts new file mode 100644 index 00000000..867c931c --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/Supplier.ts @@ -0,0 +1,11 @@ +export type Supplier = T | Promise | (() => T | Promise); + +export const Supplier = { + get: async (supplier: Supplier): Promise => { + if (typeof supplier === "function") { + return (supplier as () => T)(); + } else { + return supplier; + } + }, +}; diff --git a/src/ _generated_/rest/core/fetcher/createRequestUrl.ts b/src/ _generated_/rest/core/fetcher/createRequestUrl.ts new file mode 100644 index 00000000..f1157ce7 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/createRequestUrl.ts @@ -0,0 +1,10 @@ +import qs from "qs"; + +export function createRequestUrl( + baseUrl: string, + queryParameters?: Record, +): string { + return Object.keys(queryParameters ?? {}).length > 0 + ? `${baseUrl}?${qs.stringify(queryParameters, { arrayFormat: "repeat" })}` + : baseUrl; +} diff --git a/src/ _generated_/rest/core/fetcher/getFetchFn.ts b/src/ _generated_/rest/core/fetcher/getFetchFn.ts new file mode 100644 index 00000000..9fd9bfc4 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getFetchFn.ts @@ -0,0 +1,25 @@ +import { RUNTIME } from "../runtime"; + +/** + * Returns a fetch function based on the runtime + */ +export async function getFetchFn(): Promise { + // In Node.js 18+ environments, use native fetch + if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) { + return fetch; + } + + // In Node.js 18 or lower environments, the SDK always uses`node-fetch`. + if (RUNTIME.type === "node") { + return (await import("node-fetch")).default as any; + } + + // Otherwise the SDK uses global fetch if available, + // and falls back to node-fetch. + if (typeof fetch == "function") { + return fetch; + } + + // Defaults to node `node-fetch` if global fetch isn't available + return (await import("node-fetch")).default as any; +} diff --git a/src/ _generated_/rest/core/fetcher/getHeader.ts b/src/ _generated_/rest/core/fetcher/getHeader.ts new file mode 100644 index 00000000..50f922b0 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getHeader.ts @@ -0,0 +1,8 @@ +export function getHeader(headers: Record, header: string): string | undefined { + for (const [headerKey, headerValue] of Object.entries(headers)) { + if (headerKey.toLowerCase() === header.toLowerCase()) { + return headerValue; + } + } + return undefined; +} diff --git a/src/ _generated_/rest/core/fetcher/getRequestBody.ts b/src/ _generated_/rest/core/fetcher/getRequestBody.ts new file mode 100644 index 00000000..fce5589c --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getRequestBody.ts @@ -0,0 +1,16 @@ +import { toJson } from "../json"; + +export declare namespace GetRequestBody { + interface Args { + body: unknown; + type: "json" | "file" | "bytes" | "other"; + } +} + +export async function getRequestBody({ body, type }: GetRequestBody.Args): Promise { + if (type.includes("json")) { + return toJson(body); + } else { + return body as BodyInit; + } +} diff --git a/src/ _generated_/rest/core/fetcher/getResponseBody.ts b/src/ _generated_/rest/core/fetcher/getResponseBody.ts new file mode 100644 index 00000000..d046e6ea --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getResponseBody.ts @@ -0,0 +1,34 @@ +import { chooseStreamWrapper } from "./stream-wrappers/chooseStreamWrapper"; + +export async function getResponseBody(response: Response, responseType?: string): Promise { + if (response.body != null && responseType === "blob") { + return await response.blob(); + } else if (response.body != null && responseType === "arrayBuffer") { + return await response.arrayBuffer(); + } else if (response.body != null && responseType === "sse") { + return response.body; + } else if (response.body != null && responseType === "streaming") { + return chooseStreamWrapper(response.body); + } else if (response.body != null && responseType === "text") { + return await response.text(); + } else { + const text = await response.text(); + if (text.length > 0) { + try { + let responseBody = JSON.parse(text); + return responseBody; + } catch (err) { + return { + ok: false, + error: { + reason: "non-json", + statusCode: response.status, + rawBody: text, + }, + }; + } + } else { + return undefined; + } + } +} diff --git a/src/ _generated_/rest/core/fetcher/index.ts b/src/ _generated_/rest/core/fetcher/index.ts new file mode 100644 index 00000000..249f5176 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/index.ts @@ -0,0 +1,8 @@ +export type { APIResponse } from "./APIResponse"; +export { fetcher } from "./Fetcher"; +export type { Fetcher, FetchFunction } from "./Fetcher"; +export { getHeader } from "./getHeader"; +export { Supplier } from "./Supplier"; +export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse"; +export type { RawResponse, WithRawResponse } from "./RawResponse"; +export { HttpResponsePromise } from "./HttpResponsePromise"; diff --git a/src/ _generated_/rest/core/fetcher/makeRequest.ts b/src/ _generated_/rest/core/fetcher/makeRequest.ts new file mode 100644 index 00000000..1af42bb9 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/makeRequest.ts @@ -0,0 +1,44 @@ +import { anySignal, getTimeoutSignal } from "./signals"; + +export const makeRequest = async ( + fetchFn: (url: string, init: RequestInit) => Promise, + url: string, + method: string, + headers: Record, + requestBody: BodyInit | undefined, + timeoutMs?: number, + abortSignal?: AbortSignal, + withCredentials?: boolean, + duplex?: "half", +): Promise => { + const signals: AbortSignal[] = []; + + // Add timeout signal + let timeoutAbortId: NodeJS.Timeout | undefined = undefined; + if (timeoutMs != null) { + const { signal, abortId } = getTimeoutSignal(timeoutMs); + timeoutAbortId = abortId; + signals.push(signal); + } + + // Add arbitrary signal + if (abortSignal != null) { + signals.push(abortSignal); + } + let newSignals = anySignal(signals); + const response = await fetchFn(url, { + method: method, + headers, + body: requestBody, + signal: newSignals, + credentials: withCredentials ? "include" : undefined, + // @ts-ignore + duplex, + }); + + if (timeoutAbortId != null) { + clearTimeout(timeoutAbortId); + } + + return response; +}; diff --git a/src/ _generated_/rest/core/fetcher/requestWithRetries.ts b/src/ _generated_/rest/core/fetcher/requestWithRetries.ts new file mode 100644 index 00000000..add3cce0 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/requestWithRetries.ts @@ -0,0 +1,33 @@ +const INITIAL_RETRY_DELAY = 1000; // in milliseconds +const MAX_RETRY_DELAY = 60000; // in milliseconds +const DEFAULT_MAX_RETRIES = 2; +const JITTER_FACTOR = 0.2; // 20% random jitter + +function addJitter(delay: number): number { + // Generate a random value between -JITTER_FACTOR and +JITTER_FACTOR + const jitterMultiplier = 1 + (Math.random() * 2 - 1) * JITTER_FACTOR; + return delay * jitterMultiplier; +} + +export async function requestWithRetries( + requestFn: () => Promise, + maxRetries: number = DEFAULT_MAX_RETRIES, +): Promise { + let response: Response = await requestFn(); + + for (let i = 0; i < maxRetries; ++i) { + if ([408, 429].includes(response.status) || response.status >= 500) { + // Calculate base delay using exponential backoff (in milliseconds) + const baseDelay = Math.min(INITIAL_RETRY_DELAY * Math.pow(2, i), MAX_RETRY_DELAY); + + // Add jitter to the delay + const delayWithJitter = addJitter(baseDelay); + + await new Promise((resolve) => setTimeout(resolve, delayWithJitter)); + response = await requestFn(); + } else { + break; + } + } + return response!; +} diff --git a/src/ _generated_/rest/core/fetcher/signals.ts b/src/ _generated_/rest/core/fetcher/signals.ts new file mode 100644 index 00000000..a8d32a2e --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/signals.ts @@ -0,0 +1,38 @@ +const TIMEOUT = "timeout"; + +export function getTimeoutSignal(timeoutMs: number): { signal: AbortSignal; abortId: NodeJS.Timeout } { + const controller = new AbortController(); + const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs); + return { signal: controller.signal, abortId }; +} + +/** + * Returns an abort signal that is getting aborted when + * at least one of the specified abort signals is aborted. + * + * Requires at least node.js 18. + */ +export function anySignal(...args: AbortSignal[] | [AbortSignal[]]): AbortSignal { + // Allowing signals to be passed either as array + // of signals or as multiple arguments. + const signals = (args.length === 1 && Array.isArray(args[0]) ? args[0] : args) as AbortSignal[]; + + const controller = new AbortController(); + + for (const signal of signals) { + if (signal.aborted) { + // Exiting early if one of the signals + // is already aborted. + controller.abort((signal as any)?.reason); + break; + } + + // Listening for signals and removing the listeners + // when at least one symbol is aborted. + signal.addEventListener("abort", () => controller.abort((signal as any)?.reason), { + signal: controller.signal, + }); + } + + return controller.signal; +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts new file mode 100644 index 00000000..6f1a82e9 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts @@ -0,0 +1,257 @@ +import type { Writable } from "readable-stream"; + +import { EventCallback, StreamWrapper } from "./chooseStreamWrapper"; + +export class Node18UniversalStreamWrapper + implements + StreamWrapper | Writable | WritableStream, ReadFormat> +{ + private readableStream: ReadableStream; + private reader: ReadableStreamDefaultReader; + private events: Record; + private paused: boolean; + private resumeCallback: ((value?: unknown) => void) | null; + private encoding: string | null; + + constructor(readableStream: ReadableStream) { + this.readableStream = readableStream; + this.reader = this.readableStream.getReader(); + this.events = { + data: [], + end: [], + error: [], + readable: [], + close: [], + pause: [], + resume: [], + }; + this.paused = false; + this.resumeCallback = null; + this.encoding = null; + } + + public on(event: string, callback: EventCallback): void { + this.events[event]?.push(callback); + } + + public off(event: string, callback: EventCallback): void { + this.events[event] = this.events[event]?.filter((cb) => cb !== callback); + } + + public pipe( + dest: Node18UniversalStreamWrapper | Writable | WritableStream, + ): Node18UniversalStreamWrapper | Writable | WritableStream { + this.on("data", async (chunk) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._write(chunk); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } else { + dest.write(chunk); + } + }); + + this.on("end", async () => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._end(); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.close(); + } else { + dest.end(); + } + }); + + this.on("error", async (error) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._error(error); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.abort(error); + } else { + dest.destroy(error); + } + }); + + this._startReading(); + + return dest; + } + + public pipeTo( + dest: Node18UniversalStreamWrapper | Writable | WritableStream, + ): Node18UniversalStreamWrapper | Writable | WritableStream { + return this.pipe(dest); + } + + public unpipe(dest: Node18UniversalStreamWrapper | Writable | WritableStream): void { + this.off("data", async (chunk) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._write(chunk); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } else { + dest.write(chunk); + } + }); + + this.off("end", async () => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._end(); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.close(); + } else { + dest.end(); + } + }); + + this.off("error", async (error) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._error(error); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.abort(error); + } else { + dest.destroy(error); + } + }); + } + + public destroy(error?: Error): void { + this.reader + .cancel(error) + .then(() => { + this._emit("close"); + }) + .catch((err) => { + this._emit("error", err); + }); + } + + public pause(): void { + this.paused = true; + this._emit("pause"); + } + + public resume(): void { + if (this.paused) { + this.paused = false; + this._emit("resume"); + if (this.resumeCallback) { + this.resumeCallback(); + this.resumeCallback = null; + } + } + } + + public get isPaused(): boolean { + return this.paused; + } + + public async read(): Promise { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + + if (done) { + return undefined; + } + return value; + } + + public setEncoding(encoding: string): void { + this.encoding = encoding; + } + + public async text(): Promise { + const chunks: ReadFormat[] = []; + + while (true) { + const { done, value } = await this.reader.read(); + if (done) { + break; + } + if (value) { + chunks.push(value); + } + } + + const decoder = new TextDecoder(this.encoding || "utf-8"); + return decoder.decode(await new Blob(chunks).arrayBuffer()); + } + + public async json(): Promise { + const text = await this.text(); + return JSON.parse(text); + } + + private _write(chunk: ReadFormat): void { + this._emit("data", chunk); + } + + private _end(): void { + this._emit("end"); + } + + private _error(error: any): void { + this._emit("error", error); + } + + private _emit(event: string, data?: any): void { + if (this.events[event]) { + for (const callback of this.events[event] || []) { + callback(data); + } + } + } + + private async _startReading(): Promise { + try { + this._emit("readable"); + while (true) { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + this._emit("end"); + this._emit("close"); + break; + } + if (value) { + this._emit("data", value); + } + } + } catch (error) { + this._emit("error", error); + } + } + + [Symbol.asyncIterator](): AsyncIterableIterator { + return { + next: async () => { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + return { done: true, value: undefined }; + } + return { done: false, value }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts new file mode 100644 index 00000000..23c01a1a --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts @@ -0,0 +1,107 @@ +import type { Readable, Writable } from "readable-stream"; + +import { EventCallback, StreamWrapper } from "./chooseStreamWrapper"; + +export class NodePre18StreamWrapper implements StreamWrapper { + private readableStream: Readable; + private encoding: string | undefined; + + constructor(readableStream: Readable) { + this.readableStream = readableStream; + } + + public on(event: string, callback: EventCallback): void { + this.readableStream.on(event, callback); + } + + public off(event: string, callback: EventCallback): void { + this.readableStream.off(event, callback); + } + + public pipe(dest: Writable): Writable { + this.readableStream.pipe(dest); + return dest; + } + + public pipeTo(dest: Writable): Writable { + return this.pipe(dest); + } + + public unpipe(dest?: Writable): void { + if (dest) { + this.readableStream.unpipe(dest); + } else { + this.readableStream.unpipe(); + } + } + + public destroy(error?: Error): void { + this.readableStream.destroy(error); + } + + public pause(): void { + this.readableStream.pause(); + } + + public resume(): void { + this.readableStream.resume(); + } + + public get isPaused(): boolean { + return this.readableStream.isPaused(); + } + + public async read(): Promise { + return new Promise((resolve, reject) => { + const chunk = this.readableStream.read(); + if (chunk) { + resolve(chunk); + } else { + this.readableStream.once("readable", () => { + const chunk = this.readableStream.read(); + resolve(chunk); + }); + this.readableStream.once("error", reject); + } + }); + } + + public setEncoding(encoding?: string): void { + this.readableStream.setEncoding(encoding as BufferEncoding); + this.encoding = encoding; + } + + public async text(): Promise { + const chunks: Uint8Array[] = []; + const encoder = new TextEncoder(); + this.readableStream.setEncoding((this.encoding || "utf-8") as BufferEncoding); + + for await (const chunk of this.readableStream) { + chunks.push(encoder.encode(chunk)); + } + + const decoder = new TextDecoder(this.encoding || "utf-8"); + return decoder.decode(Buffer.concat(chunks)); + } + + public async json(): Promise { + const text = await this.text(); + return JSON.parse(text); + } + + public [Symbol.asyncIterator](): AsyncIterableIterator { + const readableStream = this.readableStream; + const iterator = readableStream[Symbol.asyncIterator](); + + // Create and return an async iterator that yields buffers + return { + async next(): Promise> { + const { value, done } = await iterator.next(); + return { value: value as Buffer, done }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts new file mode 100644 index 00000000..091e2a7f --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts @@ -0,0 +1,243 @@ +import { StreamWrapper } from "./chooseStreamWrapper"; + +type EventCallback = (data?: any) => void; + +export class UndiciStreamWrapper + implements StreamWrapper | WritableStream, ReadFormat> +{ + private readableStream: ReadableStream; + private reader: ReadableStreamDefaultReader; + private events: Record; + private paused: boolean; + private resumeCallback: ((value?: unknown) => void) | null; + private encoding: string | null; + + constructor(readableStream: ReadableStream) { + this.readableStream = readableStream; + this.reader = this.readableStream.getReader(); + this.events = { + data: [], + end: [], + error: [], + readable: [], + close: [], + pause: [], + resume: [], + }; + this.paused = false; + this.resumeCallback = null; + this.encoding = null; + } + + public on(event: string, callback: EventCallback): void { + this.events[event]?.push(callback); + } + + public off(event: string, callback: EventCallback): void { + this.events[event] = this.events[event]?.filter((cb) => cb !== callback); + } + + public pipe( + dest: UndiciStreamWrapper | WritableStream, + ): UndiciStreamWrapper | WritableStream { + this.on("data", (chunk) => { + if (dest instanceof UndiciStreamWrapper) { + dest._write(chunk); + } else { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } + }); + + this.on("end", () => { + if (dest instanceof UndiciStreamWrapper) { + dest._end(); + } else { + const writer = dest.getWriter(); + writer.close(); + } + }); + + this.on("error", (error) => { + if (dest instanceof UndiciStreamWrapper) { + dest._error(error); + } else { + const writer = dest.getWriter(); + writer.abort(error); + } + }); + + this._startReading(); + + return dest; + } + + public pipeTo( + dest: UndiciStreamWrapper | WritableStream, + ): UndiciStreamWrapper | WritableStream { + return this.pipe(dest); + } + + public unpipe(dest: UndiciStreamWrapper | WritableStream): void { + this.off("data", (chunk) => { + if (dest instanceof UndiciStreamWrapper) { + dest._write(chunk); + } else { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } + }); + + this.off("end", () => { + if (dest instanceof UndiciStreamWrapper) { + dest._end(); + } else { + const writer = dest.getWriter(); + writer.close(); + } + }); + + this.off("error", (error) => { + if (dest instanceof UndiciStreamWrapper) { + dest._error(error); + } else { + const writer = dest.getWriter(); + writer.abort(error); + } + }); + } + + public destroy(error?: Error): void { + this.reader + .cancel(error) + .then(() => { + this._emit("close"); + }) + .catch((err) => { + this._emit("error", err); + }); + } + + public pause(): void { + this.paused = true; + this._emit("pause"); + } + + public resume(): void { + if (this.paused) { + this.paused = false; + this._emit("resume"); + if (this.resumeCallback) { + this.resumeCallback(); + this.resumeCallback = null; + } + } + } + + public get isPaused(): boolean { + return this.paused; + } + + public async read(): Promise { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + return undefined; + } + return value; + } + + public setEncoding(encoding: string): void { + this.encoding = encoding; + } + + public async text(): Promise { + const chunks: BlobPart[] = []; + + while (true) { + const { done, value } = await this.reader.read(); + if (done) { + break; + } + if (value) { + chunks.push(value); + } + } + + const decoder = new TextDecoder(this.encoding || "utf-8"); + return decoder.decode(await new Blob(chunks).arrayBuffer()); + } + + public async json(): Promise { + const text = await this.text(); + return JSON.parse(text); + } + + private _write(chunk: ReadFormat): void { + this._emit("data", chunk); + } + + private _end(): void { + this._emit("end"); + } + + private _error(error: any): void { + this._emit("error", error); + } + + private _emit(event: string, data?: any): void { + if (this.events[event]) { + for (const callback of this.events[event] || []) { + callback(data); + } + } + } + + private async _startReading(): Promise { + try { + this._emit("readable"); + while (true) { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + this._emit("end"); + this._emit("close"); + break; + } + if (value) { + this._emit("data", value); + } + } + } catch (error) { + this._emit("error", error); + } + } + + [Symbol.asyncIterator](): AsyncIterableIterator { + return { + next: async () => { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + return { done: true, value: undefined }; + } + return { done: false, value }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts new file mode 100644 index 00000000..8c7492fc --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts @@ -0,0 +1,34 @@ +import type { Readable } from "readable-stream"; + +import { RUNTIME } from "../../runtime"; + +export type EventCallback = (data?: any) => void; + +export interface StreamWrapper { + setEncoding(encoding?: string): void; + on(event: string, callback: EventCallback): void; + off(event: string, callback: EventCallback): void; + pipe(dest: WritableStream): WritableStream; + pipeTo(dest: WritableStream): WritableStream; + unpipe(dest?: WritableStream): void; + destroy(error?: Error): void; + pause(): void; + resume(): void; + get isPaused(): boolean; + read(): Promise; + text(): Promise; + json(): Promise; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +export async function chooseStreamWrapper(responseBody: any): Promise>> { + if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) { + return new (await import("./Node18UniversalStreamWrapper")).Node18UniversalStreamWrapper( + responseBody as ReadableStream, + ); + } else if (RUNTIME.type !== "node" && typeof fetch === "function") { + return new (await import("./UndiciStreamWrapper")).UndiciStreamWrapper(responseBody as ReadableStream); + } else { + return new (await import("./NodePre18StreamWrapper")).NodePre18StreamWrapper(responseBody as Readable); + } +} diff --git a/src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts b/src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts new file mode 100644 index 00000000..25b60617 --- /dev/null +++ b/src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts @@ -0,0 +1,181 @@ +import { RUNTIME } from "../runtime"; + +export type MaybePromise = Promise | T; + +interface FormDataRequest { + body: Body; + headers: Record; + duplex?: "half"; +} + +function isNamedValue(value: unknown): value is { name: string } { + return typeof value === "object" && value != null && "name" in value; +} + +export interface CrossPlatformFormData { + setup(): Promise; + + append(key: string, value: unknown): void; + + appendFile(key: string, value: unknown, fileName?: string): Promise; + + getRequest(): MaybePromise>; +} + +export async function newFormData(): Promise { + let formdata: CrossPlatformFormData; + if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) { + formdata = new Node18FormData(); + } else if (RUNTIME.type === "node") { + formdata = new Node16FormData(); + } else { + formdata = new WebFormData(); + } + await formdata.setup(); + return formdata; +} + +export type Node18FormDataFd = + | { + append(name: string, value: unknown, fileName?: string): void; + } + | undefined; + +/** + * Form Data Implementation for Node.js 18+ + */ +export class Node18FormData implements CrossPlatformFormData { + private fd: Node18FormDataFd; + + public async setup() { + this.fd = new (await import("formdata-node")).FormData(); + } + + public append(key: string, value: any): void { + this.fd?.append(key, value); + } + + public async appendFile(key: string, value: unknown, fileName?: string): Promise { + if (fileName == null && isNamedValue(value)) { + fileName = value.name; + } + + if (value instanceof Blob) { + this.fd?.append(key, value, fileName); + } else { + this.fd?.append(key, { + type: undefined, + name: fileName, + [Symbol.toStringTag]: "File", + stream() { + return value; + }, + }); + } + } + + public async getRequest(): Promise> { + const encoder = new (await import("form-data-encoder")).FormDataEncoder(this.fd as any); + return { + body: (await import("readable-stream")).Readable.from(encoder), + headers: encoder.headers, + duplex: "half", + }; + } +} + +export type Node16FormDataFd = + | { + append( + name: string, + value: unknown, + options?: + | string + | { + header?: string | Headers; + knownLength?: number; + filename?: string; + filepath?: string; + contentType?: string; + }, + ): void; + + getHeaders(): Record; + } + | undefined; + +/** + * Form Data Implementation for Node.js 16-18 + */ +export class Node16FormData implements CrossPlatformFormData { + private fd: Node16FormDataFd; + + public async setup(): Promise { + this.fd = new (await import("form-data")).default(); + } + + public append(key: string, value: any): void { + this.fd?.append(key, value); + } + + public async appendFile(key: string, value: unknown, fileName?: string): Promise { + if (fileName == null && isNamedValue(value)) { + fileName = value.name; + } + + let bufferedValue; + if (value instanceof Blob) { + bufferedValue = Buffer.from(await (value as any).arrayBuffer()); + } else { + bufferedValue = value; + } + + if (fileName == null) { + this.fd?.append(key, bufferedValue); + } else { + this.fd?.append(key, bufferedValue, { filename: fileName }); + } + } + + public getRequest(): FormDataRequest { + return { + body: this.fd, + headers: this.fd ? this.fd.getHeaders() : {}, + }; + } +} + +export type WebFormDataFd = { append(name: string, value: string | Blob, fileName?: string): void } | undefined; + +/** + * Form Data Implementation for Web + */ +export class WebFormData implements CrossPlatformFormData { + protected fd: WebFormDataFd; + + public async setup(): Promise { + this.fd = new FormData(); + } + + public append(key: string, value: any): void { + this.fd?.append(key, value); + } + + public async appendFile(key: string, value: any, fileName?: string): Promise { + if (fileName == null && isNamedValue(value)) { + fileName = value.name; + } + if (value instanceof Blob) { + this.fd?.append(key, value, fileName); + return; + } + this.fd?.append(key, new Blob([value]), fileName); + } + + public getRequest(): FormDataRequest { + return { + body: this.fd, + headers: {}, + }; + } +} diff --git a/src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts b/src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts new file mode 100644 index 00000000..3b3f4c12 --- /dev/null +++ b/src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts @@ -0,0 +1,15 @@ +import qs from "qs"; + +/** + * Takes an unknown value, stringifies it using qs, and parses it into a key-value record + */ +export function encodeAsFormParameter(value: unknown): Record { + const stringified = qs.stringify(value, { encode: false }); + + const keyValuePairs = stringified.split("&").map((pair) => { + const [key, value] = pair.split("="); + return [key, value] as const; + }); + + return Object.fromEntries(keyValuePairs); +} diff --git a/src/ _generated_/rest/core/form-data-utils/index.ts b/src/ _generated_/rest/core/form-data-utils/index.ts new file mode 100644 index 00000000..62121d58 --- /dev/null +++ b/src/ _generated_/rest/core/form-data-utils/index.ts @@ -0,0 +1,2 @@ +export { encodeAsFormParameter } from "./encodeAsFormParameter"; +export * from "./FormDataWrapper"; diff --git a/src/ _generated_/rest/core/index.ts b/src/ _generated_/rest/core/index.ts new file mode 100644 index 00000000..b7edbb61 --- /dev/null +++ b/src/ _generated_/rest/core/index.ts @@ -0,0 +1,4 @@ +export * from "./fetcher"; +export * from "./auth"; +export * from "./runtime"; +export * from "./form-data-utils"; diff --git a/src/ _generated_/rest/core/json.ts b/src/ _generated_/rest/core/json.ts new file mode 100644 index 00000000..c052f324 --- /dev/null +++ b/src/ _generated_/rest/core/json.ts @@ -0,0 +1,27 @@ +/** + * Serialize a value to JSON + * @param value A JavaScript value, usually an object or array, to be converted. + * @param replacer A function that transforms the results. + * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. + * @returns JSON string + */ +export const toJson = ( + value: unknown, + replacer?: (this: unknown, key: string, value: unknown) => unknown, + space?: string | number, +): string => { + return JSON.stringify(value, replacer, space); +}; + +/** + * Parse JSON string to object, array, or other type + * @param text A valid JSON string. + * @param reviver A function that transforms the results. This function is called for each member of the object. If a member contains nested objects, the nested objects are transformed before the parent object is. + * @returns Parsed object, array, or other type + */ +export function fromJson( + text: string, + reviver?: (this: unknown, key: string, value: unknown) => unknown, +): T { + return JSON.parse(text, reviver); +} diff --git a/src/ _generated_/rest/core/runtime/index.ts b/src/ _generated_/rest/core/runtime/index.ts new file mode 100644 index 00000000..5c76dbb1 --- /dev/null +++ b/src/ _generated_/rest/core/runtime/index.ts @@ -0,0 +1 @@ +export { RUNTIME } from "./runtime"; diff --git a/src/ _generated_/rest/core/runtime/runtime.ts b/src/ _generated_/rest/core/runtime/runtime.ts new file mode 100644 index 00000000..a9750175 --- /dev/null +++ b/src/ _generated_/rest/core/runtime/runtime.ts @@ -0,0 +1,131 @@ +interface DenoGlobal { + version: { + deno: string; + }; +} + +interface BunGlobal { + version: string; +} + +declare const Deno: DenoGlobal | undefined; +declare const Bun: BunGlobal | undefined; +declare const EdgeRuntime: string | undefined; + +/** + * A constant that indicates which environment and version the SDK is running in. + */ +export const RUNTIME: Runtime = evaluateRuntime(); + +export interface Runtime { + type: "browser" | "web-worker" | "deno" | "bun" | "node" | "react-native" | "unknown" | "workerd" | "edge-runtime"; + version?: string; + parsedVersion?: number; +} + +function evaluateRuntime(): Runtime { + /** + * A constant that indicates whether the environment the code is running is a Web Browser. + */ + const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined"; + if (isBrowser) { + return { + type: "browser", + version: window.navigator.userAgent, + }; + } + + /** + * A constant that indicates whether the environment the code is running is Cloudflare. + * https://developers.cloudflare.com/workers/runtime-apis/web-standards/#navigatoruseragent + */ + const isCloudflare = typeof globalThis !== "undefined" && globalThis?.navigator?.userAgent === "Cloudflare-Workers"; + if (isCloudflare) { + return { + type: "workerd", + }; + } + + /** + * A constant that indicates whether the environment the code is running is Edge Runtime. + * https://vercel.com/docs/functions/runtimes/edge-runtime#check-if-you're-running-on-the-edge-runtime + */ + const isEdgeRuntime = typeof EdgeRuntime === "string"; + if (isEdgeRuntime) { + return { + type: "edge-runtime", + }; + } + + /** + * A constant that indicates whether the environment the code is running is a Web Worker. + */ + const isWebWorker = + typeof self === "object" && + // @ts-ignore + typeof self?.importScripts === "function" && + (self.constructor?.name === "DedicatedWorkerGlobalScope" || + self.constructor?.name === "ServiceWorkerGlobalScope" || + self.constructor?.name === "SharedWorkerGlobalScope"); + if (isWebWorker) { + return { + type: "web-worker", + }; + } + + /** + * A constant that indicates whether the environment the code is running is Deno. + * FYI Deno spoofs process.versions.node, see https://deno.land/std@0.177.0/node/process.ts?s=versions + */ + const isDeno = + typeof Deno !== "undefined" && typeof Deno.version !== "undefined" && typeof Deno.version.deno !== "undefined"; + if (isDeno) { + return { + type: "deno", + version: Deno.version.deno, + }; + } + + /** + * A constant that indicates whether the environment the code is running is Bun.sh. + */ + const isBun = typeof Bun !== "undefined" && typeof Bun.version !== "undefined"; + if (isBun) { + return { + type: "bun", + version: Bun.version, + }; + } + + /** + * A constant that indicates whether the environment the code is running is Node.JS. + */ + const isNode = + typeof process !== "undefined" && + "version" in process && + !!process.version && + "versions" in process && + !!process.versions?.node; + if (isNode) { + return { + type: "node", + version: process.versions.node, + parsedVersion: Number(process.versions.node.split(".")[0]), + }; + } + + /** + * A constant that indicates whether the environment the code is running is in React-Native. + * https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Core/setUpNavigator.js + */ + const isReactNative = typeof navigator !== "undefined" && navigator?.product === "ReactNative"; + if (isReactNative) { + return { + type: "react-native", + }; + } + + return { + type: "unknown", + }; +} diff --git a/src/ _generated_/rest/environments.ts b/src/ _generated_/rest/environments.ts new file mode 100644 index 00000000..a2633a97 --- /dev/null +++ b/src/ _generated_/rest/environments.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export const SkyflowEnvironment = { + Production: "https://identifier.vault.skyflowapis.com", + Sandbox: "https://identifier.vault.skyflowapis-preview.com", +} as const; + +export type SkyflowEnvironment = typeof SkyflowEnvironment.Production | typeof SkyflowEnvironment.Sandbox; diff --git a/src/ _generated_/rest/errors/SkyflowError.ts b/src/ _generated_/rest/errors/SkyflowError.ts new file mode 100644 index 00000000..003768c2 --- /dev/null +++ b/src/ _generated_/rest/errors/SkyflowError.ts @@ -0,0 +1,55 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as core from "../core"; +import { toJson } from "../core/json"; + +export class SkyflowError extends Error { + public readonly statusCode?: number; + public readonly body?: unknown; + public readonly rawResponse?: core.RawResponse; + + constructor({ + message, + statusCode, + body, + rawResponse, + }: { + message?: string; + statusCode?: number; + body?: unknown; + rawResponse?: core.RawResponse; + }) { + super(buildMessage({ message, statusCode, body })); + Object.setPrototypeOf(this, SkyflowError.prototype); + this.statusCode = statusCode; + this.body = body; + this.rawResponse = rawResponse; + } +} + +function buildMessage({ + message, + statusCode, + body, +}: { + message: string | undefined; + statusCode: number | undefined; + body: unknown | undefined; +}): string { + let lines: string[] = []; + if (message != null) { + lines.push(message); + } + + if (statusCode != null) { + lines.push(`Status code: ${statusCode.toString()}`); + } + + if (body != null) { + lines.push(`Body: ${toJson(body, undefined, 2)}`); + } + + return lines.join("\n"); +} diff --git a/src/ _generated_/rest/errors/SkyflowTimeoutError.ts b/src/ _generated_/rest/errors/SkyflowTimeoutError.ts new file mode 100644 index 00000000..75024f63 --- /dev/null +++ b/src/ _generated_/rest/errors/SkyflowTimeoutError.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export class SkyflowTimeoutError extends Error { + constructor(message: string) { + super(message); + Object.setPrototypeOf(this, SkyflowTimeoutError.prototype); + } +} diff --git a/src/ _generated_/rest/errors/index.ts b/src/ _generated_/rest/errors/index.ts new file mode 100644 index 00000000..5567f00d --- /dev/null +++ b/src/ _generated_/rest/errors/index.ts @@ -0,0 +1,2 @@ +export { SkyflowError } from "./SkyflowError"; +export { SkyflowTimeoutError } from "./SkyflowTimeoutError"; diff --git a/src/ _generated_/rest/index.ts b/src/ _generated_/rest/index.ts index 9df9d8d7..0706e084 100644 --- a/src/ _generated_/rest/index.ts +++ b/src/ _generated_/rest/index.ts @@ -1,18 +1,4 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export * from "./api"; -export * from "./configuration"; -export * from "./models"; +export * as Skyflow from "./api"; +export { SkyflowClient } from "./Client"; +export { SkyflowEnvironment } from "./environments"; +export { SkyflowError, SkyflowTimeoutError } from "./errors"; diff --git a/src/ _generated_/rest/models/audit-event-audit-resource-type.ts b/src/ _generated_/rest/models/audit-event-audit-resource-type.ts deleted file mode 100644 index 2e3a0192..00000000 --- a/src/ _generated_/rest/models/audit-event-audit-resource-type.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Type of the resource. - * @export - * @enum {string} - */ - -export const AuditEventAuditResourceType = { - NoneApi: 'NONE_API', - Account: 'ACCOUNT', - Audit: 'AUDIT', - BaseDataType: 'BASE_DATA_TYPE', - FieldTemplate: 'FIELD_TEMPLATE', - File: 'FILE', - Key: 'KEY', - Policy: 'POLICY', - ProtoParse: 'PROTO_PARSE', - Record: 'RECORD', - Role: 'ROLE', - Rule: 'RULE', - Secret: 'SECRET', - ServiceAccount: 'SERVICE_ACCOUNT', - Token: 'TOKEN', - User: 'USER', - Vault: 'VAULT', - VaultTemplate: 'VAULT_TEMPLATE', - Workspace: 'WORKSPACE', - Table: 'TABLE', - PolicyTemplate: 'POLICY_TEMPLATE', - Member: 'MEMBER', - Tag: 'TAG', - Connection: 'CONNECTION', - Migration: 'MIGRATION', - ScheduledJob: 'SCHEDULED_JOB', - Job: 'JOB', - ColumnName: 'COLUMN_NAME', - NetworkToken: 'NETWORK_TOKEN', - Subscription: 'SUBSCRIPTION' -} as const; - -export type AuditEventAuditResourceType = typeof AuditEventAuditResourceType[keyof typeof AuditEventAuditResourceType]; - - - diff --git a/src/ _generated_/rest/models/audit-event-context.ts b/src/ _generated_/rest/models/audit-event-context.ts deleted file mode 100644 index eedfeb1b..00000000 --- a/src/ _generated_/rest/models/audit-event-context.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { ContextAccessType } from './context-access-type'; -// May contain unused imports in some cases -// @ts-ignore -import type { ContextAuthMode } from './context-auth-mode'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1MemberType } from './v1-member-type'; - -/** - * Context for an audit event. - * @export - * @interface AuditEventContext - */ -export interface AuditEventContext { - /** - * ID for the audit event. - * @type {string} - * @memberof AuditEventContext - */ - 'changeID'?: string; - /** - * ID for the request that caused the event. - * @type {string} - * @memberof AuditEventContext - */ - 'requestID'?: string; - /** - * ID for the request set by the service that received the request. - * @type {string} - * @memberof AuditEventContext - */ - 'traceID'?: string; - /** - * ID for the session in which the request was sent. - * @type {string} - * @memberof AuditEventContext - */ - 'sessionID'?: string; - /** - * Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @type {string} - * @memberof AuditEventContext - */ - 'actor'?: string; - /** - * - * @type {V1MemberType} - * @memberof AuditEventContext - */ - 'actorType'?: V1MemberType; - /** - * - * @type {ContextAccessType} - * @memberof AuditEventContext - */ - 'accessType'?: ContextAccessType; - /** - * IP Address of the client that made the request. - * @type {string} - * @memberof AuditEventContext - */ - 'ipAddress'?: string; - /** - * HTTP Origin request header (including scheme, hostname, and port) of the request. - * @type {string} - * @memberof AuditEventContext - */ - 'origin'?: string; - /** - * - * @type {ContextAuthMode} - * @memberof AuditEventContext - */ - 'authMode'?: ContextAuthMode; - /** - * ID of the JWT token. - * @type {string} - * @memberof AuditEventContext - */ - 'jwtID'?: string; - /** - * Embedded User Context. - * @type {string} - * @memberof AuditEventContext - */ - 'bearerTokenContextID'?: string; -} - - - diff --git a/src/ _generated_/rest/models/audit-event-data.ts b/src/ _generated_/rest/models/audit-event-data.ts deleted file mode 100644 index 79d0a0fe..00000000 --- a/src/ _generated_/rest/models/audit-event-data.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Any Sensitive data that needs to be wrapped. - * @export - * @interface AuditEventData - */ -export interface AuditEventData { - /** - * The entire body of the data requested or the query fired. - * @type {string} - * @memberof AuditEventData - */ - 'content'?: string; -} - diff --git a/src/ _generated_/rest/models/audit-event-httpinfo.ts b/src/ _generated_/rest/models/audit-event-httpinfo.ts deleted file mode 100644 index 72900374..00000000 --- a/src/ _generated_/rest/models/audit-event-httpinfo.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface AuditEventHTTPInfo - */ -export interface AuditEventHTTPInfo { - /** - * The http URI that is used. - * @type {string} - * @memberof AuditEventHTTPInfo - */ - 'URI'?: string; - /** - * http method used. - * @type {string} - * @memberof AuditEventHTTPInfo - */ - 'method'?: string; -} - diff --git a/src/ _generated_/rest/models/batch-record-method.ts b/src/ _generated_/rest/models/batch-record-method.ts deleted file mode 100644 index d4b9149c..00000000 --- a/src/ _generated_/rest/models/batch-record-method.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Method of the operation. - * @export - * @enum {string} - */ - -export const BatchRecordMethod = { - None: 'NONE', - Post: 'POST', - Put: 'PUT', - Get: 'GET', - Delete: 'DELETE' -} as const; - -export type BatchRecordMethod = typeof BatchRecordMethod[keyof typeof BatchRecordMethod]; - - - diff --git a/src/ _generated_/rest/models/context-access-type.ts b/src/ _generated_/rest/models/context-access-type.ts deleted file mode 100644 index d617fceb..00000000 --- a/src/ _generated_/rest/models/context-access-type.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Type of access for the request. - * @export - * @enum {string} - */ - -export const ContextAccessType = { - AccessNone: 'ACCESS_NONE', - Api: 'API', - Sql: 'SQL' -} as const; - -export type ContextAccessType = typeof ContextAccessType[keyof typeof ContextAccessType]; - - - diff --git a/src/ _generated_/rest/models/context-auth-mode.ts b/src/ _generated_/rest/models/context-auth-mode.ts deleted file mode 100644 index fb29b110..00000000 --- a/src/ _generated_/rest/models/context-auth-mode.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Authentication mode the `actor` used. - * @export - * @enum {string} - */ - -export const ContextAuthMode = { - AuthNone: 'AUTH_NONE', - OktaJwt: 'OKTA_JWT', - ServiceAccountJwt: 'SERVICE_ACCOUNT_JWT', - PatJwt: 'PAT_JWT' -} as const; - -export type ContextAuthMode = typeof ContextAuthMode[keyof typeof ContextAuthMode]; - - - diff --git a/src/ _generated_/rest/models/detokenize-record-response-value-type.ts b/src/ _generated_/rest/models/detokenize-record-response-value-type.ts deleted file mode 100644 index 67d1f924..00000000 --- a/src/ _generated_/rest/models/detokenize-record-response-value-type.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @enum {string} - */ - -export const DetokenizeRecordResponseValueType = { - None: 'NONE', - String: 'STRING', - Integer: 'INTEGER', - Float: 'FLOAT', - Bool: 'BOOL', - Datetime: 'DATETIME', - Json: 'JSON', - Array: 'ARRAY', - Date: 'DATE' -} as const; - -export type DetokenizeRecordResponseValueType = typeof DetokenizeRecordResponseValueType[keyof typeof DetokenizeRecordResponseValueType]; - - - diff --git a/src/ _generated_/rest/models/googlerpc-status copy.ts b/src/ _generated_/rest/models/googlerpc-status copy.ts deleted file mode 100644 index 5ac0fb94..00000000 --- a/src/ _generated_/rest/models/googlerpc-status copy.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { ProtobufAny } from './protobuf-any'; - -/** - * - * @export - * @interface GooglerpcStatus - */ -export interface GooglerpcStatus { - /** - * - * @type {number} - * @memberof GooglerpcStatus - */ - 'code'?: number; - /** - * - * @type {string} - * @memberof GooglerpcStatus - */ - 'message'?: string; - /** - * - * @type {Array} - * @memberof GooglerpcStatus - */ - 'details'?: Array; -} - diff --git a/src/ _generated_/rest/models/googlerpc-status.ts b/src/ _generated_/rest/models/googlerpc-status.ts deleted file mode 100644 index 2cc089fe..00000000 --- a/src/ _generated_/rest/models/googlerpc-status.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { ProtobufAny } from './protobuf-any'; - -/** - * - * @export - * @interface GooglerpcStatus - */ -export interface GooglerpcStatus { - /** - * - * @type {number} - * @memberof GooglerpcStatus - */ - 'code'?: number; - /** - * - * @type {string} - * @memberof GooglerpcStatus - */ - 'message'?: string; - /** - * - * @type {Array} - * @memberof GooglerpcStatus - */ - 'details'?: Array; -} - diff --git a/src/ _generated_/rest/models/index.ts b/src/ _generated_/rest/models/index.ts deleted file mode 100644 index ba8a29ef..00000000 --- a/src/ _generated_/rest/models/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -export * from './audit-event-audit-resource-type'; -export * from './audit-event-context'; -export * from './audit-event-data'; -export * from './audit-event-httpinfo'; -export * from './batch-record-method'; -export * from './context-access-type'; -export * from './context-auth-mode'; -export * from './detokenize-record-response-value-type'; -export * from './googlerpc-status'; -export * from './protobuf-any'; -export * from './query-service-execute-query-body'; -export * from './record-service-batch-operation-body'; -export * from './record-service-bulk-delete-record-body'; -export * from './record-service-insert-record-body'; -export * from './record-service-update-record-body'; -export * from './redaction-enum-redaction'; -export * from './request-action-type'; -export * from './v1-audit-after-options'; -export * from './v1-audit-event-response'; -export * from './v1-audit-response'; -export * from './v1-audit-response-event'; -export * from './v1-audit-response-event-request'; -export * from './v1-binlist-request'; -export * from './v1-binlist-response'; -export * from './v1-byot'; -export * from './v1-batch-operation-response'; -export * from './v1-batch-record'; -export * from './v1-bulk-delete-record-response'; -export * from './v1-bulk-get-record-response'; -export * from './v1-card'; -export * from './v1-delete-file-response'; -export * from './v1-delete-record-response'; -export * from './v1-detokenize-payload'; -export * from './v1-detokenize-record-request'; -export * from './v1-detokenize-record-response'; -export * from './v1-detokenize-response'; -export * from './v1-field-records'; -export * from './v1-file-avscan-status'; -export * from './v1-file-info'; -export * from './v1-get-by-token-response'; -export * from './v1-get-file-scan-status-response'; -export * from './v1-get-query-response'; -export * from './v1-insert-record-response'; -export * from './v1-member-type'; -export * from './v1-record-meta-properties'; -export * from './v1-sort-options-order-by'; -export * from './v1-tokenize-payload'; -export * from './v1-tokenize-record-request'; -export * from './v1-tokenize-record-response'; -export * from './v1-tokenize-response'; -export * from './v1-update-record-response'; -export * from './v1-update-request-record'; -export * from './v1-vault-field-mapping'; -export * from './v1-vault-schema-config'; -export * from './googlerpc-status'; -export * from './protobuf-any'; -export * from './v1-get-auth-token-request'; -export * from './v1-get-auth-token-response'; \ No newline at end of file diff --git a/src/ _generated_/rest/models/protobuf-any copy.ts b/src/ _generated_/rest/models/protobuf-any copy.ts deleted file mode 100644 index 44140df3..00000000 --- a/src/ _generated_/rest/models/protobuf-any copy.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface ProtobufAny - */ -export interface ProtobufAny { - [key: string]: object | any; - - /** - * - * @type {string} - * @memberof ProtobufAny - */ - '@type'?: string; -} - diff --git a/src/ _generated_/rest/models/protobuf-any.ts b/src/ _generated_/rest/models/protobuf-any.ts deleted file mode 100644 index 1a8ce5b0..00000000 --- a/src/ _generated_/rest/models/protobuf-any.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface ProtobufAny - */ -export interface ProtobufAny { - [key: string]: object | any; - - /** - * - * @type {string} - * @memberof ProtobufAny - */ - '@type'?: string; -} - diff --git a/src/ _generated_/rest/models/query-service-execute-query-body.ts b/src/ _generated_/rest/models/query-service-execute-query-body.ts deleted file mode 100644 index 776905a0..00000000 --- a/src/ _generated_/rest/models/query-service-execute-query-body.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface QueryServiceExecuteQueryBody - */ -export interface QueryServiceExecuteQueryBody { - /** - * The SQL query to execute.

Supported commands:
  • SELECT
Supported operators:
  • >
  • <
  • =
  • AND
  • OR
  • NOT
  • LIKE
  • ILIKE
  • NULL
  • NOT NULL
Supported keywords:
  • FROM
  • JOIN
  • INNER JOIN
  • LEFT OUTER JOIN
  • LEFT JOIN
  • RIGHT OUTER JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN
  • FULL JOIN
  • OFFSET
  • LIMIT
  • WHERE
Supported functions:
  • AVG()
  • SUM()
  • COUNT()
  • MIN()
  • MAX()
  • REDACTION()
- * @type {string} - * @memberof QueryServiceExecuteQueryBody - */ - 'query'?: string; -} - diff --git a/src/ _generated_/rest/models/record-service-batch-operation-body.ts b/src/ _generated_/rest/models/record-service-batch-operation-body.ts deleted file mode 100644 index d59eed26..00000000 --- a/src/ _generated_/rest/models/record-service-batch-operation-body.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1BYOT } from './v1-byot'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1BatchRecord } from './v1-batch-record'; - -/** - * - * @export - * @interface RecordServiceBatchOperationBody - */ -export interface RecordServiceBatchOperationBody { - /** - * Record operations to perform. - * @type {Array} - * @memberof RecordServiceBatchOperationBody - */ - 'records'?: Array; - /** - * Continue performing operations on partial errors. - * @type {boolean} - * @memberof RecordServiceBatchOperationBody - */ - 'continueOnError'?: boolean; - /** - * - * @type {V1BYOT} - * @memberof RecordServiceBatchOperationBody - */ - 'byot'?: V1BYOT; -} - - - diff --git a/src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts b/src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts deleted file mode 100644 index 91652c7e..00000000 --- a/src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface RecordServiceBulkDeleteRecordBody - */ -export interface RecordServiceBulkDeleteRecordBody { - /** - * `skyflow_id` values of the records to delete. If `*` is specified, this operation deletes all records in the table. - * @type {Array} - * @memberof RecordServiceBulkDeleteRecordBody - */ - 'skyflow_ids'?: Array; -} - diff --git a/src/ _generated_/rest/models/record-service-insert-record-body.ts b/src/ _generated_/rest/models/record-service-insert-record-body.ts deleted file mode 100644 index 4e3451ae..00000000 --- a/src/ _generated_/rest/models/record-service-insert-record-body.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1BYOT } from './v1-byot'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface RecordServiceInsertRecordBody - */ -export interface RecordServiceInsertRecordBody { - /** - * Record values and tokens. - * @type {Array} - * @memberof RecordServiceInsertRecordBody - */ - 'records'?: Array; - /** - * If `true`, this operation returns tokens for fields with tokenization enabled. - * @type {boolean} - * @memberof RecordServiceInsertRecordBody - */ - 'tokenization'?: boolean; - /** - * Name of a unique column in the table. Uses upsert operations to check if a record exists based on the unique column\'s value. If a matching record exists, the record updates with the values you provide. If a matching record doesn\'t exist, the upsert operation inserts a new record.

When you upsert a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed. - * @type {string} - * @memberof RecordServiceInsertRecordBody - */ - 'upsert'?: string; - /** - * If `true`, this operation mandates that all the records have the same fields. This parameter does not work with upsert. - * @type {boolean} - * @memberof RecordServiceInsertRecordBody - */ - 'homogeneous'?: boolean; - /** - * - * @type {V1BYOT} - * @memberof RecordServiceInsertRecordBody - */ - 'byot'?: V1BYOT; -} - - - diff --git a/src/ _generated_/rest/models/record-service-update-record-body.ts b/src/ _generated_/rest/models/record-service-update-record-body.ts deleted file mode 100644 index c541c27d..00000000 --- a/src/ _generated_/rest/models/record-service-update-record-body.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1BYOT } from './v1-byot'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface RecordServiceUpdateRecordBody - */ -export interface RecordServiceUpdateRecordBody { - /** - * - * @type {V1FieldRecords} - * @memberof RecordServiceUpdateRecordBody - */ - 'record'?: V1FieldRecords; - /** - * If `true`, this operation returns tokens for fields with tokenization enabled. - * @type {boolean} - * @memberof RecordServiceUpdateRecordBody - */ - 'tokenization'?: boolean; - /** - * - * @type {V1BYOT} - * @memberof RecordServiceUpdateRecordBody - */ - 'byot'?: V1BYOT; -} - - - diff --git a/src/ _generated_/rest/models/redaction-enum-redaction.ts b/src/ _generated_/rest/models/redaction-enum-redaction.ts deleted file mode 100644 index 4ce52c08..00000000 --- a/src/ _generated_/rest/models/redaction-enum-redaction.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Redaction type. Subject to policies assigned to the API caller. When used for detokenization, only supported for vaults that support [column groups](/tokenization-column-groups/). - * @export - * @enum {string} - */ - -export const RedactionEnumREDACTION = { - Default: 'DEFAULT', - Redacted: 'REDACTED', - Masked: 'MASKED', - PlainText: 'PLAIN_TEXT' -} as const; - -export type RedactionEnumREDACTION = typeof RedactionEnumREDACTION[keyof typeof RedactionEnumREDACTION]; - - - diff --git a/src/ _generated_/rest/models/request-action-type.ts b/src/ _generated_/rest/models/request-action-type.ts deleted file mode 100644 index ac0c0c3e..00000000 --- a/src/ _generated_/rest/models/request-action-type.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @enum {string} - */ - -export const RequestActionType = { - None: 'NONE', - Assign: 'ASSIGN', - Create: 'CREATE', - Delete: 'DELETE', - Execute: 'EXECUTE', - List: 'LIST', - Read: 'READ', - Unassign: 'UNASSIGN', - Update: 'UPDATE', - Validate: 'VALIDATE', - Login: 'LOGIN', - Rotate: 'ROTATE', - Schedulerotation: 'SCHEDULEROTATION', - Schedulerotationalert: 'SCHEDULEROTATIONALERT', - Import: 'IMPORT', - Getimportparameters: 'GETIMPORTPARAMETERS', - Ping: 'PING', - Getcloudprovider: 'GETCLOUDPROVIDER' -} as const; - -export type RequestActionType = typeof RequestActionType[keyof typeof RequestActionType]; - - - diff --git a/src/ _generated_/rest/models/v1-audit-after-options.ts b/src/ _generated_/rest/models/v1-audit-after-options.ts deleted file mode 100644 index 6e1d07b3..00000000 --- a/src/ _generated_/rest/models/v1-audit-after-options.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1AuditAfterOptions - */ -export interface V1AuditAfterOptions { - /** - * Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @type {string} - * @memberof V1AuditAfterOptions - */ - 'timestamp'?: string; - /** - * Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @type {string} - * @memberof V1AuditAfterOptions - */ - 'changeID'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-audit-event-response.ts b/src/ _generated_/rest/models/v1-audit-event-response.ts deleted file mode 100644 index 0189c834..00000000 --- a/src/ _generated_/rest/models/v1-audit-event-response.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventData } from './audit-event-data'; - -/** - * Contains fields for defining Response Properties. - * @export - * @interface V1AuditEventResponse - */ -export interface V1AuditEventResponse { - /** - * The status of the overall operation. - * @type {number} - * @memberof V1AuditEventResponse - */ - 'code'?: number; - /** - * The status message for the overall operation. - * @type {string} - * @memberof V1AuditEventResponse - */ - 'message'?: string; - /** - * - * @type {AuditEventData} - * @memberof V1AuditEventResponse - */ - 'data'?: AuditEventData; - /** - * time when this response is generated, use extention method to set it. - * @type {string} - * @memberof V1AuditEventResponse - */ - 'timestamp'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-audit-response-event-request.ts b/src/ _generated_/rest/models/v1-audit-response-event-request.ts deleted file mode 100644 index 79c0c255..00000000 --- a/src/ _generated_/rest/models/v1-audit-response-event-request.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventAuditResourceType } from './audit-event-audit-resource-type'; -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventData } from './audit-event-data'; -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventHTTPInfo } from './audit-event-httpinfo'; -// May contain unused imports in some cases -// @ts-ignore -import type { RequestActionType } from './request-action-type'; - -/** - * Contains fields for defining Request Properties. - * @export - * @interface V1AuditResponseEventRequest - */ -export interface V1AuditResponseEventRequest { - /** - * - * @type {AuditEventData} - * @memberof V1AuditResponseEventRequest - */ - 'data'?: AuditEventData; - /** - * API name. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'apiName'?: string; - /** - * The workspaceID (if any) of the request. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'workspaceID'?: string; - /** - * The vaultID (if any) of the request. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'vaultID'?: string; - /** - * Tags associated with the event. To provide better search capabilities. Like login. - * @type {Array} - * @memberof V1AuditResponseEventRequest - */ - 'tags'?: Array; - /** - * time when this request is generated, use extention method to set it. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'timestamp'?: string; - /** - * - * @type {RequestActionType} - * @memberof V1AuditResponseEventRequest - */ - 'actionType'?: RequestActionType; - /** - * - * @type {AuditEventAuditResourceType} - * @memberof V1AuditResponseEventRequest - */ - 'resourceType'?: AuditEventAuditResourceType; - /** - * - * @type {AuditEventHTTPInfo} - * @memberof V1AuditResponseEventRequest - */ - 'httpInfo'?: AuditEventHTTPInfo; -} - - - diff --git a/src/ _generated_/rest/models/v1-audit-response-event.ts b/src/ _generated_/rest/models/v1-audit-response-event.ts deleted file mode 100644 index 416a07d5..00000000 --- a/src/ _generated_/rest/models/v1-audit-response-event.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventContext } from './audit-event-context'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditEventResponse } from './v1-audit-event-response'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditResponseEventRequest } from './v1-audit-response-event-request'; - -/** - * Audit event details. - * @export - * @interface V1AuditResponseEvent - */ -export interface V1AuditResponseEvent { - /** - * - * @type {AuditEventContext} - * @memberof V1AuditResponseEvent - */ - 'context'?: AuditEventContext; - /** - * - * @type {V1AuditResponseEventRequest} - * @memberof V1AuditResponseEvent - */ - 'request'?: V1AuditResponseEventRequest; - /** - * - * @type {V1AuditEventResponse} - * @memberof V1AuditResponseEvent - */ - 'response'?: V1AuditEventResponse; - /** - * Parent account ID of the account that made the request, if any. - * @type {string} - * @memberof V1AuditResponseEvent - */ - 'parentAccountID'?: string; - /** - * ID of the account that made the request. - * @type {string} - * @memberof V1AuditResponseEvent - */ - 'accountID'?: string; - /** - * IDs for resources involved in the event. Presented in `{resourceType}/{resourceID}` format. For example, `VAULT/cd1d815aa09b4cbfbb803bd20349f202`. - * @type {Array} - * @memberof V1AuditResponseEvent - */ - 'resourceIDs'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-audit-response.ts b/src/ _generated_/rest/models/v1-audit-response.ts deleted file mode 100644 index 511054e2..00000000 --- a/src/ _generated_/rest/models/v1-audit-response.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditAfterOptions } from './v1-audit-after-options'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditResponseEvent } from './v1-audit-response-event'; - -/** - * - * @export - * @interface V1AuditResponse - */ -export interface V1AuditResponse { - /** - * Events matching the query. - * @type {Array} - * @memberof V1AuditResponse - */ - 'event'?: Array; - /** - * - * @type {V1AuditAfterOptions} - * @memberof V1AuditResponse - */ - 'nextOps'?: V1AuditAfterOptions; -} - diff --git a/src/ _generated_/rest/models/v1-batch-operation-response.ts b/src/ _generated_/rest/models/v1-batch-operation-response.ts deleted file mode 100644 index 838512bd..00000000 --- a/src/ _generated_/rest/models/v1-batch-operation-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1BatchOperationResponse - */ -export interface V1BatchOperationResponse { - /** - * ID of the vault. - * @type {string} - * @memberof V1BatchOperationResponse - */ - 'vaultID'?: string; - /** - * Responses in the same order as in the request. Responses have the same payload structure as their corresponding APIs:
  • `POST` returns an Insert Records response.
  • `PUT` returns an Update Record response.
  • `GET` returns a Get Record response.
  • `DELETE` returns a Delete Record response.
- * @type {Array} - * @memberof V1BatchOperationResponse - */ - 'responses'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-batch-record.ts b/src/ _generated_/rest/models/v1-batch-record.ts deleted file mode 100644 index fe6c8a1b..00000000 --- a/src/ _generated_/rest/models/v1-batch-record.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { BatchRecordMethod } from './batch-record-method'; -// May contain unused imports in some cases -// @ts-ignore -import type { RedactionEnumREDACTION } from './redaction-enum-redaction'; - -/** - * - * @export - * @interface V1BatchRecord - */ -export interface V1BatchRecord { - /** - * Field and value key pairs. For example, `{\'field_1\':\'value_1\', \'field_2\':\'value_2\'}`. Only valid when `method` is `POST` or `PUT`. - * @type {object} - * @memberof V1BatchRecord - */ - 'fields'?: object; - /** - * Name of the table to perform the operation on. - * @type {string} - * @memberof V1BatchRecord - */ - 'tableName'?: string; - /** - * - * @type {BatchRecordMethod} - * @memberof V1BatchRecord - */ - 'method'?: BatchRecordMethod; - /** - * ID to group operations by. Operations in the same group are executed sequentially. - * @type {string} - * @memberof V1BatchRecord - */ - 'batchID'?: string; - /** - * - * @type {RedactionEnumREDACTION} - * @memberof V1BatchRecord - */ - 'redaction'?: RedactionEnumREDACTION; - /** - * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @type {boolean} - * @memberof V1BatchRecord - */ - 'tokenization'?: boolean; - /** - * `skyflow_id` for the record. Only valid when `method` is `GET`, `DELETE`, or `PUT`. - * @type {string} - * @memberof V1BatchRecord - */ - 'ID'?: string; - /** - * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @type {boolean} - * @memberof V1BatchRecord - */ - 'downloadURL'?: boolean; - /** - * Column that stores primary keys for upsert operations. The column must be marked as unique in the vault schema. Only valid when `method` is `POST`. - * @type {string} - * @memberof V1BatchRecord - */ - 'upsert'?: string; - /** - * Fields and tokens for the record. For example, `{\'field_1\':\'token_1\', \'field_2\':\'token_2\'}`. - * @type {object} - * @memberof V1BatchRecord - */ - 'tokens'?: object; -} - - - diff --git a/src/ _generated_/rest/models/v1-binlist-request.ts b/src/ _generated_/rest/models/v1-binlist-request.ts deleted file mode 100644 index 5f4f32d6..00000000 --- a/src/ _generated_/rest/models/v1-binlist-request.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1VaultSchemaConfig } from './v1-vault-schema-config'; - -/** - * Request to return specific card metadata. - * @export - * @interface V1BINListRequest - */ -export interface V1BINListRequest { - /** - * Fields to return. If not specified, all fields are returned. - * @type {Array} - * @memberof V1BINListRequest - */ - 'fields'?: Array; - /** - * BIN of the card. - * @type {string} - * @memberof V1BINListRequest - */ - 'BIN'?: string; - /** - * - * @type {V1VaultSchemaConfig} - * @memberof V1BINListRequest - */ - 'vault_schema_config'?: V1VaultSchemaConfig; - /** - * skyflow_id of the record. - * @type {string} - * @memberof V1BINListRequest - */ - 'skyflow_id'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-binlist-response.ts b/src/ _generated_/rest/models/v1-binlist-response.ts deleted file mode 100644 index a60f59cc..00000000 --- a/src/ _generated_/rest/models/v1-binlist-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1Card } from './v1-card'; - -/** - * Response to the Get BIN request. - * @export - * @interface V1BINListResponse - */ -export interface V1BINListResponse { - /** - * Card metadata associated with the specified BIN. - * @type {Array} - * @memberof V1BINListResponse - */ - 'cards_data'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-bulk-delete-record-response.ts b/src/ _generated_/rest/models/v1-bulk-delete-record-response.ts deleted file mode 100644 index 909aa698..00000000 --- a/src/ _generated_/rest/models/v1-bulk-delete-record-response.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1BulkDeleteRecordResponse - */ -export interface V1BulkDeleteRecordResponse { - /** - * IDs for the deleted records, or `*` if all records were deleted. - * @type {Array} - * @memberof V1BulkDeleteRecordResponse - */ - 'RecordIDResponse'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-bulk-get-record-response.ts b/src/ _generated_/rest/models/v1-bulk-get-record-response.ts deleted file mode 100644 index 26e86956..00000000 --- a/src/ _generated_/rest/models/v1-bulk-get-record-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface V1BulkGetRecordResponse - */ -export interface V1BulkGetRecordResponse { - /** - * The specified records. - * @type {Array} - * @memberof V1BulkGetRecordResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-byot.ts b/src/ _generated_/rest/models/v1-byot.ts deleted file mode 100644 index cd493dae..00000000 --- a/src/ _generated_/rest/models/v1-byot.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Token insertion behavior. - DISABLE: Tokens aren\'t allowed for any fields. If tokens are specified, the request fails. - ENABLE: Tokens are allowed—but not required—for all fields. If tokens are specified, they\'re inserted. - ENABLE_STRICT: Tokens are required for all fields. If tokens are specified, they\'re inserted. If not, the request fails. - * @export - * @enum {string} - */ - -export const V1BYOT = { - Disable: 'DISABLE', - Enable: 'ENABLE', - EnableStrict: 'ENABLE_STRICT' -} as const; - -export type V1BYOT = typeof V1BYOT[keyof typeof V1BYOT]; - - - diff --git a/src/ _generated_/rest/models/v1-card.ts b/src/ _generated_/rest/models/v1-card.ts deleted file mode 100644 index dd9a0a6a..00000000 --- a/src/ _generated_/rest/models/v1-card.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Card metadata of the requested BIN. - * @export - * @interface V1Card - */ -export interface V1Card { - /** - * BIN of the card. - * @type {string} - * @memberof V1Card - */ - 'BIN'?: string; - /** - * Name of the card issuer bank. - * @type {string} - * @memberof V1Card - */ - 'issuer_name'?: string; - /** - * Country code of the card. - * @type {string} - * @memberof V1Card - */ - 'country_code'?: string; - /** - * Currency of the card. - * @type {string} - * @memberof V1Card - */ - 'currency'?: string; - /** - * Type of the card. - * @type {string} - * @memberof V1Card - */ - 'card_type'?: string; - /** - * Category of the card. - * @type {string} - * @memberof V1Card - */ - 'card_category'?: string; - /** - * Scheme of the card. - * @type {string} - * @memberof V1Card - */ - 'card_scheme'?: string; - /** - * Last four digits of the card number. - * @type {string} - * @memberof V1Card - */ - 'card_last_four_digits'?: string; - /** - * Expiry date of the card. - * @type {string} - * @memberof V1Card - */ - 'card_expiry'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-delete-file-response.ts b/src/ _generated_/rest/models/v1-delete-file-response.ts deleted file mode 100644 index 8b9d4d92..00000000 --- a/src/ _generated_/rest/models/v1-delete-file-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1DeleteFileResponse - */ -export interface V1DeleteFileResponse { - /** - * ID of the record. - * @type {string} - * @memberof V1DeleteFileResponse - */ - 'skyflow_id'?: string; - /** - * If `true`, the file was deleted. - * @type {boolean} - * @memberof V1DeleteFileResponse - */ - 'deleted'?: boolean; -} - diff --git a/src/ _generated_/rest/models/v1-delete-record-response.ts b/src/ _generated_/rest/models/v1-delete-record-response.ts deleted file mode 100644 index 0e5c39fc..00000000 --- a/src/ _generated_/rest/models/v1-delete-record-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1DeleteRecordResponse - */ -export interface V1DeleteRecordResponse { - /** - * ID of the deleted record. - * @type {string} - * @memberof V1DeleteRecordResponse - */ - 'skyflow_id'?: string; - /** - * If `true`, the record was deleted. - * @type {boolean} - * @memberof V1DeleteRecordResponse - */ - 'deleted'?: boolean; -} - diff --git a/src/ _generated_/rest/models/v1-detokenize-payload.ts b/src/ _generated_/rest/models/v1-detokenize-payload.ts deleted file mode 100644 index ac93e14e..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-payload.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1DetokenizeRecordRequest } from './v1-detokenize-record-request'; - -/** - * - * @export - * @interface V1DetokenizePayload - */ -export interface V1DetokenizePayload { - /** - * Detokenization details. - * @type {Array} - * @memberof V1DetokenizePayload - */ - 'detokenizationParameters'?: Array; - /** - * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @type {boolean} - * @memberof V1DetokenizePayload - */ - 'downloadURL'?: boolean; - /** - * If `true`, the detokenization request continues even if an error occurs. - * @type {boolean} - * @memberof V1DetokenizePayload - */ - 'continueOnError'?: boolean; -} - diff --git a/src/ _generated_/rest/models/v1-detokenize-record-request.ts b/src/ _generated_/rest/models/v1-detokenize-record-request.ts deleted file mode 100644 index ba5bc7bd..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-record-request.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { RedactionEnumREDACTION } from './redaction-enum-redaction'; - -/** - * - * @export - * @interface V1DetokenizeRecordRequest - */ -export interface V1DetokenizeRecordRequest { - /** - * Token that identifies the record to detokenize. - * @type {string} - * @memberof V1DetokenizeRecordRequest - */ - 'token'?: string; - /** - * - * @type {RedactionEnumREDACTION} - * @memberof V1DetokenizeRecordRequest - */ - 'redaction'?: RedactionEnumREDACTION; -} - - - diff --git a/src/ _generated_/rest/models/v1-detokenize-record-response.ts b/src/ _generated_/rest/models/v1-detokenize-record-response.ts deleted file mode 100644 index 2da52663..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-record-response.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { DetokenizeRecordResponseValueType } from './detokenize-record-response-value-type'; - -/** - * - * @export - * @interface V1DetokenizeRecordResponse - */ -export interface V1DetokenizeRecordResponse { - /** - * Token of the record. - * @type {string} - * @memberof V1DetokenizeRecordResponse - */ - 'token'?: string; - /** - * - * @type {DetokenizeRecordResponseValueType} - * @memberof V1DetokenizeRecordResponse - */ - 'valueType'?: DetokenizeRecordResponseValueType; - /** - * Data corresponding to the token. - * @type {string} - * @memberof V1DetokenizeRecordResponse - */ - 'value'?: string; - /** - * Error if token isn\'t found. - * @type {string} - * @memberof V1DetokenizeRecordResponse - */ - 'error'?: string; -} - - - diff --git a/src/ _generated_/rest/models/v1-detokenize-response.ts b/src/ _generated_/rest/models/v1-detokenize-response.ts deleted file mode 100644 index b8d63279..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1DetokenizeRecordResponse } from './v1-detokenize-record-response'; - -/** - * - * @export - * @interface V1DetokenizeResponse - */ -export interface V1DetokenizeResponse { - /** - * Records corresponding to the specified tokens. - * @type {Array} - * @memberof V1DetokenizeResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-field-records.ts b/src/ _generated_/rest/models/v1-field-records.ts deleted file mode 100644 index 817e7fed..00000000 --- a/src/ _generated_/rest/models/v1-field-records.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Record values and tokens. - * @export - * @interface V1FieldRecords - */ -export interface V1FieldRecords { - /** - * Fields and values for the record. For example, `{\'field_1\':\'value_1\', \'field_2\':\'value_2\'}`. - * @type {object} - * @memberof V1FieldRecords - */ - 'fields'?: object; - /** - * Fields and tokens for the record. For example, `{\'field_1\':\'token_1\', \'field_2\':\'token_2\'}`. - * @type {object} - * @memberof V1FieldRecords - */ - 'tokens'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-file-avscan-status.ts b/src/ _generated_/rest/models/v1-file-avscan-status.ts deleted file mode 100644 index 9f1bbe30..00000000 --- a/src/ _generated_/rest/models/v1-file-avscan-status.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Anti-virus scan status of the file. - * @export - * @enum {string} - */ - -export const V1FileAVScanStatus = { - None: 'SCAN_NONE', - Clean: 'SCAN_CLEAN', - Infected: 'SCAN_INFECTED', - Deleted: 'SCAN_DELETED', - Error: 'SCAN_ERROR', - Pending: 'SCAN_PENDING', - Unscannable: 'SCAN_UNSCANNABLE', - FileNotFound: 'SCAN_FILE_NOT_FOUND', - Invalid: 'SCAN_INVALID' -} as const; - -export type V1FileAVScanStatus = typeof V1FileAVScanStatus[keyof typeof V1FileAVScanStatus]; - - - diff --git a/src/ _generated_/rest/models/v1-file-info.ts b/src/ _generated_/rest/models/v1-file-info.ts deleted file mode 100644 index 58993a17..00000000 --- a/src/ _generated_/rest/models/v1-file-info.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1FileInfo - */ -export interface V1FileInfo { - /** - * The JSON Data for the notebook. - * @type {object} - * @memberof V1FileInfo - */ - 'fields'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-get-auth-token-request.ts b/src/ _generated_/rest/models/v1-get-auth-token-request.ts deleted file mode 100644 index a49d53c7..00000000 --- a/src/ _generated_/rest/models/v1-get-auth-token-request.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1GetAuthTokenRequest - */ -export interface V1GetAuthTokenRequest { - /** - * Grant type of the request. Set this to `urn:ietf:params:oauth:grant-type:jwt-bearer`. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'grant_type': string; - /** - * User-signed JWT token that contains the following fields:
  • iss: Issuer of the JWT.
  • key: Unique identifier for the key.
  • aud: Recipient the JWT is intended for.
  • exp: Time the JWT expires.
  • sub: Subject of the JWT.
  • ctx: (Optional) Value for Context-aware authorization.
- * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'assertion': string; - /** - * Subject token. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'subject_token'?: string; - /** - * Subject token type. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'subject_token_type'?: string; - /** - * Token use type. Either `delegation` or `impersonation`. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'requested_token_use'?: string; - /** - * Subset of available roles to associate with the requested token. Uses the format \"role:\\ role:\\\". - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'scope'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-get-auth-token-response.ts b/src/ _generated_/rest/models/v1-get-auth-token-response.ts deleted file mode 100644 index 5599bc47..00000000 --- a/src/ _generated_/rest/models/v1-get-auth-token-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1GetAuthTokenResponse - */ -export interface V1GetAuthTokenResponse { - /** - * AccessToken. - * @type {string} - * @memberof V1GetAuthTokenResponse - */ - 'accessToken'?: string; - /** - * TokenType : Bearer. - * @type {string} - * @memberof V1GetAuthTokenResponse - */ - 'tokenType'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-get-by-token-response.ts b/src/ _generated_/rest/models/v1-get-by-token-response.ts deleted file mode 100644 index 7289954a..00000000 --- a/src/ _generated_/rest/models/v1-get-by-token-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1GetByTokenResponse - */ -export interface V1GetByTokenResponse { - /** - * Token of the returned record. - * @type {string} - * @memberof V1GetByTokenResponse - */ - 'token_id'?: string; - /** - * Record corresponding to the token. - * @type {object} - * @memberof V1GetByTokenResponse - */ - 'fields'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-get-file-scan-status-response.ts b/src/ _generated_/rest/models/v1-get-file-scan-status-response.ts deleted file mode 100644 index 1c90f9e6..00000000 --- a/src/ _generated_/rest/models/v1-get-file-scan-status-response.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1FileAVScanStatus } from './v1-file-avscan-status'; - -/** - * - * @export - * @interface V1GetFileScanStatusResponse - */ -export interface V1GetFileScanStatusResponse { - /** - * - * @type {V1FileAVScanStatus} - * @memberof V1GetFileScanStatusResponse - */ - 'av_scan_status'?: V1FileAVScanStatus; -} - - - diff --git a/src/ _generated_/rest/models/v1-get-query-response.ts b/src/ _generated_/rest/models/v1-get-query-response.ts deleted file mode 100644 index c61f771c..00000000 --- a/src/ _generated_/rest/models/v1-get-query-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface V1GetQueryResponse - */ -export interface V1GetQueryResponse { - /** - * Records returned by the query. - * @type {Array} - * @memberof V1GetQueryResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-insert-record-response.ts b/src/ _generated_/rest/models/v1-insert-record-response.ts deleted file mode 100644 index ba160914..00000000 --- a/src/ _generated_/rest/models/v1-insert-record-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1RecordMetaProperties } from './v1-record-meta-properties'; - -/** - * - * @export - * @interface V1InsertRecordResponse - */ -export interface V1InsertRecordResponse { - /** - * Identifiers for the inserted records. - * @type {Array} - * @memberof V1InsertRecordResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-member-type.ts b/src/ _generated_/rest/models/v1-member-type.ts deleted file mode 100644 index 7c940db4..00000000 --- a/src/ _generated_/rest/models/v1-member-type.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Type of the member. - * @export - * @enum {string} - */ - -export const V1MemberType = { - None: 'NONE', - User: 'USER', - ServiceAccount: 'SERVICE_ACCOUNT' -} as const; - -export type V1MemberType = typeof V1MemberType[keyof typeof V1MemberType]; - - - diff --git a/src/ _generated_/rest/models/v1-record-meta-properties.ts b/src/ _generated_/rest/models/v1-record-meta-properties.ts deleted file mode 100644 index 5753e0e6..00000000 --- a/src/ _generated_/rest/models/v1-record-meta-properties.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1RecordMetaProperties - */ -export interface V1RecordMetaProperties { - /** - * ID of the inserted record. - * @type {string} - * @memberof V1RecordMetaProperties - */ - 'skyflow_id'?: string; - /** - * Tokens for the record. - * @type {object} - * @memberof V1RecordMetaProperties - */ - 'tokens'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-sort-options-order-by.ts b/src/ _generated_/rest/models/v1-sort-options-order-by.ts deleted file mode 100644 index 320a2eed..00000000 --- a/src/ _generated_/rest/models/v1-sort-options-order-by.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @enum {string} - */ - -export const V1SortOptionsOrderBy = { - Ascending: 'ASCENDING', - Descending: 'DESCENDING' -} as const; - -export type V1SortOptionsOrderBy = typeof V1SortOptionsOrderBy[keyof typeof V1SortOptionsOrderBy]; - - - diff --git a/src/ _generated_/rest/models/v1-tokenize-payload.ts b/src/ _generated_/rest/models/v1-tokenize-payload.ts deleted file mode 100644 index 0adc9fd6..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-payload.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1TokenizeRecordRequest } from './v1-tokenize-record-request'; - -/** - * - * @export - * @interface V1TokenizePayload - */ -export interface V1TokenizePayload { - /** - * Tokenization details. - * @type {Array} - * @memberof V1TokenizePayload - */ - 'tokenizationParameters'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-tokenize-record-request.ts b/src/ _generated_/rest/models/v1-tokenize-record-request.ts deleted file mode 100644 index 3a86cd3e..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-record-request.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1TokenizeRecordRequest - */ -export interface V1TokenizeRecordRequest { - /** - * Existing value to return a token for. - * @type {string} - * @memberof V1TokenizeRecordRequest - */ - 'value'?: string; - /** - * Name of the column group that the value belongs to. - * @type {string} - * @memberof V1TokenizeRecordRequest - */ - 'columnGroup'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-tokenize-record-response.ts b/src/ _generated_/rest/models/v1-tokenize-record-response.ts deleted file mode 100644 index 47d914b4..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-record-response.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1TokenizeRecordResponse - */ -export interface V1TokenizeRecordResponse { - /** - * Token corresponding to a value. - * @type {string} - * @memberof V1TokenizeRecordResponse - */ - 'token'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-tokenize-response.ts b/src/ _generated_/rest/models/v1-tokenize-response.ts deleted file mode 100644 index 439f5f13..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1TokenizeRecordResponse } from './v1-tokenize-record-response'; - -/** - * - * @export - * @interface V1TokenizeResponse - */ -export interface V1TokenizeResponse { - /** - * Tokens corresponding to the specified values. - * @type {Array} - * @memberof V1TokenizeResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-update-record-response.ts b/src/ _generated_/rest/models/v1-update-record-response.ts deleted file mode 100644 index 69c9c6a1..00000000 --- a/src/ _generated_/rest/models/v1-update-record-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1UpdateRecordResponse - */ -export interface V1UpdateRecordResponse { - /** - * ID of the updated record. - * @type {string} - * @memberof V1UpdateRecordResponse - */ - 'skyflow_id'?: string; - /** - * Tokens for the record. - * @type {object} - * @memberof V1UpdateRecordResponse - */ - 'tokens'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-update-request-record.ts b/src/ _generated_/rest/models/v1-update-request-record.ts deleted file mode 100644 index 6d2dbb97..00000000 --- a/src/ _generated_/rest/models/v1-update-request-record.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1UpdateRequestRecord - */ -export interface V1UpdateRequestRecord { - /** - * ID of the record to be updated. - * @type {string} - * @memberof V1UpdateRequestRecord - */ - 'ID'?: string; - /** - * Record data. - * @type {object} - * @memberof V1UpdateRequestRecord - */ - 'fields'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-vault-field-mapping.ts b/src/ _generated_/rest/models/v1-vault-field-mapping.ts deleted file mode 100644 index 5fcf4f84..00000000 --- a/src/ _generated_/rest/models/v1-vault-field-mapping.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Mapping of the fields in the vault to the fields to use for the lookup. - * @export - * @interface V1VaultFieldMapping - */ -export interface V1VaultFieldMapping { - /** - * Name of the column that stores the card number. - * @type {string} - * @memberof V1VaultFieldMapping - */ - 'card_number'?: string; - /** - * Name of the column that stores the card number suffix. - * @type {string} - * @memberof V1VaultFieldMapping - */ - 'card_last_four_digits'?: string; - /** - * Name of the column that stores the expiry date. - * @type {string} - * @memberof V1VaultFieldMapping - */ - 'card_expiry'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-vault-schema-config.ts b/src/ _generated_/rest/models/v1-vault-schema-config.ts deleted file mode 100644 index afabed0c..00000000 --- a/src/ _generated_/rest/models/v1-vault-schema-config.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1VaultFieldMapping } from './v1-vault-field-mapping'; - -/** - * Details of the vault that stores additional card details. - * @export - * @interface V1VaultSchemaConfig - */ -export interface V1VaultSchemaConfig { - /** - * ID of the vault that stores card details. - * @type {string} - * @memberof V1VaultSchemaConfig - */ - 'id'?: string; - /** - * Name of the table that stores card details. - * @type {string} - * @memberof V1VaultSchemaConfig - */ - 'table_name'?: string; - /** - * - * @type {V1VaultFieldMapping} - * @memberof V1VaultSchemaConfig - */ - 'mapping'?: V1VaultFieldMapping; -} - diff --git a/src/ _generated_/rest/version.ts b/src/ _generated_/rest/version.ts new file mode 100644 index 00000000..e3655fb3 --- /dev/null +++ b/src/ _generated_/rest/version.ts @@ -0,0 +1 @@ +export const SDK_VERSION = "1.0.21"; diff --git a/src/error/codes/index.ts b/src/error/codes/index.ts index 4be92e25..fc312b84 100644 --- a/src/error/codes/index.ts +++ b/src/error/codes/index.ts @@ -118,6 +118,11 @@ const SKYFLOW_ERROR_CODE = { MISSING_FILE_PATH_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.MISSING_FILE_PATH_IN_UPLOAD_FILE }, INVALID_FILE_PATH_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.INVALID_FILE_PATH_IN_UPLOAD_FILE }, INVALID_FILE_UPLOAD_REQUEST: { http_code: 400, message: errorMessages.INVALID_FILE_UPLOAD_REQUEST }, + MISSING_FILE_SOURCE_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.MISSING_FILE_SOURCE_IN_UPLOAD_FILE }, + MISSING_FILE_NAME_FOR_BASE64: { http_code: 400, message: errorMessages.MISSING_FILE_NAME_FOR_BASE64 }, + INVALID_FILE_OBJECT_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.INVALID_FILE_OBJECT_IN_UPLOAD_FILE }, + MISSING_FILE_NAME_IN_FILE_OBJECT: { http_code: 400, message: errorMessages.MISSING_FILE_NAME_IN_FILE_OBJECT }, + INVALID_BASE64_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.INVALID_BASE64_IN_UPLOAD_FILE }, MISSING_SKYFLOW_ID_IN_UPDATE: { http_code: 400, message: errorMessages.MISSING_SKYFLOW_ID_IN_UPDATE }, INVALID_SKYFLOW_ID_IN_UPDATE: { http_code: 400, message: errorMessages.INVALID_SKYFLOW_ID_IN_UPDATE }, diff --git a/src/error/messages/index.ts b/src/error/messages/index.ts index f4f6aed8..ccb56fb8 100644 --- a/src/error/messages/index.ts +++ b/src/error/messages/index.ts @@ -114,6 +114,11 @@ const errorMessages = { INVALID_COLUMN_NAME_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid column name in file upload request. Specify a valid column name.`, MISSING_FILE_PATH_IN_UPLOAD_FILE: `${errorPrefix} Validation error. File path cannot be empty in file upload request. Specify a valid file path as string.`, INVALID_FILE_PATH_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid file path in file upload request. Specify a valid file path.`, + MISSING_FILE_SOURCE_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Provide exactly one of filePath, base64, or fileObject.`, + MISSING_FILE_NAME_FOR_BASE64: `${errorPrefix} Validation error. File name is required when providing a base64 string`, + INVALID_FILE_OBJECT_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid file object in file upload request. Specify a valid file object.`, + MISSING_FILE_NAME_IN_FILE_OBJECT: `${errorPrefix} Validation error. File name is required when providing a file object. Specify a valid file name.`, + INVALID_BASE64_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid base64 string in file upload request. Specify a valid base64 string.`, MISSING_SKYFLOW_ID_IN_UPDATE: `${errorPrefix} Validation error. Skyflow id name cannot be empty in update request. Specify a skyflow Id name as string.`, INVALID_SKYFLOW_ID_IN_UPDATE: `${errorPrefix} Validation error. Invalid skyflow Id in update request. Specify a valid skyflow Id.`, diff --git a/src/index.ts b/src/index.ts index f8edec2e..145621f4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import GetRequest from './vault/model/request/get'; import GetOptions from './vault/model/options/get'; import DetokenizeRequest from './vault/model/request/detokenize'; import DetokenizeOptions from './vault/model/options/detokenize'; +import FileUploadOptions from './vault/model/options/fileUpload'; import DeleteRequest from './vault/model/request/delete'; import UpdateRequest from './vault/model/request/update'; import FileUploadRequest from './vault/model/request/file-upload'; @@ -26,7 +27,7 @@ import UpdateResponse from './vault/model/response/update'; import FileUploadResponse from './vault/model/response/file-upload'; import QueryResponse from './vault/model/response/query'; import InvokeConnectionResponse from './vault/model/response/invoke/invoke'; -import { SkyflowConfig, TokenizeRequestType } from './vault/types'; +import { SkyflowConfig, TokenizeRequestType, DetokenizeData } from './vault/types'; import VaultConfig from './vault/config/vault'; import SkyflowError from './error'; import ConnectionConfig from './vault/config/connection'; @@ -61,6 +62,7 @@ export { GetOptions, GetResponse, DetokenizeRequest, + DetokenizeData, DetokenizeOptions, DetokenizeResponse, DeleteRequest, @@ -69,6 +71,7 @@ export { UpdateOptions, UpdateResponse, FileUploadRequest, + FileUploadOptions, FileUploadResponse, QueryRequest, QueryResponse, diff --git a/src/service-account/client/index.ts b/src/service-account/client/index.ts index b2d07a97..77289fda 100644 --- a/src/service-account/client/index.ts +++ b/src/service-account/client/index.ts @@ -1,18 +1,15 @@ // imports -import { AuthenticationApi, Configuration } from "../../ _generated_/rest"; - +import { Authentication } from "../../ _generated_/rest/api/resources/authentication/client/Client"; class Client { - configuration: Configuration; - - authApi: AuthenticationApi; + authApi: Authentication; constructor(tokenURI: string) { - this.configuration = new Configuration({ - basePath: tokenURI, + this.authApi = new Authentication({ + baseUrl: tokenURI, + token:'' }); - this.authApi = new AuthenticationApi(this.configuration); } } diff --git a/src/service-account/index.ts b/src/service-account/index.ts index e31c3f4c..e19257f6 100644 --- a/src/service-account/index.ts +++ b/src/service-account/index.ts @@ -1,6 +1,6 @@ import * as fs from 'fs'; import jwt from "jsonwebtoken"; -import { V1GetAuthTokenRequest } from '../ _generated_/rest'; +import { V1GetAuthTokenRequest } from '../ _generated_/rest/api'; import { getBaseUrl, LogLevel, MessageType, parameterizedString, printLog } from '../utils'; import Client from './client'; import logs from '../utils/logs'; @@ -144,8 +144,8 @@ function getToken(credentials, options?: BearerTokenOptions): Promise { - successResponse(res, options?.logLevel).then((response) => resolve(response)).catch(err => reject(err)) + ).withRawResponse().then((res: any) => { + successResponse(res.data, options?.logLevel).then((response) => resolve(response)).catch(err => reject(err)) }) .catch((err) => { failureResponse(err).catch(err => reject(err)) @@ -284,27 +284,25 @@ function generateSignedDataTokensFromCreds(credentials, options: SignedDataToken function failureResponse(err: any) { return new Promise((_, reject) => { - if (err.response) { - let data = err.response.data - const headerMap = err.response.headers - const requestId = headerMap['x-request-id']; - const contentType = headerMap["content-type"]; + if (err.rawResponse) { + const requestId = err?.rawResponse?.headers?.get('x-request-id');; + const contentType = err?.rawResponse?.headers?.get('content-type'); if (contentType && contentType.includes('application/json')) { - let description = data; + let description = err?.body; if (description?.error?.message) { description =description?.error?.message; } printLog(description, MessageType.ERROR); reject(new SkyflowError({ - http_code: err.response.status, + http_code: err?.body?.error?.http_code, message: description, request_ID: requestId, })); } else if (contentType && contentType.includes('text/plain')) { - let description = data + let description = err?.body; printLog(description, MessageType.ERROR); reject(new SkyflowError({ - http_code: err.response.status, + http_code: err?.body?.error?.http_code, message: description, request_ID: requestId })); @@ -331,8 +329,8 @@ function successResponse(res: any, logLevel?: LogLevel): Promise printLog(logs.infoLogs.GENERATE_BEARER_TOKEN_SUCCESS, MessageType.LOG, logLevel); return new Promise((resolve, _) => { resolve({ - accessToken: res.data.accessToken, - tokenType: res.data.tokenType, + accessToken: res.accessToken, + tokenType: res.tokenType, }); }) } diff --git a/src/utils/validations/index.ts b/src/utils/validations/index.ts index 09b31ba6..5409dd4d 100644 --- a/src/utils/validations/index.ts +++ b/src/utils/validations/index.ts @@ -1,5 +1,5 @@ import { CONNECTION, CONNECTION_ID, Env, isValidURL, LogLevel, MessageType, RequestMethod, OrderByEnum, parameterizedString, printLog, RedactionType, SKYFLOW_ID, VAULT, VAULT_ID, TokenMode } from ".."; -import { V1BYOT } from "../../ _generated_/rest"; +import { V1Byot } from "../../ _generated_/rest/api"; import SkyflowError from "../../error"; import SKYFLOW_ERROR_CODE from "../../error/codes"; import ConnectionConfig from "../../vault/config/connection"; @@ -23,6 +23,7 @@ import { SkyflowConfig, StringKeyValueMapType } from "../../vault/types"; import * as fs from 'fs'; import { isExpired } from "../jwt-utils"; import logs from "../logs"; +import FileUploadOptions from "../../vault/model/options/fileUpload"; export function isEnv(value?: string): boolean { return value !== undefined && Object.values(Env).includes(value as Env); @@ -33,7 +34,7 @@ export function isRedactionType(value?: string): boolean { } export function isByot(value?: string): boolean { - return value !== undefined && Object.values(V1BYOT).includes(value as V1BYOT); + return value !== undefined && Object.values(V1Byot).includes(value as V1Byot); } export function isOrderBy(value?: string): boolean { @@ -557,7 +558,7 @@ export const validateUpdateRequest = (updateRequest: UpdateRequest, updateOption throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_SKYFLOW_ID_IN_UPDATE); } - if (updateRequest?.data[SKYFLOW_ID] && typeof updateRequest.data[SKYFLOW_ID] !== 'string' || updateRequest.data[SKYFLOW_ID].trim().length === 0) { + if (updateRequest?.data[SKYFLOW_ID] && typeof updateRequest.data[SKYFLOW_ID] !== 'string' || (updateRequest.data[SKYFLOW_ID] as string).trim().length === 0) { printLog(logs.errorLogs.INVALID_SKYFLOW_ID_IN_UPDATE, MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_ID_IN_UPDATE); } @@ -738,35 +739,34 @@ export const validateDetokenizeOptions = (detokenizeOptions?: DetokenizeOptions) export const validateDetokenizeRequest = (detokenizeRequest: DetokenizeRequest, detokenizeOptions?: DetokenizeOptions, logLevel: LogLevel = LogLevel.ERROR) => { if (detokenizeRequest) { - if (!detokenizeRequest?.tokens) { + if (!detokenizeRequest?.data) { printLog(logs.errorLogs.EMPTY_TOKENS_IN_DETOKENIZE, MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_TOKENS_IN_DETOKENIZE) } - if (!Array.isArray(detokenizeRequest.tokens)) { + if (!Array.isArray(detokenizeRequest.data)) { printLog(logs.errorLogs.INVALID_TOKENS_IN_DETOKENIZE, MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKENS_TYPE_IN_DETOKENIZE) } - const tokens = detokenizeRequest?.tokens; + const records = detokenizeRequest?.data; - if (tokens.length === 0) + if (records.length === 0) throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_TOKENS_IN_DETOKENIZE); - tokens.forEach((token, index) => { - if (!token) { + records.forEach((record, index) => { + if (!record) { printLog(parameterizedString(logs.errorLogs.INVALID_TOKEN_IN_DETOKENIZE, [index]), MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_TOKEN_IN_DETOKENIZE, [index]); } - if (typeof token !== 'string' || token.trim().length === 0) { + if (typeof record.token !== 'string' || record.token.trim().length === 0) { throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKEN_IN_DETOKENIZE, [index]); } + if (record?.redactionType && (typeof record.redactionType !== 'string' || !isRedactionType(record.redactionType))) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_REDACTION_TYPE); + } }); - if (detokenizeRequest?.redactionType && (typeof detokenizeRequest.redactionType !== 'string' || !isRedactionType(detokenizeRequest.redactionType))) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_REDACTION_TYPE); - } - validateDetokenizeOptions(detokenizeOptions); } else { @@ -857,47 +857,70 @@ export const validateDeleteRequest = (deleteRequest: DeleteRequest, logLevel: Lo } } -export const validateUploadFileRequest = (fileRequest: FileUploadRequest, logLevel: LogLevel = LogLevel.ERROR) => { - if (fileRequest) { - if (!fileRequest?.tableName || !Object.prototype.hasOwnProperty.call(fileRequest, '_tableName')) { - printLog(logs.errorLogs.EMPTY_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_TABLE_IN_UPLOAD_FILE); - } +export const validateUploadFileRequest = (fileRequest: FileUploadRequest, options?: FileUploadOptions, logLevel: LogLevel = LogLevel.ERROR) => { + if (!fileRequest) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_UPLOAD_REQUEST); + } - if (typeof fileRequest?.tableName !== 'string' || fileRequest?.tableName.trim().length === 0) { - printLog(logs.errorLogs.INVALID_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TABLE_IN_UPLOAD_FILE); - } + if (!fileRequest?.tableName || !Object.prototype.hasOwnProperty.call(fileRequest, '_tableName')) { + printLog(logs.errorLogs.EMPTY_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_TABLE_IN_UPLOAD_FILE); + } - if (!fileRequest?.skyflowId || !Object.prototype.hasOwnProperty.call(fileRequest, '_skyflowId')) { - printLog(logs.errorLogs.EMPTY_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_SKYFLOW_ID_IN_UPLOAD_FILE); - } + if (typeof fileRequest?.tableName !== 'string' || fileRequest?.tableName.trim().length === 0) { + printLog(logs.errorLogs.INVALID_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TABLE_IN_UPLOAD_FILE); + } - if (typeof fileRequest?.skyflowId !== 'string' || fileRequest.skyflowId.trim().length === 0) { - printLog(logs.errorLogs.INVALID_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_ID_IN_UPLOAD_FILE); - } + if (!fileRequest?.skyflowId || !Object.prototype.hasOwnProperty.call(fileRequest, '_skyflowId')) { + printLog(logs.errorLogs.EMPTY_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_SKYFLOW_ID_IN_UPLOAD_FILE); + } + if (typeof fileRequest?.skyflowId !== 'string' || fileRequest.skyflowId.trim().length === 0) { + printLog(logs.errorLogs.INVALID_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_ID_IN_UPLOAD_FILE); + } - if (!fileRequest?.columnName || !Object.prototype.hasOwnProperty.call(fileRequest, '_columnName')) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_COLUMN_NAME_IN_UPLOAD_FILE); - } + if (!fileRequest?.columnName || !Object.prototype.hasOwnProperty.call(fileRequest, '_columnName')) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_COLUMN_NAME_IN_UPLOAD_FILE); + } - if (typeof fileRequest?.columnName !== 'string' || fileRequest?.columnName.trim().length === 0) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_COLUMN_NAME_IN_UPLOAD_FILE); + if (typeof fileRequest?.columnName !== 'string' || fileRequest?.columnName.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_COLUMN_NAME_IN_UPLOAD_FILE); + } + + if(options){ + const hasFilePath = !!options.getFilePath(); + if(hasFilePath && typeof options.getFilePath() !== 'string') { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_PATH_IN_UPLOAD_FILE); + } + const hasBase64 = !!options.getBase64(); + if(hasBase64 && typeof options.getBase64() !== 'string') { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_BASE64_IN_UPLOAD_FILE); + } + const hasFileObject = !!options.getFileObject(); + if(hasFileObject && typeof options.getFileObject() !== 'object') { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_OBJECT_IN_UPLOAD_FILE); } + if (!hasFilePath && !hasBase64 && !hasFileObject) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_SOURCE_IN_UPLOAD_FILE); + } - if (!fileRequest?.filePath || !Object.prototype.hasOwnProperty.call(fileRequest, '_filePath')) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_PATH_IN_UPLOAD_FILE); + if (hasBase64 && !options.getFileName()) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_NAME_FOR_BASE64); } - if (typeof fileRequest?.filePath !== 'string' || fileRequest?.filePath.trim().length === 0 || !isValidPath(fileRequest.filePath)) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_PATH_IN_UPLOAD_FILE); + if (hasFileObject) { + const fileObject = options.getFileObject(); + if (!(fileObject instanceof File)) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_OBJECT_IN_UPLOAD_FILE); + } + if (!fileObject.name || typeof fileObject.name !== 'string' || fileObject.name.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_NAME_IN_FILE_OBJECT); + } } - } else { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_UPLOAD_REQUEST); } } diff --git a/src/vault/client/index.ts b/src/vault/client/index.ts index 8c3bd799..49134eb0 100644 --- a/src/vault/client/index.ts +++ b/src/vault/client/index.ts @@ -1,5 +1,7 @@ // imports -import { Configuration, QueryApi, RecordsApi, TokensApi } from "../../ _generated_/rest"; +import { Query } from "../../ _generated_/rest/api/resources/query/client/Client"; +import { Records } from "../../ _generated_/rest/api/resources/records/client/Client"; +import { Tokens } from "../../ _generated_/rest/api/resources/tokens/client/Client"; import SkyflowError from "../../error"; import errorMessages from "../../error/messages"; import { AuthInfo, AuthType, LogLevel, MessageType, printLog, TYPES } from "../../utils/index"; @@ -13,13 +15,13 @@ class VaultClient { url!: string; - configuration!: Configuration; + configuration!: Records.Options; - vaultAPI!: RecordsApi; + vaultAPI!: Records; - tokensAPI!: TokensApi; + tokensAPI!: Tokens; - queryAPI!: QueryApi; + queryAPI!: Query; individualCredentials?: Credentials; @@ -50,10 +52,10 @@ class VaultClient { private initConfig(authInfo: AuthInfo) { this.authInfo = authInfo; - this.configuration = new Configuration({ - basePath: this.url, - accessToken: authInfo.key, - }); + this.configuration = { + baseUrl: this.url, + token: authInfo.key, + }; } @@ -66,14 +68,14 @@ class VaultClient { case TYPES.INSERT: case TYPES.INSERT_BATCH: case TYPES.UPDATE: - this.vaultAPI = new RecordsApi(this.configuration); + this.vaultAPI = new Records(this.configuration); break; case TYPES.DETOKENIZE: case TYPES.TOKENIZE: - this.tokensAPI = new TokensApi(this.configuration); + this.tokensAPI = new Tokens(this.configuration); break; case TYPES.QUERY: - this.queryAPI = new QueryApi(this.configuration); + this.queryAPI = new Query(this.configuration); break; default: break; @@ -111,14 +113,50 @@ class VaultClient { this.skyflowCredentials = credentials; } - failureResponse = (err: any) => new Promise((_, reject) => { - const contentType = err.response?.headers['content-type']; - const data = err.response?.data; - const requestId = err.response?.headers['x-request-id']; - - const errorFromClientHeader = err.response?.headers?.['error-from-client']; - const errorFromClient = errorFromClientHeader ? String(errorFromClientHeader).toLowerCase() === 'true' : undefined; + private normalizeErrorMeta(err: any) { + const isNewFormat = !!err?.rawResponse; + if (isNewFormat) { + const headers = err?.rawResponse?.headers; + const contentType = headers?.get('content-type'); + const requestId = headers?.get('x-request-id'); + const errorFromClientHeader = headers?.get('error-from-client'); + const errorFromClient = errorFromClientHeader + ? String(errorFromClientHeader).toLowerCase() === 'true' + : undefined; + + return { + isNewFormat, + contentType, + requestId, + errorFromClient + }; + } else { + const headers = err?.headers || {}; + const contentType = headers.get('content-type'); + const requestId = headers.get('x-request-id'); + + + + const errorFromClientHeader = headers.get('error-from-client'); + const errorFromClient = errorFromClientHeader + ? String(errorFromClientHeader).toLowerCase() === 'true' + : undefined; + + return { + isNewFormat, + contentType, + requestId, + errorFromClient + }; + } + } + + failureResponse = (err: any) => new Promise((_, reject) => { + const { isNewFormat, contentType, requestId, errorFromClient } = this.normalizeErrorMeta(err); + + const data = isNewFormat ? err?.body?.error : err; + if (contentType) { if (contentType.includes('application/json')) { this.handleJsonError(err, data, requestId, reject, errorFromClient); @@ -131,43 +169,79 @@ class VaultClient { this.handleGenericError(err, requestId, reject, errorFromClient); } }); + private handleJsonError(err: any, data: any, requestId: string, reject: Function, errorFromClient?: boolean) { - let description = data; - const statusCode = description?.error?.http_status; - const grpcCode = description?.error?.grpc_code; - let details = description?.error?.details; - - if (errorFromClient !== undefined) { - details = Array.isArray(details) - ? [...details, { errorFromClient: errorFromClient }] - : [{ errorFromClient: errorFromClient }]; + const isNewFormat = !!err?.rawResponse; + + if (isNewFormat) { + let description = data?.message; + const statusCode = data?.http_code; + const grpcCode = data?.grpc_code; + let details = data?.details || []; + + if (errorFromClient !== undefined) { + details = Array.isArray(details) + ? [...details, { errorFromClient }] + : [{ errorFromClient }]; + } + + this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details, isNewFormat); + } else { + let description = data; + const statusCode = description?.statusCode; + const grpcCode = description?.grpcCode; + let details = description?.error?.details; + + if (errorFromClient !== undefined) { + details = Array.isArray(details) + ? [...details, { errorFromClient }] + : [{ errorFromClient }]; + } + + description = description?.body?.error?.message || description; + this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details, isNewFormat); } - - description = description?.error?.message || description; - this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details); } - + + private handleTextError(err: any, data: any, requestId: string, reject: Function, errorFromClient?: boolean) { + const isNewFormat = !!err?.rawResponse let details: any = []; - + if (errorFromClient !== undefined) { details.push({ errorFromClient }); } - - this.logAndRejectError(data, err, requestId, reject, undefined, undefined, details); + + const description = isNewFormat ? data?.message: data?.body?.error?.message; + this.logAndRejectError(description, err, requestId, reject, undefined, undefined, details, isNewFormat); } - + + private handleGenericError(err: any, requestId: string, reject: Function, errorFromClient?: boolean) { - const description = err?.response?.data || err?.message || errorMessages.ERROR_OCCURRED; + const isNewFormat = !!err?.rawResponse; + let description: any; + let grpcCode: any; let details: any = []; - + + if (isNewFormat) { + description = err?.body?.error?.message || err?.message; + grpcCode = err?.body?.error?.grpc_code; + details = err?.body?.error?.details || []; + } else { + description = err?.body?.error?.message || errorMessages.ERROR_OCCURRED; + } + if (errorFromClient !== undefined) { - details.push({ errorFromClient }); + details = Array.isArray(details) + ? [...details, { errorFromClient }] + : [{ errorFromClient }]; } - this.logAndRejectError(description, err, requestId, reject, undefined, undefined, details); + + this.logAndRejectError(description, err, requestId, reject, undefined, grpcCode, details, isNewFormat); } - + + private logAndRejectError( description: string, err: any, @@ -175,11 +249,12 @@ class VaultClient { reject: Function, httpStatus?: number, grpcCode?: number, - details?: any + details?: any, + isNewError?: boolean ) { printLog(description, MessageType.ERROR, this.getLogLevel()); reject(new SkyflowError({ - http_code: err?.response?.status || 400, + http_code: isNewError ? err?.statusCode : err?.response?.status || 400, message: description, request_ID: requestId, grpc_code: grpcCode, diff --git a/src/vault/controller/connections/index.ts b/src/vault/controller/connections/index.ts index 7845699b..1281046d 100644 --- a/src/vault/controller/connections/index.ts +++ b/src/vault/controller/connections/index.ts @@ -1,5 +1,4 @@ //imports -import axios from "axios"; import { fillUrlWithPathAndQueryParams, generateSDKMetrics, getBearerToken, LogLevel, MessageType, RequestMethod, parameterizedString, printLog, SDK_METRICS_HEADER_KEY, SKYFLOW_AUTH_HEADER_KEY, REQUEST_ID_KEY, TYPES } from "../../../utils"; import InvokeConnectionRequest from "../../model/request/inkove"; import logs from "../../../utils/logs"; @@ -18,6 +17,30 @@ class ConnectionController { this.logLevel = client.getLogLevel(); } + private buildInvokeConnectionBody(invokeRequest: InvokeConnectionRequest){ + let requestBody; + const contentType = invokeRequest.headers?.['Content-Type'] || 'application/json'; + if (contentType === 'application/json') { + requestBody = JSON.stringify(invokeRequest.body); + } else if (contentType === 'application/x-www-form-urlencoded') { + const urlSearchParams = new URLSearchParams(); + Object.entries(invokeRequest.body || {}).forEach(([key, value]) => { + if (typeof value === 'object' && value !== null) { + Object.entries(value).forEach(([nestedKey, nestedValue]) => { + urlSearchParams.append(`${key}[${nestedKey}]`, nestedValue as string); + }); + } else { + urlSearchParams.append(key, value as string); + } + }); + requestBody = urlSearchParams.toString(); + } else { + requestBody = invokeRequest.body; + } + + return requestBody; + } + invoke(invokeRequest: InvokeConnectionRequest): Promise { return new Promise((resolve, reject) => { try { @@ -31,23 +54,39 @@ class ConnectionController { const sdkHeaders = {}; sdkHeaders[SKYFLOW_AUTH_HEADER_KEY] = token.key; sdkHeaders[SDK_METRICS_HEADER_KEY] = JSON.stringify(generateSDKMetrics()); - axios({ - url: filledUrl, + + fetch(filledUrl, { method: invokeRequest.method || RequestMethod.POST, - data: invokeRequest.body, - headers: { ...invokeRequest.headers, ...sdkHeaders } - }).then((response: any) => { - printLog(logs.infoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED, MessageType.LOG, this.logLevel); - let requestId = response.headers[REQUEST_ID_KEY] - const invokeConnectionResponse = new InvokeConnectionResponse({ - data: response.data, - metadata: {requestId} + body: this.buildInvokeConnectionBody(invokeRequest), + headers: { ...invokeRequest.headers, ...sdkHeaders }, + }) + .then(async (response) => { + if(!response.ok){ + const errorBody = await response.json().catch(() => null); + + const error = { + body: errorBody, + statusCode: response.status, + message: response.statusText, + headers: response.headers + }; + throw error; + } + const headers = response.headers; + return response.json().then((body) => ({ headers, body })); + }) + .then(({headers, body}) => { + printLog(logs.infoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED, MessageType.LOG, this.logLevel); + const requestId = headers?.get(REQUEST_ID_KEY) || ''; + const invokeConnectionResponse = new InvokeConnectionResponse({ + data: body, + metadata: { requestId } + }); + resolve(invokeConnectionResponse); + }).catch((err) => { + printLog(logs.errorLogs.INVOKE_CONNECTION_REQUEST_REJECTED, MessageType.LOG, this.logLevel); + this.client.failureResponse(err).catch((err) => reject(err)) }); - resolve(invokeConnectionResponse); - }).catch((err) => { - printLog(logs.errorLogs.INVOKE_CONNECTION_REQUEST_REJECTED, MessageType.LOG, this.logLevel); - this.client.failureResponse(err).catch((err)=>reject(err)) - }); }).catch(err => { reject(err); }) diff --git a/src/vault/controller/vault/index.ts b/src/vault/controller/vault/index.ts index 9facd08f..b504bb74 100644 --- a/src/vault/controller/vault/index.ts +++ b/src/vault/controller/vault/index.ts @@ -1,7 +1,7 @@ //imports import * as fs from 'fs'; import InsertRequest from "../../model/request/insert"; -import { BatchRecordMethod, QueryServiceExecuteQueryBody, RecordServiceBatchOperationBody, RecordServiceBulkDeleteRecordBody, RecordServiceInsertRecordBody, RecordServiceUpdateRecordBody, V1BYOT, V1DetokenizePayload, V1DetokenizeRecordRequest, V1FieldRecords, V1TokenizePayload, V1TokenizeRecordRequest } from "../../../ _generated_/rest"; +import { BatchRecordMethod, QueryServiceExecuteQueryBody, RecordServiceBatchOperationBody, RecordServiceBulkDeleteRecordBody, RecordServiceInsertRecordBody, RecordServiceUpdateRecordBody, V1Byot, V1DetokenizePayload, V1DetokenizeRecordRequest, V1FieldRecords, V1TokenizePayload, V1TokenizeRecordRequest } from '../../../ _generated_/rest/api'; import InsertOptions from "../../model/options/insert"; import GetRequest from "../../model/request/get"; import GetOptions from "../../model/options/get"; @@ -26,8 +26,10 @@ import { generateSDKMetrics, getBearerToken, MessageType, parameterizedString, p import GetColumnRequest from '../../model/request/get-column'; import logs from '../../../utils/logs'; import VaultClient from '../../client'; -import { RawAxiosRequestConfig } from 'axios'; import { validateDeleteRequest, validateDetokenizeRequest, validateGetColumnRequest, validateGetRequest, validateInsertRequest, validateQueryRequest, validateTokenizeRequest, validateUpdateRequest, validateUploadFileRequest } from '../../../utils/validations'; +import path from 'path'; +import { Records } from '../../../ _generated_/rest/api/resources/records/client/Client'; +import FileUploadOptions from '../../model/options/fileUpload'; class VaultController { @@ -56,7 +58,7 @@ class VaultController { return []; } - private parseDetokenizeResponse(records: any[]): ParsedDetokenizeResponse { + private parseDetokenizeResponse(records: any[], requestId: any): ParsedDetokenizeResponse { const response: ParsedDetokenizeResponse = { success: [], errors: [] @@ -67,6 +69,7 @@ class VaultController { records.forEach(record => { if (record.error) { response.errors.push({ + requestId: requestId, token: record.token, error: record.error }); @@ -81,7 +84,7 @@ class VaultController { return response; } - private parseInsertBatchResponse(records: any[]): InsertResponse { + private parseInsertBatchResponse(records: any[], requestId: any): InsertResponse { const response: ParsedInsertBatchResponse = { success: [], errors: [] @@ -93,9 +96,10 @@ class VaultController { records.forEach((record, index) => { if (this.isSuccess(record)) { + this.processSuccess(record, index, response); } else { - this.processError(record, index, response); + this.processError(record, index, requestId, response); } }); @@ -116,8 +120,9 @@ class VaultController { }); } - private processError(record: any, index: number, response: ParsedInsertBatchResponse): void { + private processError(record: any, index: number, requestId: any, response: ParsedInsertBatchResponse): void { response.errors.push({ + requestId: requestId, requestIndex: index, error: record?.Body?.error }); @@ -132,7 +137,8 @@ class VaultController { this.client.initAPI(authInfo, requestType); apiCall({ headers: { ...sdkHeaders } }) .then((response: any) => { - const data = response.data; + const { data, rawResponse } = response; + const requestId = rawResponse?.headers?.get('x-request-id'); printLog(logs.infoLogs[`${requestType}_REQUEST_RESOLVED`], MessageType.LOG, this.client.getLogLevel()); switch (requestType) { case TYPES.INSERT: @@ -140,10 +146,10 @@ class VaultController { case TYPES.QUERY: case TYPES.DETOKENIZE: case TYPES.TOKENIZE: - resolve(this.handleRecordsResponse(data)) + resolve({records: this.handleRecordsResponse(data), requestId}) break; case TYPES.INSERT_BATCH: - resolve(this.handleInsertBatchResponse(data)) + resolve({records: this.handleInsertBatchResponse(data), requestId}) break; case TYPES.UPDATE: case TYPES.FILE_UPLOAD: @@ -167,11 +173,11 @@ class VaultController { private buildBatchInsertBody(request: InsertRequest, options?: InsertOptions): RecordServiceBatchOperationBody { const records = request.data.map((record, index) => ({ - fields: record, + fields: record as Record || {}, tableName: request.tableName, tokenization: options?.getReturnTokens() || false, method: BatchRecordMethod.Post, - tokens: this.getTokens(index, options?.getTokens()), + tokens: this.getTokens(index, options?.getTokens()) as Record, upsert: options?.getUpsertColumn(), })); return { @@ -220,23 +226,22 @@ class VaultController { const operationType = isContinueOnError ? TYPES.INSERT_BATCH : TYPES.INSERT; const tableName = request.tableName; - this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => + (headers: Records.RequestOptions | undefined) => isContinueOnError - ? this.client.vaultAPI.recordServiceBatchOperation(this.client.vaultId, requestBody, headers) - : this.client.vaultAPI.recordServiceInsertRecord(this.client.vaultId, tableName, requestBody as RecordServiceInsertRecordBody, headers), + ? this.client.vaultAPI.recordServiceBatchOperation(this.client.vaultId, requestBody, headers).withRawResponse() + : this.client.vaultAPI.recordServiceInsertRecord(this.client.vaultId, tableName, requestBody as RecordServiceInsertRecordBody, headers).withRawResponse(), operationType ).then((resp: any) => { printLog(logs.infoLogs.INSERT_DATA_SUCCESS, MessageType.LOG, this.client.getLogLevel()); const parsedResponse = isContinueOnError - ? this.parseInsertBatchResponse(resp) - : this.parseBulkInsertResponse(resp); + ? this.parseInsertBatchResponse(resp.records, resp.requestId) + : this.parseBulkInsertResponse(resp.records); resolve(parsedResponse); }) - .catch(error => { - reject(error); - }); + .catch(error => { + reject(error); + }); } catch (error) { if (error instanceof Error) printLog(removeSDKVersion(error.message), MessageType.ERROR, this.client.getLogLevel()); @@ -256,7 +261,7 @@ class VaultController { const skyflowId = request.data[SKYFLOW_ID]; delete request.data[SKYFLOW_ID]; const record = { fields: request.data, tokens: options?.getTokens() }; - const strictMode = options?.getTokenMode() ? options?.getTokenMode() : V1BYOT.Disable; + const strictMode = options?.getTokenMode() ? options?.getTokenMode() : V1Byot.Disable; const updateData: RecordServiceUpdateRecordBody = { record: record, tokenization: options?.getReturnTokens(), @@ -264,13 +269,13 @@ class VaultController { }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.recordServiceUpdateRecord( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.recordServiceUpdateRecord( this.client.vaultId, request.tableName, - skyflowId, + skyflowId as string, updateData, headers - ), + ).withRawResponse(), TYPES.UPDATE ).then(data => { printLog(logs.infoLogs.UPDATE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); @@ -304,12 +309,12 @@ class VaultController { }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.recordServiceBulkDeleteRecord( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.recordServiceBulkDeleteRecord( this.client.vaultId, request.tableName, deleteRequest, headers - ), + ).withRawResponse(), TYPES.DELETE ).then(data => { printLog(logs.infoLogs.DELETE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); @@ -351,27 +356,30 @@ class VaultController { columnName = request.columnName as string; columnValues = request.columnValues as Array; } + const payload = { + skyflow_ids: records, + redaction: options?.getRedactionType(), + tokenization: options?.getReturnTokens(), + fields: options?.getFields(), + offset: options?.getOffset(), + limit: options?.getLimit(), + downloadURL: options?.getDownloadURL(), + column_name: columnName, + column_values: columnValues, + order_by: options?.getOrderBy(), + }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.recordServiceBulkGetRecord( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.recordServiceBulkGetRecord( this.client.vaultId, request.tableName, - records, - options?.getRedactionType(), - options?.getReturnTokens(), - options?.getFields(), - options?.getOffset(), - options?.getLimit(), - options?.getDownloadURL(), - columnName, - columnValues, - options?.getOrderBy(), + payload, headers - ), + ).withRawResponse(), TYPES.GET - ).then(records => { + ).then(response => { printLog(logs.infoLogs.GET_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - const processedRecords = records.map(record => ({ + const processedRecords = response.records.map(record => ({ ...record.fields, })); resolve(new GetResponse({ data: processedRecords, errors: [] })); @@ -387,29 +395,48 @@ class VaultController { }); } - uploadFile(request: FileUploadRequest): Promise { + uploadFile(request: FileUploadRequest, options?: FileUploadOptions): Promise { return new Promise((resolve, reject) => { try { printLog(logs.infoLogs.UPLOAD_FILE_TRIGGERED, MessageType.LOG, this.client.getLogLevel()); printLog(logs.infoLogs.VALIDATE_FILE_UPLOAD_INPUT, MessageType.LOG, this.client.getLogLevel()); // Validation checks - validateUploadFileRequest(request, this.client.getLogLevel()); + validateUploadFileRequest(request, options, this.client.getLogLevel()); //handle file exits - const formData = new FormData(); - const fileStream = fs.createReadStream(request.filePath) as unknown as Blob; - formData.append('file', fileStream); - formData.append('columnName', request.columnName); + let fileBlob: Blob | File | undefined; + let fileName: string | undefined; + + if(options?.getFilePath()) { + const fileBuffer = fs.readFileSync(options.getFilePath()!); + fileName = path.basename(options.getFilePath()!); + fileBlob = new File([fileBuffer], fileName, { + type: 'application/json' + }); + } + else if (options?.getBase64()) { + const buffer = Buffer.from(options.getBase64()!, 'base64'); + fileName = options.getFileName()!; + fileBlob = new File([buffer], fileName, { + type: 'application/json' + }); + } + + else if (options?.getFileObject() as File) { + fileBlob = options?.getFileObject(); + } this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.fileServiceUploadFile( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.fileServiceUploadFile( + fileBlob as unknown as import('buffer').Blob, this.client.vaultId, request.tableName, request.skyflowId, - formData, - headers - ), + { + columnName: request.columnName + } + ).withRawResponse(), TYPES.FILE_UPLOAD ).then(data => { printLog(logs.infoLogs.FILE_UPLOAD_DATA_SUCCESS, MessageType.LOG, this.client.getLogLevel()); @@ -440,15 +467,15 @@ class VaultController { }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.queryAPI.queryServiceExecuteQuery( + (headers: Records.RequestOptions | undefined) => this.client.queryAPI.queryServiceExecuteQuery( this.client.vaultId, query, headers - ), + ).withRawResponse(), TYPES.QUERY - ).then(records => { + ).then(response => { printLog(logs.infoLogs.QUERY_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - const processedRecords = records.map(record => ({ + const processedRecords = response.records.map(record => ({ ...record?.fields, tokenizedData: { ...record?.tokens, @@ -476,15 +503,15 @@ class VaultController { //validations checks validateDetokenizeRequest(request, options, this.client.getLogLevel()); - const fields = request.tokens.map(record => ({ token: record, redaction: request?.redactionType || RedactionType.PLAIN_TEXT })) as Array; + const fields = request.data.map(record => ({ token: record.token, redaction: record?.redactionType || RedactionType.DEFAULT })) as Array; const detokenizePayload: V1DetokenizePayload = { detokenizationParameters: fields, continueOnError: options?.getContinueOnError(), downloadURL: options?.getDownloadURL() }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.tokensAPI.recordServiceDetokenize(this.client.vaultId, detokenizePayload, headers), + (headers: Records.RequestOptions | undefined) => this.client.tokensAPI.recordServiceDetokenize(this.client.vaultId, detokenizePayload, headers).withRawResponse(), TYPES.DETOKENIZE - ).then(records => { + ).then(response => { printLog(logs.infoLogs.DETOKENIZE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - const parsedResponse: ParsedDetokenizeResponse = this.parseDetokenizeResponse(records); + const parsedResponse: ParsedDetokenizeResponse = this.parseDetokenizeResponse(response.records, response.requestId); resolve(new DetokenizeResponse({ detokenizedFields: parsedResponse.success, errors: parsedResponse.errors })); }) .catch(error => { @@ -511,11 +538,11 @@ class VaultController { const tokenizePayload: V1TokenizePayload = { tokenizationParameters: fields }; this.handleRequest( - () => this.client.tokensAPI.recordServiceTokenize(this.client.vaultId, tokenizePayload), + (headers: Records.RequestOptions | undefined) => this.client.tokensAPI.recordServiceTokenize(this.client.vaultId, tokenizePayload,headers).withRawResponse(), TYPES.TOKENIZE - ).then(records => { + ).then(response => { printLog(logs.infoLogs.TOKENIZE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - resolve(new TokenizeResponse({ tokens: records, errors: [] })) + resolve(new TokenizeResponse({ tokens: response.records, errors: [] })) }) .catch(error => { reject(error); diff --git a/src/vault/model/options/fileUpload/index.ts b/src/vault/model/options/fileUpload/index.ts new file mode 100644 index 00000000..1b0563a0 --- /dev/null +++ b/src/vault/model/options/fileUpload/index.ts @@ -0,0 +1,49 @@ + +class FileUploadOptions { + // Fields with default values + private filePath?: string; + private base64?: string; + private fileObject?: File; + private fileName?: string; + + // Constructor + constructor() { } + + // Setters + setFilePath(filePath: string): void { + this.filePath = filePath; + } + setBase64(base64: string): void { + this.base64 = base64; + } + + setFileObject(fileObject: File): void { + this.fileObject = fileObject; + } + + setFileName(fileName: string): void { + this.fileName = fileName; + } + + + + // Getters + getFilePath(): string | undefined { + return this.filePath; + } + + getBase64(): string | undefined { + return this.base64; + } + + getFileObject(): File | undefined { + return this.fileObject; + } + + getFileName(): string | undefined { + return this.fileName; + } +} + + +export default FileUploadOptions; \ No newline at end of file diff --git a/src/vault/model/options/update/index.ts b/src/vault/model/options/update/index.ts index 3485321e..f6dec32a 100644 --- a/src/vault/model/options/update/index.ts +++ b/src/vault/model/options/update/index.ts @@ -6,7 +6,7 @@ class UpdateOptions { //fields private returnTokens?: boolean; private tokenMode?: TokenMode; - private tokens?: object; + private tokens?: Record; // Constructor constructor() { @@ -16,7 +16,7 @@ class UpdateOptions { this.returnTokens = returnTokens; } - setTokens(tokens: object) { + setTokens(tokens: Record) { this.tokens = tokens; } @@ -28,7 +28,7 @@ class UpdateOptions { return this.tokenMode; } - getTokens(): object | undefined { + getTokens(): Record | undefined { return this.tokens; } diff --git a/src/vault/model/request/detokenize/index.ts b/src/vault/model/request/detokenize/index.ts index 53884447..01a17623 100644 --- a/src/vault/model/request/detokenize/index.ts +++ b/src/vault/model/request/detokenize/index.ts @@ -1,37 +1,24 @@ //imports - -import { RedactionType } from "../../../../utils"; +import { DetokenizeData } from "../../../types"; class DetokenizeRequest { //fields - private _tokens: Array; - private _redactionType?: RedactionType; + private _data: DetokenizeData[]; // Constructor - constructor(tokens: Array, redactionType?: RedactionType) { - this._tokens = tokens; - this._redactionType = redactionType; - } - - // Getter for redactionType - public get redactionType(): RedactionType | undefined { - return this._redactionType; - } - - // Setter for redactionType - public set redactionType(value: RedactionType) { - this._redactionType = value; + constructor(data: DetokenizeData[]) { + this._data = data; } // Getter for tokens - public get tokens(): Array { - return this._tokens; + public get data(): DetokenizeData[] { + return this._data; } // Setter for tokens - public set tokens(value: Array) { - this._tokens = value; + public set data(value: DetokenizeData[]) { + this._data = value; } } diff --git a/src/vault/model/request/file-upload/index.ts b/src/vault/model/request/file-upload/index.ts index 38a4e12f..74acb6ca 100644 --- a/src/vault/model/request/file-upload/index.ts +++ b/src/vault/model/request/file-upload/index.ts @@ -1,60 +1,38 @@ -//imports +// Imports class FileUploadRequest { - - //fields private _tableName: string; private _skyflowId: string; private _columnName: string; - private _filePath: string; // Constructor - constructor(tableName: string, skyflowId: string, columnName: string, filePath: string) { + constructor(tableName: string, skyflowId: string, columnName: string) { this._tableName = tableName; this._skyflowId = skyflowId; this._columnName = columnName; - this._filePath = filePath; - } + } - // Getter for tableName + // Getters and Setters public get tableName(): string { return this._tableName; } - - // Setter for tableName public set tableName(value: string) { this._tableName = value; } - // Getter for skyflowId public get skyflowId(): string { return this._skyflowId; } - - // Setter for skyflowId public set skyflowId(value: string) { this._skyflowId = value; } - // Getter for columnName public get columnName(): string { return this._columnName; } - - // Setter for columnName public set columnName(value: string) { this._columnName = value; } - - // Getter for filePath - public get filePath(): string { - return this._filePath; - } - - // Setter for filePath - public set filePath(value: string) { - this._filePath = value; - } } -export default FileUploadRequest; +export default FileUploadRequest; \ No newline at end of file diff --git a/src/vault/model/request/update/index.ts b/src/vault/model/request/update/index.ts index 3cf82cfc..14f99dd9 100644 --- a/src/vault/model/request/update/index.ts +++ b/src/vault/model/request/update/index.ts @@ -4,10 +4,10 @@ class UpdateRequest { //fields private _tableName: string; - private _data: object; + private _data: Record; // Constructor - constructor(tableName: string, data: object) { + constructor(tableName: string, data: Record) { this._tableName = tableName; this._data = data; } @@ -23,12 +23,12 @@ class UpdateRequest { } // Getter for updateData - public get data(): object { + public get data(): Record { return this._data; } // Setter for updateData - public set data(value: object) { + public set data(value: Record) { this._data = value; } diff --git a/src/vault/types/index.ts b/src/vault/types/index.ts index 2efe1d8d..55a68709 100644 --- a/src/vault/types/index.ts +++ b/src/vault/types/index.ts @@ -1,4 +1,4 @@ -import { LogLevel } from "../../utils"; +import { LogLevel, RedactionType } from "../../utils"; import ConnectionConfig from "../config/connection"; import VaultConfig from "../config/vault" import Credentials from "../config/credentials"; @@ -49,6 +49,7 @@ export interface SuccessDetokenizeResponse { } export interface ErrorDetokenizeResponse { + requestId: string; token: string; error: string; } @@ -59,6 +60,7 @@ export interface ParsedDetokenizeResponse { } export interface ErrorInsertBatchResponse { + requestId: string; requestIndex: number; error: string; } @@ -66,4 +68,9 @@ export interface ErrorInsertBatchResponse { export interface ParsedInsertBatchResponse { success: insertResponseType[]; errors: ErrorInsertBatchResponse[]; +} + +export interface DetokenizeData { + token: string; + redactionType?: RedactionType; } \ No newline at end of file diff --git a/test/service-account/token.test.js b/test/service-account/token.test.js index 7ca2f481..08038ca4 100644 --- a/test/service-account/token.test.js +++ b/test/service-account/token.test.js @@ -12,7 +12,6 @@ import { import SkyflowError from '../../src/error'; import errorMessages from '../../src/error/messages'; import jwt from 'jsonwebtoken'; -import axios from 'axios'; import { LogLevel } from "../../src"; describe("File Validity Tests", () => { @@ -317,10 +316,11 @@ describe('Signed Data Token Generation Test', () => { }); describe('getToken Tests', () => { + let mockClient; const credentials = { clientID: "test-client-id", keyID: "test-key-id", - tokenURI: "https://manage.skyflow.dev", /// remove this URL + tokenURI: "https://test-token-uri.com", // privateKey: "KEY", data: "DATA", }; @@ -342,15 +342,17 @@ describe('getToken Tests', () => { }; const mockTokenResponse = { - data: { - access_token: 'mocked_access_token', - token_type: 'Bearer', - } + accessToken: 'mocked_access_token', + tokenType: 'Bearer', }; - // Mocking axios and jwt globally for all tests beforeEach(() => { - jest.spyOn(axios, 'post').mockResolvedValue(mockTokenResponse); + mockClient = { + authApi: { + authenticationServiceGetAuthToken: jest.fn(), + }, + }; + jest.spyOn(jwt, 'sign').mockReturnValue('mocked_token'); jest.spyOn(jwt, 'sign').mockReturnValue('mocked_token'); }); @@ -362,35 +364,18 @@ describe('getToken Tests', () => { const runTokenTest = async (creds, logLevel = LogLevel.OFF) => { const result = await getToken(JSON.stringify(creds), { logLevel }); expect(result).toBeDefined(); - expect(result.access_token).toBe('mocked_access_token'); - expect(result.token_type).toBe('Bearer'); - expect(axios.post).toHaveBeenCalledWith( - creds.tokenURI, - expect.anything(), - expect.anything() - ); + expect(result.accessToken).toBe('mocked_access_token'); + expect(result.tokenType).toBe('Bearer'); }; - test("should get token with valid credentials", async () => { - jest.mock('axios'); - axios.post.mockResolvedValue({ - data: { - access_token: 'mocked_access_token', - token_type: 'Bearer', - }, - }); - await getToken(JSON.stringify(credentials), { logLevel: LogLevel.OFF }); - }); - test("should get Bearer Token with valid credentials", async () => { const filePath = 'test/demo-credentials/valid.json'; - jest.mock('axios'); - axios.post.mockResolvedValue({ - data: { - access_token: 'mocked_access_token', - token_type: 'Bearer', - }, - }); + mockClient.authApi.authenticationServiceGetAuthToken.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockTokenResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); await generateBearerToken(filePath, { logLevel: LogLevel.OFF }); }); diff --git a/test/vault/client/client.test.js b/test/vault/client/client.test.js index 6e769ebc..7ac03949 100644 --- a/test/vault/client/client.test.js +++ b/test/vault/client/client.test.js @@ -1,10 +1,15 @@ import VaultClient from '../../../src/vault/client'; // Adjust the import path -import { Configuration, QueryApi, RecordsApi, TokensApi } from '../../../src/ _generated_/rest'; +import { Query } from '../../../src/ _generated_/rest/api/resources/query/client/Client'; +import { Records } from '../../../src/ _generated_/rest/api/resources/records/client/Client'; +import { Tokens } from '../../../src/ _generated_/rest/api/resources/tokens/client/Client'; import { AuthType, LogLevel, TYPES } from '../../../src/utils'; import { isExpired } from '../../../src/utils/jwt-utils'; import SkyflowError from '../../../src/error'; jest.mock('../../../src/ _generated_/rest'); +jest.mock('../../../src/ _generated_/rest/api/resources/records/client/Client'); +jest.mock('../../../src/ _generated_/rest/api/resources/query/client/Client'); +jest.mock('../../../src/ _generated_/rest/api/resources/tokens/client/Client'); jest.mock('../../../src/utils/jwt-utils'); jest.mock('../../../src/error'); @@ -43,54 +48,54 @@ describe('VaultClient', () => { test('should initialize RecordsApi for DELETE', () => { vaultClient.initAPI(authInfo, TYPES.DELETE); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for FILE_UPLOAD', () => { vaultClient.initAPI(authInfo, TYPES.FILE_UPLOAD); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for GET', () => { vaultClient.initAPI(authInfo, TYPES.GET); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for INSERT', () => { vaultClient.initAPI(authInfo, TYPES.INSERT); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for INSERT_BATCH', () => { vaultClient.initAPI(authInfo, TYPES.INSERT_BATCH); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for UPDATE', () => { vaultClient.initAPI(authInfo, TYPES.UPDATE); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize TokensApi for DETOKENIZE', () => { vaultClient.initAPI(authInfo, TYPES.DETOKENIZE); - expect(TokensApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Tokens).toHaveBeenCalled(); }); test('should initialize TokensApi for TOKENIZE', () => { vaultClient.initAPI(authInfo, TYPES.TOKENIZE); - expect(TokensApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Tokens).toHaveBeenCalled(); }); test('should initialize QueryApi for QUERY', () => { vaultClient.initAPI(authInfo, TYPES.QUERY); - expect(QueryApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Query).toHaveBeenCalled(); }); test('should not initialize API for unsupported type', () => { vaultClient.initAPI(authInfo, 'UNSUPPORTED_TYPE'); - expect(RecordsApi).not.toHaveBeenCalled(); - expect(TokensApi).not.toHaveBeenCalled(); - expect(QueryApi).not.toHaveBeenCalled(); + expect(Records).not.toHaveBeenCalled(); + expect(Tokens).not.toHaveBeenCalled(); + expect(Query).not.toHaveBeenCalled(); }); }); @@ -116,24 +121,24 @@ describe('VaultClient', () => { test('should initialize RecordsApi for INSERT', () => { vaultClient.initAPI(authInfo, TYPES.INSERT); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize TokensApi for TOKENIZE', () => { vaultClient.initAPI(authInfo, TYPES.TOKENIZE); - expect(TokensApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Tokens).toHaveBeenCalled(); }); test('should initialize QueryApi for QUERY', () => { vaultClient.initAPI(authInfo, TYPES.QUERY); - expect(QueryApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Query).toHaveBeenCalled(); }); test('should not initialize API for unsupported type', () => { vaultClient.initAPI(authInfo, 'UNSUPPORTED'); - expect(RecordsApi).not.toHaveBeenCalled(); - expect(TokensApi).not.toHaveBeenCalled(); - expect(QueryApi).not.toHaveBeenCalled(); + expect(Records).not.toHaveBeenCalled(); + expect(Tokens).not.toHaveBeenCalled(); + expect(Query).not.toHaveBeenCalled(); }); }); @@ -207,163 +212,211 @@ describe('VaultClient', () => { }); describe('failureResponse', () => { - test('should handle JSON error responses correctly', () => { + test('should handle JSON error responses with rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - data: { error: { message: 'JSON error occurred', http_status: 400 } }, - status: 400, + rawResponse: { + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ]), }, - }; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - - test('should handle JSON error responses with empty error correctly', () => { - const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - data: { error: { } }, - status: 400, + body: { + error: { + message: 'JSON error occurred', + http_code: 400, + grpc_code: 3, + details: [], + }, }, + statusCode: 400, }; - vaultClient.failureResponse(errorResponse).catch(err => { + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle JSON error responses with empty data correctly', () => { + test('should handle text error responses with rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - data: { }, - status: 400, + rawResponse: { + headers: new Map([ + ['content-type', 'text/plain'], + ['x-request-id', 'abc-123'], + ]), }, - }; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - - test('should handle JSON error responses without data correctly', () => { - const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - status: 400, + body: { + error: { + message: 'Text error occurred', + }, }, + statusCode: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - - test('should handle without error responses correctly', () => { - const errorResponse = {}; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - test('should handle text error responses correctly', () => { - const errorResponse = { - response: { - headers: { 'content-type': 'text/plain', 'x-request-id': '12345' }, - data: 'Text error occurred', - status: 500, - }, - }; - vaultClient.failureResponse(errorResponse).catch(err => { + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle errors without content-type correctly', () => { + test('should handle generic error responses with rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'none' }, - status: 500, + rawResponse: { + headers: new Map([ + ['x-request-id', 'abc-123'], + ]), + }, + body: { + error: { + message: 'Generic error occurred', + grpc_code: 5, + }, }, + statusCode: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - - test('should handle generic errors without content-type correctly', () => { + + test('should handle rawResponse with error-from-client header correctly', async () => { const errorResponse = { - response: { - headers: {}, - status: 500, + rawResponse: { + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ['error-from-client', 'true'], + ]), }, + body: { + error: { + message: 'Client error occurred', + http_code: 403, + grpc_code: 7, + details: [], + }, + }, + statusCode: 403, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }); + } }); - test('should handle JSON error responses correctly with error-from-client header', () => { + + test('should handle JSON error responses without rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345', 'error-from-client': 'true' }, - data: { error: { message: 'JSON error occurred', http_status: 400, } }, + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ['error-from-client', 'true'], + ]), + data: { + error: { + message: 'JSON error occurred', + http_status: 400, + grpc_code: 3, + details: [{ field: 'field1', issue: 'issue1' }], + }, + }, status: 400, - }, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle JSON error responses correctly with error-from-client header and details list', () => { + + test('should handle text error responses without rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345', 'error-from-client': 'true' }, - data: { error: { message: 'JSON error occurred', http_status: 400, details: [] } }, - status: 400, - }, + headers: new Map([ + ['content-type', 'text/plain'], + ['x-request-id', 'abc-123'], + ]), + data: 'Text error occurred', + status: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle JSON error responses correctly with error-from-client header and details being null ', () => { + test('should handle generic error responses without rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345', 'error-from-client': 'true' }, - data: { error: { message: 'JSON error occurred', http_status: 400, details: null } }, - status: 400, - }, + headers: new Map([ + ['x-request-id', 'abc-123'], + ]), + data: { + error: { + message: 'Generic error occurred', + }, + }, + status: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle text error responses correctly with error-from-client header', () => { + test('should handle error responses without content-type correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'text/plain', 'x-request-id': '12345', 'error-from-client': 'false' }, - data: 'Text error occurred', + headers: new Map([ + ['x-request-id', 'abc-123'], + ]), + data: { + error: { + message: 'Error without content-type', + }, + }, status: 500, - }, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle generic errors without content-type and with error-from-client header', () => { + test('should handle error responses with error-from-client header correctly', async () => { const errorResponse = { - response: { - headers: {'error-from-client': 'true'}, - status: 500, - }, + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ['error-from-client', 'true'], + ]), + data: { + error: { + message: 'Client error occurred', + http_status: 403, + grpc_code: 7, + details: [], + }, + }, + status: 403, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }); + } }); }); diff --git a/test/vault/controller/connection.test.js b/test/vault/controller/connection.test.js index 1ec65e3c..9e8a0ed8 100644 --- a/test/vault/controller/connection.test.js +++ b/test/vault/controller/connection.test.js @@ -1,126 +1,158 @@ -import axios from "axios"; -import { fillUrlWithPathAndQueryParams, generateSDKMetrics, getBearerToken, LogLevel, MessageType, RequestMethod, parameterizedString, printLog, SDK_METRICS_HEADER_KEY, TYPES } from "../../../src/utils"; -import logs from "../../../src/utils/logs"; +import { + fillUrlWithPathAndQueryParams, + generateSDKMetrics, + getBearerToken, + LogLevel, + RequestMethod, + SDK_METRICS_HEADER_KEY, + SKYFLOW_AUTH_HEADER_KEY, +} from "../../../src/utils"; import { validateInvokeConnectionRequest } from "../../../src/utils/validations"; import VaultClient from "../../../src/vault/client"; import ConnectionController from "../../../src/vault/controller/connections"; -jest.mock("axios"); jest.mock("../../../src/utils"); jest.mock("../../../src/utils/validations"); -describe("ConnectionController", () => { +describe("ConnectionController Tests", () => { let mockClient; let connectionController; beforeEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); mockClient = new VaultClient(); connectionController = new ConnectionController(mockClient); - jest.clearAllMocks(); // Clear previous mocks before each test }); it("should invoke a connection successfully", async () => { - const invokeRequest = { + const token = { key: "bearer_token" }; + + // Mocking methods + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); + mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); + getBearerToken.mockImplementation(jest.fn().mockResolvedValue(token)); + fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); + generateSDKMetrics.mockReturnValue({ metric: "value" }); + validateInvokeConnectionRequest.mockImplementation(jest.fn()); + global.fetch = jest.fn().mockResolvedValue({ + ok: true, + status: 200, + statusText: "OK", + json: jest.fn().mockResolvedValue({ data: { success: true } }), + headers: { + get: jest.fn().mockImplementation((key) => { + if (key === "x-request-id") return "request_id"; + return null; + }), + }, + }); + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, + }; + + const expectedResult = { + data: { success: true }, + metadata: { requestId: "request_id" }, + errors: undefined, }; + + const result = await connectionController.invoke(request); + + expect(fetch).toHaveBeenCalledWith("https://api.example.com/resource", { + method: RequestMethod.POST, + body: JSON.stringify(request.body), + headers: { + ...request.headers, + [SKYFLOW_AUTH_HEADER_KEY]: token.key, + [SDK_METRICS_HEADER_KEY]: JSON.stringify(generateSDKMetrics()), + }, + }); + }); + it("should handle errors in fetch call", async () => { const token = { key: "bearer_token" }; - const response = { data: { success: true }, headers: { 'x-request-id': 'request_id' } }; - - // Mocking implementations + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); - getBearerToken.mockResolvedValue(token); + getBearerToken.mockImplementation(jest.fn().mockResolvedValue(token)); fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); generateSDKMetrics.mockReturnValue({ metric: "value" }); - axios.mockResolvedValue(response); - validateInvokeConnectionRequest.mockImplementation(() => {}); // No-op for validation - - const result = await connectionController.invoke(invokeRequest); - - expect(validateInvokeConnectionRequest).toHaveBeenCalledWith(invokeRequest); - expect(getBearerToken).toHaveBeenCalledWith(mockClient.getCredentials(), LogLevel.ERROR); - expect(axios).toHaveBeenCalledWith({ - url: "https://api.example.com/resource", - method: RequestMethod.POST, - data: invokeRequest.body, + validateInvokeConnectionRequest.mockImplementation(jest.fn()); + global.fetch = jest.fn().mockResolvedValue({ + ok: false, + status: 500, + statusText: "Internal Server Error", + json: jest.fn().mockResolvedValue({ error: "Something went wrong" }), headers: { - ...invokeRequest.headers, - 'x-skyflow-authorization': token.key, - [SDK_METRICS_HEADER_KEY]: JSON.stringify(generateSDKMetrics()), + get: jest.fn().mockImplementation(() => null), }, }); - expect(result).toEqual({ data: response.data, metadata: { requestId: 'request_id' } }); - }); - - it("should handle errors in getBearerToken", async () => { - const invokeRequest = { + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, }; + + const expectedError = { + body: { error: "Something went wrong" }, + statusCode: 500, + message: "Internal Server Error", + headers: expect.anything(), + }; + + await expect(connectionController.invoke(request)).rejects.toThrow(); + }); - // Mocking implementations + it("should handle errors in getBearerToken", async () => { + const tokenError = new Error("Token Error"); + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); - getBearerToken.mockRejectedValue(new Error("Token error")); - - await expect(connectionController.invoke(invokeRequest)).rejects.toThrow("Token error"); - }); - - it("should handle errors in axios call", async () => { - const invokeRequest = { + getBearerToken.mockImplementation(jest.fn().mockRejectedValue(tokenError)); + fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); + generateSDKMetrics.mockReturnValue({ metric: "value" }); + validateInvokeConnectionRequest.mockImplementation(jest.fn()); + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, - // method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, - }; - - const token = { key: "bearer_token" }; - const errorResponse = { - response: { - status: 500, - data: { message: "Internal Server Error" }, - headers: { 'x-request-id': 'request_id' }, - } + method: RequestMethod.POST, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, }; + + await expect(connectionController.invoke(request)).rejects.toThrow(); + }); - // Mocking implementations + it("should handle synchronous validation errors", async () => { + const validationError = new Error("Validation Error"); + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); - getBearerToken.mockResolvedValue(token); + getBearerToken.mockImplementation(jest.fn().mockResolvedValue({ key: "bearer_token" })); fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); generateSDKMetrics.mockReturnValue({ metric: "value" }); - validateInvokeConnectionRequest.mockImplementation(() => {}); - axios.mockRejectedValue(errorResponse); - mockClient.failureResponse = jest.fn().mockResolvedValue(undefined); - - connectionController.invoke(invokeRequest).catch(err=>{ - expect(err).toBeDefined(); - }) - - expect(mockClient.failureResponse).not.toHaveBeenCalledWith(errorResponse); - }); - - it("should handle synchronous validation errors", async () => { - const invokeRequest = { + validateInvokeConnectionRequest.mockImplementation(() => { + throw validationError; + }); + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, }; - - const validationError = new Error("Validation error"); - validateInvokeConnectionRequest.mockImplementation(() => { throw validationError; }); - - await expect(connectionController.invoke(invokeRequest)).rejects.toThrow(validationError); + + await expect(connectionController.invoke(request)).rejects.toThrow(); }); }); diff --git a/test/vault/controller/vault.test.js b/test/vault/controller/vault.test.js index e3e9c44b..5adbbab1 100644 --- a/test/vault/controller/vault.test.js +++ b/test/vault/controller/vault.test.js @@ -139,8 +139,18 @@ describe('VaultController insert method', () => { mockVaultClient = { getLogLevel: jest.fn().mockReturnValue('DEBUG'), vaultAPI: { - recordServiceInsertRecord: jest.fn(), - recordServiceBatchOperation: jest.fn(), + recordServiceInsertRecord: jest.fn().mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + records: [{ skyflow_id: 'id123', tokens: {} }], + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })), + recordServiceBatchOperation: jest.fn().mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }], + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })), }, initAPI: jest.fn(), getCredentials: jest.fn().mockReturnValue({}), @@ -162,43 +172,20 @@ describe('VaultController insert method', () => { getUpsertColumn: jest.fn().mockReturnValue(''), getHomogeneous: jest.fn().mockReturnValue(false), getTokenMode: jest.fn().mockReturnValue(''), - getTokens: jest.fn().mockReturnValue([{}]) - }; - const mockResponseData = { records: [{ skyflow_id: 'id123', tokens: {} }] }; - - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockResolvedValueOnce({ data: mockResponseData }); - - const response = await vaultController.insert(mockRequest, mockOptions); - - expect(mockVaultClient.vaultAPI.recordServiceInsertRecord).toHaveBeenCalledWith( - mockVaultClient.vaultId, - mockRequest.tableName, - expect.any(Object), // Request body - expect.any(Object) // Headers - ); - expect(response).toBeInstanceOf(InsertResponse); - expect(response.insertedFields).toHaveLength(1); - }); - - test('should successfully insert records with bulk insert', async () => { - const mockRequest = { - data: [{ field1: 'value1' }], - tableName: 'testTable', - }; - const mockOptions = { - getContinueOnError: jest.fn().mockReturnValue(false), - getReturnTokens: jest.fn().mockReturnValue(true), - getUpsertColumn: jest.fn().mockReturnValue(''), - getHomogeneous: jest.fn().mockReturnValue(false), - getTokenMode: jest.fn().mockReturnValue(''), - getTokens: jest.fn().mockReturnValue([{}]) + getTokens: jest.fn().mockReturnValue([{}]), }; - const mockResponseData = { records: [{ skyflow_id: 'id123', tokens: {} }] }; - - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { + records: [{ skyflow_id: 'id456', tokens: { token1: 'value1' } }] + }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); + const response = await vaultController.insert(mockRequest, mockOptions); - + expect(mockVaultClient.vaultAPI.recordServiceInsertRecord).toHaveBeenCalledWith( mockVaultClient.vaultId, mockRequest.tableName, @@ -222,9 +209,13 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([{}]) }; - const mockResponseData = { skyflow_id: 'id123', tokens: {} }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { skyflow_id: 'id123', tokens: {} }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); @@ -251,9 +242,15 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = { responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, { Body: { records: [{ skyflow_id: 'id123' }] }, Status: 400 }] }; - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, { Body: { records: [{ skyflow_id: 'id123' }] }, Status: 400 }] + }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); @@ -274,10 +271,16 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = { responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, null] }; - - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, null] + }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); + const response = await vaultController.insert(mockRequest, mockOptions); expect(mockVaultClient.vaultAPI.recordServiceBatchOperation).toHaveBeenCalled(); @@ -297,10 +300,13 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = null; - - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: null, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); expect(mockVaultClient.vaultAPI.recordServiceBatchOperation).toHaveBeenCalled(); @@ -320,9 +326,14 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }]; - - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: {data: { + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, { Body: { records: [{ skyflow_id: 'id123' }] }, Status: 400 }] + }}, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); @@ -352,7 +363,7 @@ describe('VaultController insert method', () => { expect(mockVaultClient.vaultAPI.recordServiceInsertRecord).not.toHaveBeenCalled(); }); - test('should log and reject on API error', async () => { + test('should handle errors in the insert second Promise chain', async () => { const mockRequest = { data: [{ field1: 'value1' }], tableName: 'testTable', @@ -362,12 +373,43 @@ describe('VaultController insert method', () => { getReturnTokens: jest.fn().mockReturnValue(true), getUpsertColumn: jest.fn().mockReturnValue(''), getHomogeneous: jest.fn().mockReturnValue(false), - getTokenMode: jest.fn().mockReturnValue('') + getTokenMode: jest.fn().mockReturnValue(''), + getTokens: jest.fn().mockReturnValue({}), }; - const errorResponse = new Error("Validation error"); - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(errorResponse.message); - await expect(vaultController.insert(mockRequest, mockOptions)).rejects.toEqual(errorResponse); + const validationError = new Error("Validation error"); + (validateInsertRequest).mockImplementation(() => { + throw validationError; + }); + + await expect(vaultController.insert(mockRequest, mockOptions)).rejects.toThrow('Validation error'); + }); + + test('should log and reject on API error', async () => { + const mockRequest = { + data: [{ field1: 'value1' }], + tableName: 'testTable', + }; + const mockOptions = { + getContinueOnError: jest.fn().mockReturnValue(false), + getReturnTokens: jest.fn().mockReturnValue(true), + getUpsertColumn: jest.fn().mockReturnValue(''), + getHomogeneous: jest.fn().mockReturnValue(false), + getTokenMode: jest.fn().mockReturnValue(''), + getTokens: jest.fn().mockReturnValue({}), + }; + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + }; + }); + + try { + await vaultController.insert(mockRequest, mockOptions); + } catch (error) { + expect(error).toBeDefined(); + } }); }); @@ -392,23 +434,34 @@ describe('VaultController detokenize method', () => { test('should successfully detokenize records', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), getDownloadURL: jest.fn().mockReturnValue(false) }; const mockDetokenizeResponse = { - data: { - records: [ - { token: 'token1', value: 'value1' }, - { token: 'token2', error: 'error2' } - ] - } + records: [ + { token: 'token1', value: 'value1' }, + { token: 'token2', error: 'error2' } + ] }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -423,22 +476,34 @@ describe('VaultController detokenize method', () => { test('should successfully detokenize records with different request', async () => { const mockRequest = { - tokens: ['token1', 'token2'], + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(false), getDownloadURL: jest.fn().mockReturnValue(true) }; const mockDetokenizeResponse = { - data: { - records: [ - { token: 'token1', value: 'value1' }, - { token: 'token2', error: 'error2' } - ] - } + records: [ + { token: 'token1', value: 'value1' }, + { token: 'token2', error: 'error2' } + ] }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -453,19 +518,31 @@ describe('VaultController detokenize method', () => { test('should successfully detokenize records with empty options', async () => { const mockRequest = { - tokens: ['token1', 'token2'], + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockDetokenizeResponse = { - data: { - records: [ - { token: 'token1', value: 'value1' }, - { token: 'token2', error: 'error2' } - ] - } + records: [ + { token: 'token1', value: 'value1' }, + { token: 'token2', error: 'error2' } + ] }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest); @@ -480,20 +557,31 @@ describe('VaultController detokenize method', () => { test('should return unknown detokenize records', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), getDownloadURL: jest.fn().mockReturnValue(false) }; const mockDetokenizeResponse = { - data: { - records: {} - } + records: {} }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -508,9 +596,18 @@ describe('VaultController detokenize method', () => { test('should reject detokenize records with validation error', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; + const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), getDownloadURL: jest.fn().mockReturnValue(false) @@ -525,7 +622,16 @@ describe('VaultController detokenize method', () => { test('should handle API error during detokenize', async () => { const mockRequest = { - tokens: ['token1', 'token2'] + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), @@ -535,8 +641,13 @@ describe('VaultController detokenize method', () => { validateDetokenizeRequest.mockImplementation(() => { // throw new Error('Validation error'); }); + const errorResponse = new Error("Invalid"); - mockVaultClient.tokensAPI.recordServiceDetokenize.mockRejectedValueOnce(errorResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.detokenize(mockRequest, mockOptions)).rejects.toThrow('Invalid'); expect(mockVaultClient.tokensAPI.recordServiceDetokenize).toHaveBeenCalled(); @@ -544,8 +655,16 @@ describe('VaultController detokenize method', () => { test('should log and resolve with empty arrays when no records are returned', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), @@ -556,7 +675,12 @@ describe('VaultController detokenize method', () => { // throw new Error('Validation error'); }); - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(new Error("Invalid")); + const errorResponse = new Error("Invalid"); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); try { const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -567,8 +691,16 @@ describe('VaultController detokenize method', () => { test('should reject when an unexpected error occurs', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), @@ -612,7 +744,12 @@ describe('VaultController delete method', () => { }; const mockResponseData = { RecordIDResponse: ['id123'] }; - mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.delete(mockRequest); @@ -651,7 +788,11 @@ describe('VaultController delete method', () => { validateDeleteRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.delete(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord).toHaveBeenCalled(); @@ -666,7 +807,12 @@ describe('VaultController delete method', () => { validateDeleteRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.delete(mockRequest); @@ -713,16 +859,18 @@ describe('VaultController tokenize method', () => { const mockRequest = { values: [{ value: 'sensitiveData', columnGroup: 'group1' }], }; - const mockResponseData = { data: { records: [{ token: 'token123' }] } }; + const mockResponseData = { records: [{ token: 'token123' }] }; - mockVaultClient.tokensAPI.recordServiceTokenize.mockResolvedValueOnce(mockResponseData); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.tokenize(mockRequest); - expect(mockVaultClient.tokensAPI.recordServiceTokenize).toHaveBeenCalledWith( - mockVaultClient.vaultId, - expect.any(Object) // Tokenize payload - ); + expect(mockVaultClient.tokensAPI.recordServiceTokenize).toHaveBeenCalled(); expect(response).toBeInstanceOf(TokenizeResponse); expect(response.tokens).toHaveLength(1); expect(response.errors).toHaveLength(0); @@ -751,7 +899,11 @@ describe('VaultController tokenize method', () => { }); const errorResponse = new Error('Invalid'); - mockVaultClient.tokensAPI.recordServiceTokenize.mockRejectedValueOnce(errorResponse.message); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.tokenize(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.tokensAPI.recordServiceTokenize).toHaveBeenCalled(); @@ -766,7 +918,12 @@ describe('VaultController tokenize method', () => { validateTokenizeRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.tokensAPI.recordServiceTokenize.mockResolvedValueOnce(mockResponseData); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try { const response = await vaultController.tokenize(mockRequest); @@ -784,7 +941,11 @@ describe('VaultController tokenize method', () => { validateTokenizeRequest.mockImplementation(() => { throw new Error('Validation error'); }); - mockVaultClient.tokensAPI.recordServiceTokenize.mockRejectedValueOnce(errorResponse); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.tokenize(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.tokensAPI.recordServiceTokenize).not.toHaveBeenCalled(); @@ -814,12 +975,19 @@ describe('VaultController query method', () => { const mockRequest = { query: 'SELECT * FROM table WHERE id=1', }; - const mockResponseData = {data:{ records: [{ - fields: { id: '1', name: 'test' }, - tokens: { id: 'token123' }, - }]}}; + const mockResponseData = { + records: [{ + fields: { id: '1', name: 'test' }, + tokens: { id: 'token123' }, + }] + }; - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockResolvedValueOnce(mockResponseData); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.query(mockRequest); @@ -841,7 +1009,12 @@ describe('VaultController query method', () => { }; const mockResponseData = {data:null}; - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockResolvedValueOnce(mockResponseData); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.query(mockRequest); @@ -877,7 +1050,12 @@ describe('VaultController query method', () => { validateQueryRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockRejectedValueOnce(errorResponse); + + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.query(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.queryAPI.queryServiceExecuteQuery).toHaveBeenCalled(); @@ -889,7 +1067,12 @@ describe('VaultController query method', () => { }; const mockResponseData = []; // Simulate no records returned - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockResolvedValueOnce(mockResponseData); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try{ const response = await vaultController.query(mockRequest); } catch(err){ @@ -903,7 +1086,11 @@ describe('VaultController query method', () => { }; const errorResponse = new Error('Invalid'); - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockRejectedValueOnce(errorResponse); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.query(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.queryAPI.queryServiceExecuteQuery).toHaveBeenCalled(); @@ -940,9 +1127,14 @@ describe('VaultController update method', () => { getTokenMode: jest.fn().mockReturnValue("DISABLE"), getTokens: jest.fn().mockReturnValue({}), }; - const mockResponseData = {data: { skyflow_id: 'id123', tokens: { field1: 'token123' } }}; + const mockResponseData = { skyflow_id: 'id123', tokens: { field1: 'token123' } }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.update(mockRequest, mockOptions); @@ -966,9 +1158,14 @@ describe('VaultController update method', () => { tableName: 'testTable', }; const mockOptions = null; - const mockResponseData = {data: { skyflow_id: 'id123', tokens: { field1: 'token123' } }}; + const mockResponseData = { skyflow_id: 'id123', tokens: { field1: 'token123' } }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.update(mockRequest, mockOptions); @@ -995,9 +1192,14 @@ describe('VaultController update method', () => { getTokenMode: jest.fn().mockReturnValue("ENABLE"), getTokens: jest.fn().mockReturnValue({}), }; - const mockResponseData = {data: { skyflow_id: 'id123', tokens: { field1: 'token123' } }}; + const mockResponseData = { skyflow_id: 'id123', tokens: { field1: 'token123' } }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.update(mockRequest, mockOptions); @@ -1049,7 +1251,9 @@ describe('VaultController update method', () => { }); const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + })); await expect(vaultController.update(mockRequest, mockOptions)).rejects.toEqual(errorResponse); expect(mockVaultClient.vaultAPI.recordServiceUpdateRecord).toHaveBeenCalled(); @@ -1067,7 +1271,12 @@ describe('VaultController update method', () => { }; const mockResponseData = { skyflow_id: 'id123' }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try{ const response = await vaultController.update(mockRequest, mockOptions); @@ -1091,7 +1300,9 @@ describe('VaultController update method', () => { }); const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + })); await expect(vaultController.update(mockRequest, mockOptions)).rejects.toEqual(errorResponse); expect(mockVaultClient.vaultAPI.recordServiceUpdateRecord).toHaveBeenCalled(); @@ -1101,8 +1312,8 @@ describe('VaultController update method', () => { describe('VaultController uploadFile method', () => { let mockVaultClient; let vaultController; - let mockFormData; let mockFs; + let mockPath; beforeEach(() => { mockVaultClient = { @@ -1115,103 +1326,152 @@ describe('VaultController uploadFile method', () => { vaultId: 'vault123', failureResponse: jest.fn().mockRejectedValueOnce(new SkyflowError({http_code:500,message:"Invalid"})) }; - mockFormData = require('form-data'); mockFs = require('fs'); + mockPath = require('path'); vaultController = new VaultController(mockVaultClient); jest.clearAllMocks(); }); - test('should successfully upload file', async () => { + test('should successfully upload file using filePath', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', + }; + const mockOptions = { + getFilePath: jest.fn().mockReturnValue('/path/to/file'), + getBase64: jest.fn(), + getFileObject: jest.fn(), + getFileName: jest.fn(), }; - const mockResponseData = {data:{ skyflow_id: 'id123' }}; + const mockFileBuffer = Buffer.from('file content'); + const mockFileName = 'file.json'; + jest.spyOn(mockFs, 'readFileSync').mockReturnValueOnce(mockFileBuffer); + jest.spyOn(mockPath, 'basename').mockReturnValueOnce(mockFileName); - const mockStream = { on: jest.fn() }; - jest.spyOn(mockFs, 'createReadStream').mockReturnValueOnce(mockStream); - mockVaultClient.vaultAPI.fileServiceUploadFile.mockResolvedValueOnce(mockResponseData); + const mockResponseData = { skyflow_id: 'id123' }; - const response = await vaultController.uploadFile(mockRequest); + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); - expect(mockFs.createReadStream).toHaveBeenCalledWith(mockRequest.filePath); + const response = await vaultController.uploadFile(mockRequest, mockOptions); + expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); expect(response).toBeInstanceOf(FileUploadResponse); expect(response.skyflowId).toBe('id123'); expect(response.errors).toHaveLength(0); }); - test('should handle validation errors during upload', async () => { + test('should successfully upload file using base64', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', }; + const mockOptions = { + getFilePath: jest.fn(), + getBase64: jest.fn().mockReturnValue('base64string'), + getFileObject: jest.fn(), + getFileName: jest.fn().mockReturnValue('file.json'), + }; + const mockBuffer = Buffer.from('base64string', 'base64'); + const mockResponseData = { skyflow_id: 'id123' }; + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); - validateUploadFileRequest.mockImplementation(() => { - throw new Error('Validation error'); - }); + const response = await vaultController.uploadFile(mockRequest, mockOptions); - await expect(vaultController.uploadFile(mockRequest)).rejects.toThrow('Validation error'); - expect(validateUploadFileRequest).toHaveBeenCalled(); - expect(mockVaultClient.vaultAPI.fileServiceUploadFile).not.toHaveBeenCalled(); + expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); + expect(response).toBeInstanceOf(FileUploadResponse); + expect(response.skyflowId).toBe('id123'); + expect(response.errors).toHaveLength(0); }); - test('should handle file stream creation failure', async () => { + test('should successfully upload file using fileObject', async () => { const mockRequest = { - filePath: '/path/to/nonexistent/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', + }; + const mockFileObject = new File(['file content'], 'file.json', { type: 'application/json' }); + const mockOptions = { + getFilePath: jest.fn(), + getBase64: jest.fn(), + getFileObject: jest.fn().mockReturnValue(mockFileObject), + getFileName: jest.fn(), }; + const mockResponseData = { skyflow_id: 'id123' }; + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); - jest.spyOn(mockFs, 'createReadStream').mockImplementationOnce(() => { - throw new Error('Validation error'); - }); + const response = await vaultController.uploadFile(mockRequest, mockOptions); - await expect(vaultController.uploadFile(mockRequest)).rejects.toThrow('Validation error'); - expect(mockFs.createReadStream).not.toHaveBeenCalledWith(mockRequest.filePath); - expect(mockVaultClient.vaultAPI.fileServiceUploadFile).not.toHaveBeenCalled(); + expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); + expect(response).toBeInstanceOf(FileUploadResponse); + expect(response.skyflowId).toBe('id123'); + expect(response.errors).toHaveLength(0); }); - test('should handle API errors during file upload', async () => { + test('should handle validation errors during upload', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', + }; + const mockOptions = { + getFilePath: jest.fn(), + getBase64: jest.fn(), + getFileObject: jest.fn(), + getFileName: jest.fn(), }; - const mockStream = { on: jest.fn() }; - jest.spyOn(mockFs, 'createReadStream').mockReturnValueOnce(mockStream); + validateUploadFileRequest.mockImplementation(() => { - // throw new Error('Validation error'); + throw new Error('Validation error'); }); - const errorResponse = new Error('Validation error'); - mockVaultClient.vaultAPI.fileServiceUploadFile.mockRejectedValueOnce(errorResponse); - await expect(vaultController.uploadFile(mockRequest)).rejects.toEqual(errorResponse); + await expect(vaultController.uploadFile(mockRequest, mockOptions)).rejects.toThrow('Validation error'); + expect(validateUploadFileRequest).toHaveBeenCalled(); expect(mockVaultClient.vaultAPI.fileServiceUploadFile).not.toHaveBeenCalled(); }); - test('should log and reject errors during file upload', async () => { + test('should handle API errors during file upload', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', }; - const mockStream = { on: jest.fn() }; - jest.spyOn(mockFs, 'createReadStream').mockReturnValueOnce(mockStream); + const mockOptions = { + getFilePath: jest.fn().mockReturnValue('/path/to/file'), + getBase64: jest.fn(), + getFileObject: jest.fn(), + getFileName: jest.fn(), + }; + const mockFileBuffer = Buffer.from('file content'); + jest.spyOn(mockFs, 'readFileSync').mockReturnValueOnce(mockFileBuffer); + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + }; + }); - const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.fileServiceUploadFile.mockRejectedValueOnce(errorResponse); + try { + await vaultController.uploadFile(mockRequest, mockOptions) + } catch (error) { + expect(error).toBeDefined(); + } - await expect(vaultController.uploadFile(mockRequest)).rejects.toEqual(errorResponse); - expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); - // expect(printLog).toHaveBeenCalledWith(errorResponse.message, MessageType.ERROR, mockVaultClient.getLogLevel()); }); }); @@ -1239,9 +1499,14 @@ describe('VaultController get method', () => { test('should successfully get records for GetRequest', async () => { const mockRequest = createGetRequest(['id1', 'id2']); - const mockResponseData = { data: { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] } }; + const mockResponseData = { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] }; - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.get(mockRequest); @@ -1256,7 +1521,7 @@ describe('VaultController get method', () => { test('should successfully get records for GetRequest with options', async () => { const mockRequest = createGetRequest(['id1', 'id2']); - const mockResponseData = { data: { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] } }; + const mockResponseData = { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] }; const mockOptions = { getRedactionType: jest.fn().mockReturnValue(true), getReturnTokens: jest.fn().mockReturnValue(true), @@ -1267,7 +1532,12 @@ describe('VaultController get method', () => { getOrderBy: jest.fn().mockReturnValue(true) }; - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.get(mockRequest,mockOptions); @@ -1282,9 +1552,14 @@ describe('VaultController get method', () => { test('should successfully get records for GetColumnRequest', async () => { const mockRequest = createGetColumnRequest('columnName', ['value1', 'value2']); - const mockResponseData = { data: { records:[{ fields: { field1: 'value1' } }]}}; + const mockResponseData = { records:[{ fields: { field1: 'value1' } }]}; - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.get(mockRequest); @@ -1328,7 +1603,11 @@ describe('VaultController get method', () => { const errorResponse = new Error('Invalid'); validateGetRequest.mockImplementation(() => { }); - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + }; + }); await expect(vaultController.get(mockRequest)).rejects.toEqual(errorResponse); @@ -1340,7 +1619,11 @@ describe('VaultController get method', () => { const mockRequest = createGetRequest(['id1']); const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse), + }; + }); await expect(vaultController.get(mockRequest)).rejects.toEqual(errorResponse); }); @@ -1350,7 +1633,12 @@ describe('VaultController get method', () => { const mockResponseData = [{ fields: { field1: 'value1' } }]; validateGetRequest.mockImplementation(() => { }); - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try{ const response = await vaultController.get(mockRequest); @@ -1399,10 +1687,19 @@ describe('VaultController Error Handling', () => { }, }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); + // You can check if the error contains the right message try { await vaultController.insert({ tableName: 'users', data: [{}] }); @@ -1423,7 +1720,15 @@ describe('VaultController Error Handling', () => { }, }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); @@ -1444,7 +1749,15 @@ describe('VaultController Error Handling', () => { }, }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); @@ -1459,7 +1772,15 @@ describe('VaultController Error Handling', () => { test('failureResponse should handle generic error when no response object', async () => { const mockError = new Error('Network Error'); - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); diff --git a/tsconfig.json b/tsconfig.json index fe5799a5..03e5aeef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,9 +3,10 @@ "sourceMap": true, "noImplicitAny": false, "target": "es6", - "lib": ["es2015", "es2017", "dom"], + "lib": ["es2015", "es2017", "es2019", "dom"], "esModuleInterop": true, "module": "commonjs", + "moduleResolution": "node", "removeComments": true, "allowSyntheticDefaultImports": true, "allowJs": true,